Docker-compose 基本语法

Docker-compose 基本语法

version: '2'
services:
  web:
    image: dockercloud/hello-world
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier

  redis:
    image: redis
    links:
      - web
    networks:
      - back-tier

  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

networks:
  front-tier:
    driver: bridge
  back-tier:
driver: bridge

1.image

定义镜像,在这个服务体系下有一个web容器,image指定了镜像

services:
  web:
    image: hello-world
# 镜像可用格式
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

2.build

构建镜像,指定文件路径,可以创建镜像。服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器

build: /path/to/build/dir

也可以是相对路径,只要上下文确定就可以读取到 Dockerfile

build: ./dir

根据 Dockerfile 构建镜像,并命名为 image 标识的名称,args代表环境变量

build:
  context: ../
  dockerfile: path/of/Dockerfile
   args:
    buildno: 1
    password: secret
image: webapp:tag

3.command

替换当前镜像封装的默认命令

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

4.container_name:<项目名称><服务名称><序号>

替换默认启动名称

container_name: app

5.depends_on

启动顺序有依赖关系,web 定义 depends_on 表面 web 依赖于db 和 redis,那么 web 启动前,redis 和 db 会先启动,关闭时也是它们先关闭

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

6.dns

修改当前主机默认 DNS

dns: 8.8.8.8

dns:
  - 8.8.8.8
  - 9.9.9.9

7.tmpfs

临时目录,容器启动后创建,容器关闭时删除

tmpfs: /run
tmpfs:
  - /run
  - /tmp

8. entrypoint

修改启动命令

entrypoint: /code/entrypoint.sh

9.env_file:批量注入环境变量

env_file: .env
aa=123
name=zhangsan
addr=beijing

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

10.environment:镜像变量

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET: 123

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

11.expose:暴露端口

expose:
 - "3000"
 - "8000"

12. external_links:链接外部容器

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

13.extra_hosts:添加 host 解析

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

14.labels

目前在docker-compose没有实际用途

labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
labels:
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

15.links:与 Docker client 的 --link 一样效果,会连接到其它服务中的容器

web:
  links:
   - db:database
   - redis

16. logging 指定日志程序

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

17.pid 指定当前项目id

pid: "host"

18.port 指定暴露端口和映射端口

如果只写 3000,会将物理机的随机端口与容器的3000端口做映射,左边是物理机端口,右边是容器端口

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

19.security_opt

# 为每个容器覆盖默认的标签。简单说来就是管理全部服务的标签。比如设置全部服务的user标签值为USER。
security_opt:
  - label:user:USER
  - label:role:ROLE

20. stop_signal 定义容器关闭默认信号

stop_signal: SIGUSR1

21.volumes

volumes:
  // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
  - /var/lib/mysql

  // 使用绝对路径挂载数据卷
  - /opt/data:/var/lib/mysql

  // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
  - ./cache:/tmp/cache

  // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
  - ~/configs:/etc/configs/:ro

  // 已经存在的命名的数据卷。
  - datavolume:/var/lib/mysql

22.volumes_from:从其它容器或者服务挂载数据卷,可选的参数是 :ro或者 :rw,前者表示容器只读,后者表示容器对数据卷是可读可写的。默认情况下是可读可写的

volumes_from:
  - service_name
  - service_name:ro
  - container:container_name
  - container:container_name:rw

23.cap_add, cap_drop

权限管理,cap_add 添加权限,cap_drop 关闭权限

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

24.extends

添加额外文件

extends:
  file: common.yml
  service: webapp

25.network_mode

网络模式

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

26. networks

除了指定你自己的网络外,你还可以通过定义一个 network 来改变整个应用程序的默认网络的设置,以取代(或同时)指定你的网络。

services:
  some-service:
    networks:
     - some-network
     - other-network

Example

version: '2'

services:
   db:
     image: mysql:5.7
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     restart: always
     ports:
       - "8000:80"
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
THE END
分享
二维码
< <上一篇
下一篇>>