DockerCompose配置文件Docker-Compose.yml文件详解

建站服务器

image或者build中的一个,其它的是可选的。

创新互联建站专业为企业提供碾子山网站建设、碾子山做网站、碾子山网站设计、碾子山网站制作等企业网站建设、网页设计与制作、碾子山企业网站模板建站服务,10年碾子山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。image

image:Redis
image:ubuntu:14.04
image:tutum/influxdb
image:example-registry.com:4000/postgresql
image:a4bc65fd

注意,在version 1里同时使用imagebuild是不允许的,version 2则可以,如果同时指定了两者,会将build出来的镜像打上名为image标签。

build

用来指定一个包含Dockerfile文件的路径。一般是当前目录.。Fig将build并生成一个随机命名的镜像。

注意,在version 1bulid仅支持值为字符串。version 2里支持对象格式。

build:./dir

build:
context:./dir
dockerfile:Dockerfile-alternate
args:
buildno:1

context为路径,dockerfile为需要替换默认docker-compose的文件名,args为构建(build)过程中的环境变量,用于替换Dockerfile里定义的ARG参数,容器中不可用。示例:
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=secret

command

command:bundleexecthin-p3000

command也支持数组形式:

command:[bundle,exec,thin,-p,3000]
links

docker run --link。示例:

links:
-db
-db:Mysql
-redis

使用了别名将自动会在容器的/etc/hosts文件里创建相应记录:

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/: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

docker run -e。可以是数组或者字典格式:

environment:
RACK_ENV:development
SESSION_SECRET:

environment:
-RACK_ENV=development
-SESSION_SECRET
depends_on

例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。
例如下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务:

ersion:'2'
services:
web:
build:.
depends_on:
-db
-redis
redis:
image:redis
db:
image:postgres

注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。

external_links

docker-compose.yml文件或者Compose之外定义的服务,通常是提供共享或公共服务。格式与links相似:

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

注意,external_links链接的服务与当前服务必须是同一个网络环境。

extra_hosts

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

将会在/etc/hosts创建记录:

162.242.195.82somehost
50.31.209.229otherhost
extends

extends:
file:common.yml
service:webapp

service必须有,file可选。service是需要继承的服务,例如webdatabase

net

--net参数。

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
#默认值为no,即在任何情况下都不会重新启动容器;当值为always时,容器总是重新启动;当值为on-failure时,当出现on-failure#报错容器退出时,容器重新启动。
log_driver:json-file
#默认的driver是json-file。只有json-file和journald可以通过docker-composelogs显示日志
ports:
-ip::2181/tcp:2181/tcp
#暴露端口信息。
#使用宿主:容器(HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
#-"3000"
#-"8000:8000"
#-"127.0.0.1:8001:8001"
#注:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。
volumes:
-/data/zookeeper/logs/:/zookeeper/logs/
-/data/zookeeper/data/:/zookeeper/data/
-/data/zookeeper/conf/:/zookeeper/conf/
#挂载一个目录或者一个已存在的数据卷容器,可以直接使用[HOST:CONTAINER]这样的格式,或者使用[HOST:CONTAINER:ro]这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。
#Compose的数据卷指定路径可以是相对路径,使用.或者..来指定相对目录。
#卷挂载路径设置。可以设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)。
command:/root/zookeeper.sh
#覆盖容器启动后默认执行的命令。
environment:
-.utf8
-TZ=Asia/Shanghai
#设置环境变量。你可以使用数组或字典两种格式。
#只给定名称的变量会自动获取它在Compose主机上的值,可以用来防止泄露不必要的数据。
#environment:
#-RACK_ENV=development
#-SESSION_SECRET


#depends_on
#在使用Compose时,的好处就是少打启动命令,但是一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。
#例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是depends_on,这个标签解决了容器的依赖、启动先后的问题。
#例如下面容器会先启动redis和db两个服务,最后才启动web服务:
#version:'2'
#services:
#web:
#build:.
#depends_on:
#-db
#-redis
#redis:
#image:redis
#db:
#image:postgres



#links
#还记得上面的depends_on吧,那个标签解决的是启动顺序问题,这个标签解决的是容器连接问题,与Dockerclient的--link一样效果,会连接到其它服务中的容器。
#格式如下:
#links:
#-db
#-db:database
#-redis
#使用的别名将会自动在服务容器中的/etc/hosts里创建。例如:
#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


新闻标题:DockerCompose配置文件Docker-Compose.yml文件详解
网页路径:http://hbruida.cn/article/cphsci.html