首页 > 代码库 > 容器编排 Docker Compose

容器编排 Docker Compose

在我们启动容器的时候经常要使用docker run 指定很多参数,当我们需要管理很多容器时,使用这样的方式会给我们的运维人员带来很大的负担,docker compose容器编排工具无疑是解决这个一问题的利器。

Docker Compose是用来管理多容器应用的工具,我们可以使用compose file 文件来配置容器的应用和服务,编写好compose file 文件以后,我们只需要使用一条简单的命令就可以创建并启动我们需要的应用。

使用compose一般有三个步骤:
1、编写Dockerfile,定义镜像的构建参数。

2、编写docker-compose.yml文件,定义应用的挂载,环境变量,启动参数等。

3、执行 docker-compose up 命令,自动执行构建镜像并启动容器和应用。


安装Compose

这里只介绍Linux环境下的安装。

执行如下命令:

curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

可以根据的自己的需求安装不同的版本,修改链接中的版本号即可。也可以直接去https://github.com/docker/compose/releases 上下载需要的版本。

对文件添加执行权限:

 chmod +x /usr/local/bin/docker-compose

安装完成后,执行compose命令验证是否安装成功:

# docker-compose --version

docker-compose version 1.14.0, build c7bdf9e


Compose file 常用语法介绍

compose使用的是YAML格式的文件,我们可以使用它来定义服务、网络和卷。compose file的固定命名为 docker-compose.yml。

这里只列出常用的信息,具体用法参考:https://docs.docker.com/compose/compose-file/ 


build: 构建镜像,指定构建的路径,文件,源镜像等信息。

build:
  context: .             # 指定Dockerfile的构建路径,或者是一个url的git仓库地址
  dockerfile: Dockerfile-abcd  #可以指定Dockerfile的名称,如果不是默认名称时。
  args:    #添加构建参数,环境变量参数只能在构建过程中访问,使用时需要先在Dockerfile中定义。
    - buildno=1  #yaml语法,‘=’两边不能有空格
    - password=secret #也可以使用列表的方式  ‘password: secret‘

 command: 用于重新覆盖Dockerfile中的COMMAND命令。

command: COMMAND args

也可以使用列表的形式:

command: ["comand1", "command2"]

devices: 映射宿主机的设备到容器中。

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

depends_on: 执行此模块的行为时,所依赖的其他模块必须已经完成。

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

env_file: 从文件中添加环境变量参数。如果您使用docker-compose -f FILE指定了一个Compose文件,则env_file中的路径与文件所在的目录相关。

env_file: .env

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

expose:暴露端口而不将它们发布到主机 - 它们只能被链接服务访问。 只能指定内部端口。

expose:
 - "3000"
 - "8000"

image: 指定要从中启动容器的镜像,可以是存储库/标签或部分映像ID。

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

links: 链接到另一个服务中的容器。 请同时指定服务名称和链接别名(SERVICE:ALIAS),或仅指定服务名称。

logging: 日志服务。支持三种日志驱动,json-file, syslog, none. 默认的为json-file.

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"
services:
  some-service:
    image: some-service
    logging:
      driver: "json-file"
      options:
        max-size: "200k"    # 日志文件最大不超过200K
        max-file: "10"      # 日志文件最多不超过10个

network_mode: 指定网络模式。与使用docker 命令的-net参数一样。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"

networks: 指定所要加入的网络。

IPV4_ADDRESS:指定加入这个网络的IP地址。

services:
  some-service:
    networks:
     - some-network
     - other-network
services:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10
networks:
  app_net:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
      -
        subnet: 172.16.238.0/24
      -
        subnet: 2001:3984:3989::/64

ports: 对外开放的端口。

短语法模式:

ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"
 - "6060:6060/udp"

长语法模式(版本v3.2):

target:容器内部端口

published:对外暴露的端口

protocol:协议类型

mode:  host 用于在每个节点上发布主机端口的主机,或将要进行负载均衡的群模式端口的入口。

ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

vlumes: 挂载宿主机目录,或命名卷。

短语法:

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql
  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql
  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache
  # User-relative path
  - ~/configs:/etc/configs/:ro
  # Named volume
  - datavolume:/var/lib/mysql

长语法(v3.2):

volumes:
  - type: volume
    source: mydata
    target: /data
    volume:
      nocopy: true
  - type: bind
    source: ./static
    target: /opt/app/static

restart: 定义自启动。

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir指定属性。 与使用docker run 指定参数功能一样。

user: postgresql
working_dir: /code
domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43
privileged: true
read_only: true
shm_size: 64M
stdin_open: true
tty: true




本文出自 “Trying” 博客,请务必保留此出处http://tryingstuff.blog.51cto.com/4603492/1948706

容器编排 Docker Compose