Zacard's Notes

Docker学习系列四:Docker Compose

什么是Docker Compose

Docker Compose是一个用来定义和运行docker应用服务(一个或者多个dacker容器应用)的工具。使用Compose file来配置管理docker应用服务。

为什么要用Docker Compose

先来看下一下例子:

docker run --name jetty -p 8881:8080 -p 22 -d jetty;
docker run --name jenkins -p 8882:8080 --link -d jetty:jetty jenkins;

这段运行的命令是要先运行一个jetty容器,然后启用一个jenkins容器,同时链接到之前启动的jetty容器。命令显的冗长且极容易敲错或者漏敲。而且不容易记忆,迁移复杂。

如果使用Docker Compose的形式,只需配置一个docker-compose.yml文件即可。如下所示:

services:
  jetty:
      images:jetty
    container_name:jetty
      ports:
        - "8881:8080"
        - "22"
  jenkins:
    imagesLjenkins
    container_name:jenkins
    ports:
      - "8882:8080"
    links:
      jetty

然后运行命令:

docker-compose up -d

即可做到和之前的命令一样的效果。

如同Dockerfile之于镜像构建,Compose file使从Docker image运行Docker contain的过程结构化、透明化。并使之保留运行的记录。

Dokcer Compose安装

安装使用如下命令:

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

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

同时推荐安装zsh的命令行补全:

mkdir -p ~/.zsh/completion

curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/zsh/_docker-compose > ~/.zsh/completion/_docker-compose

测试是否安装成功:

docker-compose --version

Compose file语法

具体请参考:官方说明

在此只摘录几个常用的。

build

build配置项有2种形式。String形式表示镜像build所需的DOckerfile路径;对象形式表示镜像build所需的的dockerfile和参数。例如以下命令:

buile: ./dir

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

container_name

指定一个自定义的容器名称来代替默认生成的名称。

environment

增加一个环境变量。有2种形式。数组形式和字典形式。例如以下所示:

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

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

image

指定容器启动的镜像。可以是镜像名称或者是镜像id。例如以下所示:

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

如果镜像不存在,会自动pull下来。

链接容器和其他服务。可以指定服务名称和服务的别名。例如以下所示:

web:
  links:
    - db
    - db:mysql
    - redis

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"

volumes

挂载主机路径到容器内。例如以下所示:

volumes:
  - /var/lib/mysql
  - /opt/data:/var/lib/mysql

根据Compose file启动服务

docker-compose up

docker-compose up -d

具体更多命令,请

docker-compose --help

docker-compose [command] --help
坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章