• Docker-compose
    • Compose file
      • build
      • ARGS
      • command
      • deploy
      • docker-compose.yml还支持的配置有

    Docker-compose

    docker-compose是一个使用python编写的命令行工具,用于docker应用之间的编排,可以在单主机下使用,也可以使用在docker swarm集群或docker1.12+的swarm mode下。

    docker1.13以前docker-compose是一个独立的安装的命令行工具,文档如下https://docs.docker.com/compose/overview/,下面要讲的是compose file,已经在docker1.13种集成了docker的应用编排功能,可以在提供了docker-compose.yml文件的情况下使用docker stack deploy -f docker-compose.yml直接部署应用。

    Compose file

    Docker compose file到目前共有3个版本,docker1.13使用的compose file v3版本。官方文档:https://docs.docker.com/compose/compose-file/

    Compose file使用yaml格式定义,默认名称为docker-compose.yml。

    Dockerfile中的CMDEXPOSEVOLUMEENV命令可以不必在docker-compose.yml中再定义。

    build

    build命令在docker swarm mode下使用docker stack deploy命令时是无效的,只有在本地使用docker-compose命令时才会创建image。

    ARGS

    假如Dockerfile中有如下两个变量$buildno$password

    1. ARG buildno
    2. ARG password
    3. RUN echo "Build number: $buildno"
    4. RUN script-requiring-password.sh "$password"

    docker-compose.yml中可以使用args来定义这两个变量的值。

    1. build:
    2. context: .
    3. args:
    4. buildno: 1
    5. password: secret
    6. build:
    7. context: .
    8. args:
    9. - buildno=1
    10. - password=secret

    使用docker-compose build的时候就会替换这两个变量的值。

    也可以忽略这两个变量。

    1. args:
    2. - buildno
    3. - password

    command

    1. command: bundle exec thin -p 3000

    替换Dockerfile中默认的CMD。

    deploy

    Compose file v3才支持的功能,也是重点功能。

    1. deploy:
    2. replicas: 6
    3. update_config:
    4. parallelism: 2
    5. delay: 10s
    6. restart_policy:
    7. condition: on-failure

    deploy有如下几个子选项

    • Mode:可以为global或replicated,global能够规定服务在每台主机一个容器。replicated可以自定义service的容器个数。
    • replicas:使用replicas定义service的容器个数,只有在replicated mode下可用。
    • placement:用来限定容器部署在哪些主机上。使用constraints约束。
    • Update_config:定义service升级策略。
      • Parrallism:一次性同时升级的容器数
      • delay:两次升级之间的间隔
      • failure_action:升级失败后可以pause或continue,默认pause
      • monitor:升级后监控failure的间隔,格式(ns|us|ms|s|m|h),默认0s
      • max_failure_ratio:可容忍的失败率
    • resources:service的资源数量限定,包括如下几个值cpu_shares, cpu_quota,cpuset, mem_limit, memswap_limit, mem_swappiness
      • restart_policycondition:one、on-failure、any默认any,delaymax_attemptswindow
      • labels:为service打标签

    docker-compose.yml还支持的配置有

    • devices:devices mapping
    • depends_on:定义service依赖关系,影响启动顺序
    • dns:自定义DNS,可以是单条也可以为列表
    • dns_search:自定义DNS搜索域
    • tmpfs:挂载临时文件系统
    • entrypoint:覆盖dockerfile中国年的entrypoint
    • env_file:定义env的文件,可以为一个列表
    • environment:定义环境变量
    • expose
    • external_links:链接外部docker-compose.yml外部启动的容器
    • extra_hosts:添加外部hosts
    • group_add
    • healthcheck:检查service的健康状况
    • Image
    • Isolation:linux只支持default,windows还有其他选项
    • labels:给容器打标签,建议用DNS的反向字符串定义
    • links:链接其他service
    • logging:日志配置,可以配置日志的driver、地址等
    • network_mode
    • networks:可以连接的定义网络名称,分配IP地址,设置网络别名,LINK_LOCAL_IPS选项可以连接外部非docker管理的IP。还可以定义的选项有driver、driver_opts、enable_ipv6、ipam、internal、labels、external等
    • pid
    • ports:对外暴露的端口
    • secret:定义service可以访问的secret文件
    • security_opts
    • stop_grace_period
    • stop_signal
    • sysctls
    • ulimits
    • userns_mode
    • volumes:可以定义driver、driver_opts、external、labels等

    networks和volumes的子选项比较多,定义的时候请参照详细文档。