docker-compose模板文件常用指令

模板文件是使用docker-compose的核心,默認的模板文件名稱爲docker-compose.yml,格式爲YAML格式。每個服務都必須通過image指令指定鏡像或build指令(需要Dockerfile)等來自動構建生成鏡像。

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

下面將介紹docker-compose模板文件常用指令:

build

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

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

使用 dockerfile指令 指定Dockerfile文件名

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

例如:

version: '3'
services: 
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

command

覆蓋容器啓動後默認執行的命令

command: echo "hello world"

container_name

指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式

container_name: docker-web-container

configs

僅用於Swarm mode

deploy

僅用於Swarm mode

devices

指定設備映射關係

devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"

depends_on

解決容器的依賴、啓動先後的問題。

dns

自定義DNS服務器。可以是一個值,也可以是一個列表。

dns: 8.8.8.8
dns: 
  - 8.8.8.8
  - 114.114.114.114

environment

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

environment:
  RACK_ENV: development
  SESSION_SECRET:
environment:
  - RACK_ENV=development
  - SESSION_SECRET

expose

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

expose:
  - "3000"
  - "8000"

extra_hosts

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

extra_hosts:
  - "googledns:8.8.8.8"

healthcheck

通過命令檢查容器是否健康運行

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

image

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

image: session-web:latest

labels

爲容器添加Docker元數據(metadata)信息。例如可以爲容器添加輔助說明信息。

labels:
  com.study.department: "devops department"
  com.study.release: "v1.0"

links

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

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

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

network_mode

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

network_mode: "bridge"
network_mode: "host"
network_mode: "none"

networks

配置容器連接的網絡

version: '3'
services:
  some-service:
    networks: 
      - network-demo
networks:
  network-demo

ports

暴露端口信息,使用宿主端口:容器端口(HOST:CONTAINER)格式,或者僅僅指定容器的端口(宿主將會隨機選擇端)都可以。

ports:
  - "3000"
  - "8000:8000"

volumes

數據卷所掛載路徑設置,可以設置宿主機路徑,同時支持相對路徑

volumes:
  - /var/lib/mysql
  - cache/:/tmp/cache
  - ~/config:/etc/configs/:ro

ulimits

指定容器的ulimits限制值。

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

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

entrypoint

指定服務容器啓動後執行的入口文件

entrypoint: /code/entrypoint.sh

user

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

user: nginx

working_dir

指定容器中工作目錄

working_dir: /code

domainname

指定容器中搜索域名

domainname: your_website.com

hostname

指定容器中主機名

hostname: test

mac_address

指定容器中mac地址

mac_address: 08-00-27-0C-0A

privileged

允許容器中運行一些特權命令

privileged: true

restart

指定容器退出後的重啓策略爲始終重啓。在生產環境中推薦配置爲 always 或者 unless-stopped

restart: always

read_only

以只讀模式掛載容器的root文件系統,意味着不能對容器內容進行修改

read_only: true

stdin_open

打開標準輸入,可以接受外部輸入

stdin_open: true

tty

模擬一個僞終端

tty: true

讀取變量

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

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

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

如果執行MONGO_VERSION=3.2 docker-compse up則會啓動一個mongo:3.2鏡像的容器 。

若當前目錄存在 .env文件,執行docker-compose命令時將從該文件中讀取變量。

學而時習之

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章