docker-compose模板常用命令


一、network創建

1、docker-compose創建network

通過以下內容創建的network,名字為up_darklight

version: '2'
networks:
  darklight:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.30.5.0/24
          ip_range: 172.30.5.0/24
          gateway: 172.30.5.1

services:
  web:
    name: xxx
    networks:
      darklight:
        ipv4_address: 172.30.5.10

 

2、docker-compose使用已存在的network

external: true來指定使用已存在的network

version: '2'
networks:
  darklight:
    external: true

services:
  web:
    name: xxx
    networks:
      darklight:
        ipv4_address: 172.30.5.10

二、模板常用的命令

注意:在編寫docker-compose.yml文件時,所有的冒號(:)、短橫線(-)后面都需要加一個空格,不然會出錯。

1、build

指定Dockerfile所在文件夾的路徑(可以是絕對路徑,或者相對於docker-compose.yml文件的路徑)。docker-compose將會利用它自動構建這個鏡像,然后使用這個鏡像。

使用 context 指定Dockerfile所在文件夾的路徑。

使用 dockerfile 指定Dockerfile文件名

使用 args 指定構建鏡像時的變量

version: '3'
services: 
  web:
    build:
      context: ./dir
      dockerfile: Dockerfile
      args:
        timezone: 1

 

2、container_name

指定容器名稱,相當於docker run中的--name。默認將會使用 項目名稱_服務名稱_序號

version: '3'
services: 
  web:
    container_name: web-1

 

3、command

覆蓋容器啟動后默認執行的命令,覆蓋DockerFile中的CMD或第三方鏡像的啟動命令

version: '3'
services: 
  web:
    command: echo 'ok'

 

4、environment

設置環境變量,相當於docker run中的-e

可以使用數組字典兩種格式。只給定名稱的變量會自動獲取運行Compose主機上對應變量的值,可以用來防止泄露不必要的數據。

-e中值部分需要使用引號包裹, docker-compose.ymal中不需要用引號

version: '3'
services: 
  mysql:
    environment:
      - MYSQL_ROOT_PASSWORD=12345678
      - MYSQL_DATABASE=my-db
      
    environment:
      - MYSQL_ROOT_PASSWORD: 12345678

 

5、env_file

設置環境變量的文件路徑,相當於docker run中的--env-file,文件必須是.env,內容中key=value

version: '3'
services: 
  web:
    env_file:
      - envfile_path.env
# this is a environment file
NAME=kk yy

LENGHT=18.8

 

6、image

指定為鏡像名或鏡像ID,如果鏡像在本地不存在,Compose將會嘗試拉取這個鏡像。

version: '3'
services: 
  mysql:
    image: mysql:5.7

 

7、network_mode

設置網絡模式。使用和docker run的--network參數一樣的值

version: '3'
services: 
  mysql:
    network_mode: 'host'
    network_mode: 'none'
    network_mode: 'bridge'

8、networks

services中指定容器連接的網絡,配置/創建network

version: '3'
services:
  web:
    networks: 
      - network-demo
networks:
  network-demo
version: '3'
services:
  web:
    networks: 
      network-demo:
      		ipv4_address: 172.30.5.70
networks:
  network-demo

 

9、ports

暴露端口信息,使用宿主端口:容器端口(HOST:CONTAINER)格式,或者僅僅指定容器的端口(宿主將會隨機選擇端),相當與docker run中的-p

version: '3'
services:
  web:
    posrts: 
      - "8000:80"
      - "8080:8080"
      - "3000"	

 

10、volumes

數據卷所掛載路徑設置,可以設置宿主機路徑,同時支持相對路徑,相當於docker run中的-v

:ro定義容器中的只讀目錄

version: '3'
services:
  web:
    volumes:
      -v ./config:/root/config
      -v /home/xx/config:/root/config
      -v ./nginx.conf:/etc/nginx/nginx.conf:ro

 

11、entrypoint

指定服務容器啟動后執行的入口文件

version: '3'
services:
  web:
    entrypoint: /root/start.sh

 

12、working_dir

指定容器中工作目錄, 也可在Dockerfile中指定

version: '3'
services:
  web:
    working_dir: /root/proj

 

13、hostname

指定容器主機名,相當於docker run中的-h

version: '3'
services:
  web:
    hostname: web-1

 

14、restart

指定重啟策略,相當於docker run中的--restart

version: '3'
services:
  web:
    restart: always

15、引用環境變量

Compose模板文件支持動態讀取宿主機的系統環境變量和當前目錄下 .env 文件中的變量。

例如,下面Compose文件將從運行它的環境中讀取變量${MONGO_VERSION}的值,並寫入執行的指令中

version: '3'
services:
  db: 
    image: "mongo:${MONGO_VERSION}"

 

16、expose

暴露端口,但不映射到宿主機,只被連接的服務訪問。僅可以指定內部端口為參數。

version: '3'
services: 
  mysql:
    expose:
      - "3306"

 

17、extra_hosts

類似Docker中的--add-host參數,指定額外的host名稱映射信息。會在啟動后的服務容器中/etc/hosts文件中添加一個條目。如:8.8.8.8 googledns

version: '3'
services: 
  mysql:
    extra_hosts:
      - "baidu:8000"

 

18、healthcheck

通過命令檢查容器是否正常運行

version: '3'
services: 
  mysql:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3

 

連接到其他容器。注意:不推薦使用該指令。

應該使用docker network,建立網絡,而docker run --network來連接特定網絡。

或者使用version: '2' 和更高版本的docker-compose.yml直接定義自定義網絡並使用。

 

20、ulimits

指定容器的ulimits限制值。

例如,指定最大進程數為65535,指定文件句柄數為20000(軟限制,應用可以隨時修改,不能超過硬限制)和 40000(系統硬限制,只能root用戶提高)

version: '3'
services: 
  mysql:
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000

 

21、user

指定容器中運行應用的用戶名

version: '3'
services: 
  mysql:
    user: ubuntu

 

鏈接到其它服務的中的容器,可以指定服務名稱也可以指定鏈接別名(SERVICE:ALIAS),與 Docker 客戶端的 --link 有一樣效果,會連接到其它服務中的容器。

version: '3'
services: 
    web:
      links:
       - db
       - db:database
       - redis

 

23、depends_on

容器中服務之間的依賴關系,依賴關系會導致以下行為:

  • docker-compose up以依賴順序啟動服務。在以下示例中,db並redis在之前啟動web。
  • docker-compose up SERVICE自動包含SERVICE依賴項。在以下示例中,docker-compose up web還創建並啟動db和redis。
  • docker-compose stop按依賴順序停止服務。在以下示例中,web在db和之前停止redis
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image:redis
  db:
    image:postgres

 

參考博文: https://www.cnblogs.com/itoak/p/12925544.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM