新聞中心
建站服務(wù)器
image或者build
中的一個(gè),其它的是可選的。
image:Redis image:ubuntu:14.04 image:tutum/influxdb image:example-registry.com:4000/postgresql image:a4bc65fd
注意,在version 1
里同時(shí)使用image
和build
是不允許的,version 2
則可以,如果同時(shí)指定了兩者,會將build
出來的鏡像打上名為image
標(biāo)簽。
build
用來指定一個(gè)包含Dockerfile文件的路徑。一般是當(dāng)前目錄.。Fig將build并生成一個(gè)隨機(jī)命名的鏡像。
注意,在version 1
里bulid
僅支持值為字符串。version 2
里支持對象格式。
build:./dir build: context:./dir dockerfile:Dockerfile-alternate args: buildno:1
context
為路徑,dockerfile
為需要替換默認(rèn)docker-compose
的文件名,args
為構(gòu)建(build)過程中的環(huán)境變量,用于替換Dockerfile里定義的ARG
參數(shù),容器中不可用。示例:
Dockerfile:
ARGbuildno ARGpassword RUNecho"Buildnumber:$buildno" RUNscript-requiring-password.sh"$password"
docker-compose.yml:
build: context:. args: buildno:1 password:secret build: context:. args: -buildno=1 -password=secretcommand
command:bundleexecthin-p3000
command也支持?jǐn)?shù)組形式:
command:[bundle,exec,thin,-p,3000]links
docker run --link。示例:
links: -db -db:Mysql -redis
使用了別名將自動會在容器的/etc/hosts
文件里創(chuàng)建相應(yīng)記錄:
172.17.2.186db 172.17.2.186MYSQL 172.17.2.187redis
ports
docker run -p。示例:
ports: -"3000" -"8000:8000" -"49100:22" -"127.0.0.1:8001:8001"expose
docker run --expose。
expose: -"3000" -"8000"volumes
docker run -v。示例:
volumes: -/var/lib/mysql -cache/:/tmp/cache -~/configs:/etc/configs/:rovolumes_from
docker run --volumes-from。示例:
volumes_from: -service_name -service_name:ro -container:container_name -container:container_name:rw
container:container_name
格式僅支持version 2
。
docker run -e。可以是數(shù)組或者字典格式:
environment: RACK_ENV:development SESSION_SECRET: environment: -RACK_ENV=development -SESSION_SECRETdepends_on
例如在沒啟動數(shù)據(jù)庫容器的時(shí)候啟動了應(yīng)用容器,這時(shí)候應(yīng)用容器會因?yàn)檎也坏綌?shù)據(jù)庫而退出,為了避免這種情況我們需要加入一個(gè)標(biāo)簽,就是 depends_on,這個(gè)標(biāo)簽解決了容器的依賴、啟動先后的問題。
例如下面容器會先啟動 redis 和 db 兩個(gè)服務(wù),最后才啟動 web 服務(wù):
ersion:'2' services: web: build:. depends_on: -db -redis redis: image:redis db: image:postgres
注意的是,默認(rèn)情況下使用 docker-compose up web 這樣的方式啟動 web 服務(wù)時(shí),也會啟動 redis 和 db 兩個(gè)服務(wù),因?yàn)樵谂渲梦募卸x了依賴關(guān)系。
external_linksdocker-compose.yml文件或者Compose
之外定義的服務(wù),通常是提供共享或公共服務(wù)。格式與links
相似:
external_links: -redis_1 -project_db_1:mysql -project_db_1:postgresql
注意,external_links
鏈接的服務(wù)與當(dāng)前服務(wù)必須是同一個(gè)網(wǎng)絡(luò)環(huán)境。
extra_hosts: -"somehost:162.242.195.82" -"otherhost:50.31.209.229
將會在/etc/hosts
創(chuàng)建記錄:
162.242.195.82somehost 50.31.209.229otherhostextends
extends: file:common.yml service:webapp
service必須有,file
可選。service
是需要繼承的服務(wù),例如web
、database
。
--net參數(shù)。
net:"bridge" net:"none" net:"container:[nameorid]" net:"host"dns
dns:8.8.8.8 dns: -8.8.8.8 -9.9.9.9
完整列子:
zookeeper: image:ce3dc5339ed2 #指定為鏡像名稱或鏡像ID privileged:false restart:always #默認(rèn)值為no,即在任何情況下都不會重新啟動容器;當(dāng)值為always時(shí),容器總是重新啟動;當(dāng)值為on-failure時(shí),當(dāng)出現(xiàn)on-failure#報(bào)錯(cuò)容器退出時(shí),容器重新啟動。 log_driver:json-file #默認(rèn)的driver是json-file。只有json-file和journald可以通過docker-composelogs顯示日志 ports: -ip::2181/tcp:2181/tcp #暴露端口信息。 #使用宿主:容器(HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主將會隨機(jī)選擇端口)都可以。 #-"3000" #-"8000:8000" #-"127.0.0.1:8001:8001" #注:當(dāng)使用HOST:CONTAINER格式來映射端口時(shí),如果你使用的容器端口小于60你可能會得到錯(cuò)誤得結(jié)果,因?yàn)閅AML將會解析xx:yy這種數(shù)字格式為60進(jìn)制。所以建議采用字符串格式。 volumes: -/data/zookeeper/logs/:/zookeeper/logs/ -/data/zookeeper/data/:/zookeeper/data/ -/data/zookeeper/conf/:/zookeeper/conf/ #掛載一個(gè)目錄或者一個(gè)已存在的數(shù)據(jù)卷容器,可以直接使用[HOST:CONTAINER]這樣的格式,或者使用[HOST:CONTAINER:ro]這樣的格式,后者對于容器來說,數(shù)據(jù)卷是只讀的,這樣可以有效保護(hù)宿主機(jī)的文件系統(tǒng)。 #Compose的數(shù)據(jù)卷指定路徑可以是相對路徑,使用.或者..來指定相對目錄。 #卷掛載路徑設(shè)置。可以設(shè)置宿主機(jī)路徑(HOST:CONTAINER)或加上訪問模式(HOST:CONTAINER:ro)。 command:/root/zookeeper.sh #覆蓋容器啟動后默認(rèn)執(zhí)行的命令。 environment: -.utf8 -TZ=Asia/Shanghai #設(shè)置環(huán)境變量。你可以使用數(shù)組或字典兩種格式。 #只給定名稱的變量會自動獲取它在Compose主機(jī)上的值,可以用來防止泄露不必要的數(shù)據(jù)。 #environment: #-RACK_ENV=development #-SESSION_SECRET #depends_on #在使用Compose時(shí),的好處就是少打啟動命令,但是一般項(xiàng)目容器啟動的順序是有要求的,如果直接從上到下啟動容器,必然會因?yàn)槿萜饕蕾噯栴}而啟動失敗。 #例如在沒啟動數(shù)據(jù)庫容器的時(shí)候啟動了應(yīng)用容器,這時(shí)候應(yīng)用容器會因?yàn)檎也坏綌?shù)據(jù)庫而退出,為了避免這種情況我們需要加入一個(gè)標(biāo)簽,就是depends_on,這個(gè)標(biāo)簽解決了容器的依賴、啟動先后的問題。 #例如下面容器會先啟動redis和db兩個(gè)服務(wù),最后才啟動web服務(wù): #version:'2' #services: #web: #build:. #depends_on: #-db #-redis #redis: #image:redis #db: #image:postgres #links #還記得上面的depends_on吧,那個(gè)標(biāo)簽解決的是啟動順序問題,這個(gè)標(biāo)簽解決的是容器連接問題,與Dockerclient的--link一樣效果,會連接到其它服務(wù)中的容器。 #格式如下: #links: #-db #-db:database #-redis #使用的別名將會自動在服務(wù)容器中的/etc/hosts里創(chuàng)建。例如: #172.12.2.186db #172.12.2.186database #172.12.2.187redis sso: image:698063d64ab5 privileged:false restart:always log_driver:json-file ports: -172.16.0.13:7000/tcp:7000/tcp -172.16.0.13:10000/tcp:10000/tcp volumes: -/data/tomcat/sso/logs/:/tomcat/logs/ -/data/tomcat/sso/server.xml:/tomcat/conf/server.xml -/data/tomcat/sso/catalina.sh:/tomcat/bin/catalina.sh -/data/tomcat/sso/sso.properties:/tomcat/webapps/sso/WEB-INF/classes/sso.properties -/data/webapps/sso/:/tomcat/webapps/sso/ command:/root/tomcat.sh environment: -.utf8 -TZ=Asia/Shanghai -DEBUGPORT=10000 -CATALINA_OPTS=-Djava.security.egd=file:///dev/urandom
網(wǎng)頁名稱:DockerCompose配置文件Docker-Compose.yml文件詳解
分享路徑:http://www.ef60e0e.cn/article/cphsci.html