鍍金池/ 教程/ Linux/ YAML 模板文件
利用數(shù)據(jù)卷容器來(lái)備份、恢復(fù)、遷移數(shù)據(jù)卷
Docker 網(wǎng)絡(luò)實(shí)現(xiàn)
實(shí)戰(zhàn) Django
YAML 模板文件
名字空間
控制組
編輯網(wǎng)絡(luò)配置文件
列出
進(jìn)入容器
Compose 命令說(shuō)明
創(chuàng)建 Tomcat/Weblogic 集群
守護(hù)態(tài)運(yùn)行
快速配置指南
其它安全特性
示例:創(chuàng)建一個(gè)點(diǎn)到點(diǎn)連接
CentOS 系列安裝 Docker
數(shù)據(jù)卷容器
鏡像
指令
創(chuàng)建鏡像
Docker 容器
創(chuàng)建鏡像
常用倉(cāng)庫(kù)
總結(jié)
什么是 Docker
存出和載入鏡像
使用
獲取鏡像
容器互聯(lián)
為什么要使用 Docker?
使用 Wordpress 入門(mén) Fig
啟動(dòng)
容器訪問(wèn)控制
私有倉(cāng)庫(kù)
使用
基本架構(gòu)
自定義網(wǎng)橋
環(huán)境變量參考
實(shí)戰(zhàn) Rail
服務(wù)端的防護(hù)
刪除
鏡像的實(shí)現(xiàn)原理
多臺(tái)物理主機(jī)之間的容器互聯(lián)
Docker 倉(cāng)庫(kù)
簡(jiǎn)介
數(shù)據(jù)卷
命令參考
使用 Supervisor 來(lái)管理進(jìn)程
移除
基本結(jié)構(gòu)
命令查詢(xún)
終止容器
聯(lián)合文件系統(tǒng)
安裝
簡(jiǎn)介
配置 DNS
內(nèi)核能力機(jī)制
導(dǎo)出和導(dǎo)入容器
配置 docker0 網(wǎng)橋
倉(cāng)庫(kù)配置文件
內(nèi)核名字空間
標(biāo)準(zhǔn)化開(kāi)發(fā)測(cè)試和生產(chǎn)環(huán)境
外部訪問(wèn)容器
fig.yml 參考
Ubuntu 系列安裝 Docker
有用資源
安裝
端口映射實(shí)現(xiàn)
安裝 Fig
工具和示例
簡(jiǎn)介
控制組
容器格式
Docker Hub

YAML 模板文件

默認(rèn)的模板文件是 docker-compose.yml,其中定義的每個(gè)服務(wù)都必須通過(guò) image 指令指定鏡像或 build 指令(需要 Dockerfile)來(lái)自動(dòng)構(gòu)建。

其它大部分指令都跟 docker run 中的類(lèi)似。

如果使用 build 指令,在 Dockerfile 中設(shè)置的選項(xiàng)(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會(huì)自動(dòng)被獲取,無(wú)需在 docker-compose.yml 中再次設(shè)置。

image

指定為鏡像名稱(chēng)或鏡像 ID。如果鏡像在本地不存在,Compose 將會(huì)嘗試?yán)ミ@個(gè)鏡像。

例如:

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

build

指定 Dockerfile 所在文件夾的路徑。 Compose 將會(huì)利用它自動(dòng)構(gòu)建這個(gè)鏡像,然后使用這個(gè)鏡像。

build: /path/to/build/dir

command

覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令。

command: bundle exec thin -p 3000

links

鏈接到其它服務(wù)中的容器。使用服務(wù)名稱(chēng)(同時(shí)作為別名)或服務(wù)名稱(chēng):服務(wù)別名 (SERVICE:ALIAS) 格式都可以。

links:
 - db
 - db:database
 - redis

使用的別名將會(huì)自動(dòng)在服務(wù)容器中的 /etc/hosts 里創(chuàng)建。例如:

172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

相應(yīng)的環(huán)境變量也將被創(chuàng)建。

external_links

鏈接到 docker-compose.yml 外部的容器,甚至 并非 Compose 管理的容器。參數(shù)格式跟 links 類(lèi)似。

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

ports

暴露端口信息。

使用宿主:容器 (HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主將會(huì)隨機(jī)選擇端口)都可以。

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

注:當(dāng)使用 HOST:CONTAINER 格式來(lái)映射端口時(shí),如果你使用的容器端口小于 60 你可能會(huì)得到錯(cuò)誤得結(jié)果,因?yàn)?YAML 將會(huì)解析 xx:yy 這種數(shù)字格式為 60 進(jìn)制。所以建議采用字符串格式。

expose

暴露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問(wèn)。

僅可以指定內(nèi)部端口為參數(shù)

expose:
 - "3000"
 - "8000"

volumes

卷掛載路徑設(shè)置。可以設(shè)置宿主機(jī)路徑 (HOST:CONTAINER) 或加上訪問(wèn)模式 (HOST:CONTAINER:ro)。

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

volumes_from

從另一個(gè)服務(wù)或容器掛載它的所有卷。

volumes_from:
 - service_name
 - container_name

environment

設(shè)置環(huán)境變量。你可以使用數(shù)組或字典兩種格式。

只給定名稱(chēng)的變量會(huì)自動(dòng)獲取它在 Compose 主機(jī)上的值,可以用來(lái)防止泄露不必要的數(shù)據(jù)。

environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

env_file

從文件中獲取環(huán)境變量,可以為單獨(dú)的文件路徑或列表。

如果通過(guò) docker-compose -f FILE 指定了模板文件,則 env_file 中路徑會(huì)基于模板文件路徑。

如果有變量名稱(chēng)與 environment 指令沖突,則以后者為準(zhǔn)。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

環(huán)境變量文件中每一行必須符合格式,支持 # 開(kāi)頭的注釋行。

# common.env: Set Rails/Rack environment
RACK_ENV=development

extends

基于已有的服務(wù)進(jìn)行擴(kuò)展。例如我們已經(jīng)有了一個(gè) webapp 服務(wù),模板文件為 common.yml。

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

編寫(xiě)一個(gè)新的 development.yml 文件,使用 common.yml 中的 webapp 服務(wù)進(jìn)行擴(kuò)展。

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

后者會(huì)自動(dòng)繼承 common.yml 中的 webapp 服務(wù)及相關(guān)環(huán)節(jié)變量。

net

設(shè)置網(wǎng)絡(luò)模式。使用和 docker client--net 參數(shù)一樣的值。

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

pid

跟主機(jī)系統(tǒng)共享進(jìn)程命名空間。打開(kāi)該選項(xiàng)的容器可以相互通過(guò)進(jìn)程 ID 來(lái)訪問(wèn)和操作。

pid: "host"

dns

配置 DNS 服務(wù)器??梢允且粋€(gè)值,也可以是一個(gè)列表。

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

cap_add, cap_drop

添加或放棄容器的 Linux 能力(Capabiliity)。

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

dns_search

配置 DNS 搜索域??梢允且粋€(gè)值,也可以是一個(gè)列表。

dns_search: example.com
dns_search:
  - domain1.example.com
  - domain2.example.com

working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares

這些都是和 docker run 支持的選項(xiàng)類(lèi)似。

cpu_shares: 73

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

hostname: foo
domainname: foo.com

mem_limit: 1000000000
privileged: true

restart: always

stdin_open: true
tty: true
上一篇:Docker 容器下一篇:安裝 Fig