docker-compose version 2

web:
  build: ./web
  ports:
    - "5000:5000"
  volumes:
    - .:/code
  links:
    - redis
redis:
  image:redis

build: 可使用相对目录或绝对路径

ports: 可使用端口范围

links: 可使用别名,例如 -redis:web-redis

build的使用方法

build: ./dir

build 后可以直接使用Dockerfile所在目录,该目录必须存在Dockerfile

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

contest: 指定Dockerfile的目录,dockerfile指定Dockerfile文件名

args:不清楚是干什么使用的

images: 指定dockerfile构建出的镜像名,默认使用docker-compose.yml所在的文件夹名+service名

dockerfile: 当Dockerfile文件名不是默认名称时,使用dockerfile参数指定Dockerfile的文件名

command

覆盖Dockerfile中的command

command: bundle exec thin -p 3000

类似于dockerfile中的命令:

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

container_name

指定容器的名称

container_name: my-web-container

depends_on

表示服务之前的依赖关系,有两个效果:

  • docker-compose up,启动web服务之前、启动redis、db
  • docker-compose up web, 启动web容器时,检查依赖的配置内容,先启动db和redis
version: '2'
services: 
web:
   build: .
    depends_on:
       - db
      - redis
  redis:   
     image: redis
 db:   
    image: postgres
dns

自定义DNS,可以是单个的,也可以是列表(这个不怎么用的到)

dns: 8.8.8.8

dns:
- 8.8.8.8
- 9.9.9.9

entrypoint

覆盖默认的entrypoint
entrypoint: /code/entrypoint.sh

env_file

指定变量的文件,默认为docker-compose 文件下的.env文件
同一个变量,通过export设置,会覆盖env_file中的变量

env_file: .env

env_file:
- ./common.env
- ./app/web.env

environment

设置环境变量,支持数组和字典
environment:
RACK_ENV:development
SHOW: ‘true’
SESSION_SECRET:

or

environment:
- RACK_ENV=development
- SHOW:=’true’
- SESSION_SECRET

expose

暴露端口,并不会暴露到宿主机上,而是提供给内部容器通信
expose:
- “3000”
- “8000”

version 1中不允许build和image同时存在,version 2中允许,image代表指定build之后的镜像名称

连接其他容器,可以设置别名,设置link之后,hostname与IP的对应关系会写入到/etc/hosts 中,和depend_on类似,设置link后,也间接地规定了容器的启动顺序

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐