Docker Compose YML文件配置


Docker Compose YML

默認的模板文件是 docker-compose.yml,其中定義的每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)來自動構建。
其它大部分指令都跟 docker run 中的類似。
如果使用 build 指令,在 Dockerfile 中設置的選項(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會自動被獲取,無需在 docker-compose.yml 中再次設置。
image指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試拉去這個鏡像。

image

鏡像的地址,可以在鏡像倉庫找到。會在主機不存在該鏡像的時候,拉取。

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

build

指定 Dockerfile 所在文件夾的路徑。 Compose 將會利用它自動構建這個鏡像,然后使用這個鏡像。build構建鏡像和image下拉鏡像,優先通過build執行Dockerfile構建鏡像。

build: /path/to/build/dir

command

覆蓋掉默認的命令

command: bundle exec thin -p 3000

可以Link到其他的容器。可以直接寫應用名(同一個YML內),或者可以寫Link別名(SERVICE:ALIAS)

links:
	- db   
	- db:database
	- redis

Docker Link 會修改您容器內的HOST表和環境變量,的工作方式可以參考 Docker Link文檔。

depends_on

可以把依賴的容器名寫進來。

depends_on:
	- db
	- redis

external_links可以Link到不是同一個YML內的容器。語法和普通的Link接近。但啟動的時候要保證被Link的容器是正常運行的。可以直接寫應用名(同一個YML內),或者可以寫Link別名(SERVICE:ALIAS)

external_links:
    - redis_1
    - project_db_1:mysql
    - project_db_1:postgresql

extra_hosts

hostname映射。相當於在Docker Run中--add-host 參數.

extra_hosts:
    - "somehost:162.242.195.82"
    - "otherhost:50.31.209.229"    

這個配置會在容器的 /etc/hosts 文件中添加如下的內容。

162.242.195.82 somehost
50.31.209.229 otherhost

ports

開放端口,可以同時申明主機和容器端口 (HOST:CONTAINER), 也可以只申明容器端口。(會隨機選定一個外部端口).

ports:
    - "3000"
    - "8000:8000"
    - "49100:22"
    - "127.0.0.1:8001:8001"

expose

開放端口但不會在主機上映射。僅僅用於被其他的容器Link。只能保留內部端口

expose:
    - "3000"
    - "8000"

volumes

支持Mount存儲卷,可以支持指定主機路徑和容器路徑(HOST:CONTAINER), 還可以包括只讀 (HOST:CONTAINER:ro).

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

volumes_from

支持從其他APP和容器Mount。

volumes_from:
    - service_name
    - container_name

environment

可以添加環境變量,您可以指定YML數組或者字典。

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

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

extends

基於已有的服務進行擴展。例如我們已經有了一個 webapp 服務,模板文件為 common.yml。

   # common.yml
   webapp:
   build: ./webapp
   environment:
   	- DEBUG=false
   	- SEND_EMAILS=false

編寫一個新的 development.yml 文件,使用 common.yml 中的 webapp 服務進行擴展。

web:
extends:
file: common.yml
service: webapp
ports:
	- "8000:8000"
links:
	- db
environment:
  	- DEBUG=true
db:
    image: postgres

后者會自動繼承 common.yml 中的 webapp 服務及相關環節變量。

labels

可以通過Docker Lable給容器加一些元數據。

labels:
	com.example.description: "Accounting webapp"
	com.example.department: "Finance"
	com.example.label-with-empty-value: ""

log_driver

可以給容器增加Log Driver。和命令行參數 --log-driver 相同

現在支持 json-file, syslog and none. 默認是 json-file.

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"

net

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

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

pid

容器共享pid。 跟主機系統共享進程命名空間。打開該選項的容器可以相互通過進程 ID 來訪問和操作。在docker命令中的使用是:docker run --pid container:containerid

pid: "host"

dns

配置 DNS 服務器。可以是一個值,也可以是一個列表。

dns: 8.8.8.8
dns:
	- 8.8.8.8
    - 9.9.9.9

cap_add

增加容器的能力

cap_add: 
    - ALL

cap_drop

刪除容器的能力

cap_drop:
	- NET_ADMIN
    - SYS_ADMIN

配置 DNS 搜索域。可以是一個值,也可以是一個列表

dns_search: example.com
dns_search:
    - dc1.example.com
    - dc2.example.com

devices

設備映射. 和命令行參數 --device 相同

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

security_opt

覆蓋默認的容器安全參數

security_opt:
    - label:user:USER
    - label:role:ROLE

working_dir

docker指定工作目錄

entrypoint

docker入口點

user

指定容器當前用戶

hostname

指定容器主機名

domainname

指定域名

mem_limit

指定容器內存限制

privileged

開啟特權,可以設置容器里的內核參數

restart

重啟后的容器啟動情況

stdin_open

tty

支持tty

cpu_shares

CPU 共享權值(相對權重)

cpuset

允許使用的CPU 集,值可以為 0-3,0,1

read_only

設置只讀文件系統

下列的熟悉都和 docker run 命令中的參數相同。

cpu_shares: 73
cpuset: 0,1

working_dir: /code
entrypoint: /code/entrypoint.sh
user: postgresql

hostname: foo
domainname: foo.com

mac_address: 02:42:ac:11:65:43

mem_limit: 1000000000
privileged: true

restart: always

stdin_open: true
tty: true
read_only: true


免責聲明!

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



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