每個docker-compose.yml必須定義image或者build中的一個,其它的是可選的。
image
指定映象tag或者ID。示例:
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
複製程式碼
ps:在version 1
裡同時使用image和build是不允許的,version 2
則可以,如果同時指定了兩者,會將build出來的映象打上名為image標籤
build
用來指定一個包含Dockerfile
檔案的路徑。一般是當前目錄.
。Fig將build並生成一個隨機命名的映象。
ps:在version 1
裡bulid僅支援值為字串。version 2
裡支援物件格式。
build: ./dir
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
複製程式碼
- context:路徑
- dockerfile:需要替換預設docker-compose的檔名
- args:為構建(build)過程中的環境變數,用於替換Dockerfile裡定義的ARG引數,容器中不可用。
command
用來覆蓋預設命令。示例:
command: bundle exec thin -p 3000
也支援陣列形式:
command: [bundle, exec, thin, -p, 3000]
env_file
從檔案中獲取環境變數,可以為單獨的檔案路徑或列表。 如果通過 docker-compose -f FILE 指定了模板檔案,則 env_file 中路徑會基於模板檔案路徑。 如果有變數名稱與 environment 指令衝突,則以後者為準。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
複製程式碼
環境變數檔案中每一行必須符合格式,支援 # 開頭的註釋行。
# common.env: Set Rails/Rack environment
RACK_ENV=development
複製程式碼
links
用於連結另一容器服務,如需要使用到另一容器的mysql服務。可以給出服務名和別名;也可以僅給出服務名,這樣別名將和服務名相同。同docker run --link
。示例:
links:
- db
- db:mysql
- redis
複製程式碼
ports
用於暴露埠。同docker run -p
。示例:
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
複製程式碼
ps:冒號前面是主機上的埠,冒號後面是容器內部的埠。
expose
expose提供container之間的埠訪問,不會暴露給主機使用。同docker run --expose
。
expose:
- "3000"
- "8000"
複製程式碼
volumes
掛載資料卷。同docker run -v
。示例:
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
複製程式碼
volumes_from
掛載資料卷容器,掛載是容器。同docker run --volumes-from
。示例:
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
複製程式碼
ps:container:container_name
格式僅支援version 2
。
environment
新增環境變數。同docker run -e
。可以是陣列或者字典格式:
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
複製程式碼
depends_on
用於指定服務依賴,一般是mysql、redis等。 指定了依賴,將會優先於服務建立並啟動依賴。
links
也可以指定依賴。
external_links
連結搭配docker-compose.yml
檔案或者Compose
之外定義的服務,通常是提供共享或公共服務。格式與links相似:
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
複製程式碼
ps:external_links
連結的服務與當前服務必須是同一個網路環境。
extra_hosts
新增主機名對映。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
複製程式碼
將會在/etc/hosts建立記錄:
162.242.195.82 somehost
50.31.209.229 otherhost
複製程式碼
extends
繼承自當前yml檔案或者其它檔案中定義的服務,可以選擇性的覆蓋原有配置。
extends:
file: common.yml
service: webapp
複製程式碼
service
必須有,file
可選。service是需要繼承的服務,例如web、database。
net
設定網路模式。同docker的--net引數。
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
複製程式碼
dns
自定義dns伺服器。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
複製程式碼