建站服務(wù)器
每個(gè)docker-compose.yml必須定義image
或者build
中的一個(gè),其它的是可選的。
image
指定鏡像tag或者ID。示例:
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í)指定了兩者,會(huì )將build
出來(lái)的鏡像打上名為image
標簽。
build
用來(lái)指定一個(gè)包含Dockerfile文件的路徑。一般是當前目錄.。Fig將build并生成一個(gè)隨機命名的鏡像。
注意,在version 1
里bulid
僅支持值為字符串。version 2
里支持對象格式。
build: ./dir build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1
context
為路徑,dockerfile
為需要替換默認docker-compose
的文件名,args
為構建(build)過(guò)程中的環(huán)境變量,用于替換Dockerfile里定義的ARG
參數,容器中不可用。示例:
Dockerfile:
ARG buildno ARG password RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"
docker-compose.yml:
build: context: . args: buildno: 1 secret build: context: . args: - buildno=1 - password=secret
command
用來(lái)覆蓋缺省命令。示例:
command: bundle exec thin -p 3000
command
也支持數組形式:
command: [bundle, exec, thin, -p, 3000]
links
用于鏈接另一容器服務(wù),如需要使用到另一容器的mysql服務(wù)??梢越o出服務(wù)名和別名;也可以?xún)H給出服務(wù)名,這樣別名將和服務(wù)名相同。同docker run --link
。示例:
links: - db - db:Mysql - redis
使用了別名將自動(dòng)會(huì )在容器的/etc/hosts
文件里創(chuàng )建相應記錄:
172.17.2.186 db 172.17.2.186 MYSQL 172.17.2.187 redis
所以我們在容器里就可以直接使用別名作為服務(wù)的主機名。
ports
用于暴露端口。同docker run -p
。示例:
ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
expose
expose提供container之間的端口訪(fǎng)問(wèn),不會(huì )暴露給主機使用。同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
container:container_name
格式僅支持version 2
。
environment
添加環(huán)境變量。同docker run -e
??梢允菙到M或者字典格式:
environment: RACK_ENV: development SESSION_SECRET: environment: - RACK_ENV=development - SESSION_SECRET
depends_on
使用 Compose 時(shí),最大的好處就是少打啟動(dòng)命令,但是一般項目容器啟動(dòng)的順序是有要求的,如果直接從上到下啟動(dòng)容器,必然會(huì )因為容器依賴(lài)問(wèn)題而啟動(dòng)失敗。
例如在沒(méi)啟動(dòng)數據庫容器的時(shí)候啟動(dòng)了應用容器,這時(shí)候應用容器會(huì )因為找不到數據庫而退出,為了避免這種情況我們需要加入一個(gè)標簽,就是 depends_on,這個(gè)標簽解決了容器的依賴(lài)、啟動(dòng)先后的問(wèn)題。
例如下面容器會(huì )先啟動(dòng) redis 和 db 兩個(gè)服務(wù),最后才啟動(dòng) web 服務(wù):
ersion: '2' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
注意的是,默認情況下使用 docker-compose up web 這樣的方式啟動(dòng) web 服務(wù)時(shí),也會(huì )啟動(dòng) redis 和 db 兩個(gè)服務(wù),因為在配置文件中定義了依賴(lài)關(guān)系。
external_links
鏈接搭配docker-compose.yml
文件或者Compose
之外定義的服務(wù),通常是提供共享或公共服務(wù)。格式與links
相似:
external_links: - redis_1 - project_db_1:mysql - project_db_1:postgresql
注意,external_links
鏈接的服務(wù)與當前服務(wù)必須是同一個(gè)網(wǎng)絡(luò )環(huán)境。
extra_hosts
添加主機名映射。
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229
將會(huì )在/etc/hosts
創(chuàng )建記錄:
162.242.195.82 somehost 50.31.209.229 otherhost
extends
繼承自當前yml文件或者其它文件中定義的服務(wù),可以選擇性的覆蓋原有配置。
extends: file: common.yml service: webapp
service
必須有,file
可選。service
是需要繼承的服務(wù),例如web
、database
。
net
設置網(wǎng)絡(luò )模式。同docker的--net
參數。
net: "bridge" net: "none" net: "container:[name or id]" net: "host"
dns
自定義dns服務(wù)器。
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
完整列子:
zookeeper: image: ce3dc5339ed2 #指定為鏡像名稱(chēng)或鏡像 ID privileged: false restart: always # 默認值為 no ,即在任何情況下都不會(huì )重新啟動(dòng)容器;當值為 always 時(shí),容器總是重新啟動(dòng);當值為 on-failure 時(shí),當出現 on-failure #報錯容器退出時(shí),容器重新啟動(dòng)。 log_driver: json-file #默認的driver是json-file。只有json-file和journald可以通過(guò)docker-compose logs顯示日志 ports: - ip::2181/tcp:2181/tcp #暴露端口信息。 #使用宿主:容器 (HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主將會(huì )隨機選擇端口)都可以。 # - "3000" #- "8000:8000" #- "127.0.0.1:8001:8001" #注:當使用 HOST:CONTAINER 格式來(lái)映射端口時(shí),如果你使用的容器端口小于 60 你可能會(huì )得到錯誤得結果,因為 YAML 將會(huì )解析 xx:yy 這種數字格式為 60 進(jìn)制。所以建議采用字符串格式。 volumes: - /data/zookeeper/logs/:/zookeeper/logs/ - /data/zookeeper/data/:/zookeeper/data/ - /data/zookeeper/conf/:/zookeeper/conf/ # 掛載一個(gè)目錄或者一個(gè)已存在的數據卷容器,可以直接使用 [HOST:CONTAINER] 這樣的格式,或者使用 [HOST:CONTAINER:ro] 這樣的格式,后者對于容器來(lái)說(shuō),數據卷是只讀的,這樣可以有效保護宿主機的文件系統。 #Compose的數據卷指定路徑可以是相對路徑,使用 . 或者 .. 來(lái)指定相對目錄。 #卷掛載路徑設置??梢栽O置宿主機路徑 (HOST:CONTAINER) 或加上訪(fǎng)問(wèn)模式 (HOST:CONTAINER:ro)。 command: /root/zookeeper.sh #覆蓋容器啟動(dòng)后默認執行的命令。 environment: -.utf8 - TZ=Asia/Shanghai #設置環(huán)境變量。你可以使用數組或字典兩種格式。 #只給定名稱(chēng)的變量會(huì )自動(dòng)獲取它在 Compose 主機上的值,可以用來(lái)防止泄露不必要的數據。 #environment: #- RACK_ENV=development #- SESSION_SECRET # depends_on #在使用 Compose 時(shí),最大的好處就是少打啟動(dòng)命令,但是一般項目容器啟動(dòng)的順序是有要求的,如果直接從上到下啟動(dòng)容器,必然會(huì )因為容器依賴(lài)問(wèn)題而啟動(dòng)失敗。 #例如在沒(méi)啟動(dòng)數據庫容器的時(shí)候啟動(dòng)了應用容器,這時(shí)候應用容器會(huì )因為找不到數據庫而退出,為了避免這種情況我們需要加入一個(gè)標簽,就是 depends_on,這個(gè)標簽解決了容器的依賴(lài)、啟動(dòng)先后的問(wèn)題。 #例如下面容器會(huì )先啟動(dòng) redis 和 db 兩個(gè)服務(wù),最后才啟動(dòng) web 服務(wù): #version: '2' #services: # web: # build: . # depends_on: # - db # - redis #redis: # image: redis # db: # image: postgres #links #還記得上面的depends_on吧,那個(gè)標簽解決的是啟動(dòng)順序問(wèn)題,這個(gè)標簽解決的是容器連接問(wèn)題,與Docker client的--link一樣效果,會(huì )連接到其它服務(wù)中的容器。 #格式如下: #links: #- db #- db:database #- redis #使用的別名將會(huì )自動(dòng)在服務(wù)容器中的/etc/hosts里創(chuàng )建。例如: #172.12.2.186 db #172.12.2.186 database #172.12.2.187 redis 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=filehttp://wap.friendlycc.com.cn/host/更多關(guān)于云服務(wù)器,域名注冊,虛擬主機的問(wèn)題,請訪(fǎng)問(wèn)特網(wǎng)科技官網(wǎng):wap.friendlycc.com.cn
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站