Docker Compose简介
# Docker Compose
# 概述
Docker Compose (opens new window)是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用、容器集群的快速编排,跟 OpenStack
中的 Heat
十分类似。
Compose
定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。Compose
项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose
来进行编排管理。
我们知道使用一个 Dockerfile
模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose
恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。也就是说它默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
# 安装
Compose
支持 Linux、macOS、Windows 10 三大平台。
Compose
可以通过 Python 的包管理工具 pip
进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。
Docker for Mac
、Docker for Windows
自带 docker-compose
二进制文件,安装 Docker 之后可以直接使用。运行以下指令检查是否安装成功:
$ docker-compose --version
docker-compose version 1.23.1, build b02f1306
Linux 系统请使用以下介绍的方法安装。
# 软件包方式安装
以ubuntu为例:
$ sudo apt install docker-compose
# 二进制包
在 Linux 上的也安装十分简单,从 官方 GitHub Release (opens new window) 处直接下载编译好的二进制文件即可。
例如,在 Linux 64 位系统上直接下载对应的二进制包, 这里下载的是1.23.1版本。大家根据情况更改这个版本。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
# PIP 安装
这种方式是将 Compose 当作一个 Python 应用来从 pip 源中安装。
执行安装命令:
$ sudo pip install -U docker-compose
注意
x86_64
架构的 Linux 建议按照上边的方法下载二进制包进行安装,如果您计算机的架构是 ARM
(例如,树莓派),再使用 pip
安装。
# bash 补全命令
$ curl -L https://raw.githubusercontent.com/docker/compose/1.23.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 容器中执行
Compose 既然是一个 Python 应用,自然也可以直接用容器来执行它。
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
实际上,查看下载的 run.sh
脚本内容,如下
set -e
VERSION="1.8.0"
IMAGE="docker/compose:$VERSION"
# Setup options for connecting to docker host
if [ -z "$DOCKER_HOST" ]; then
DOCKER_HOST="/var/run/docker.sock"
fi
if [ -S "$DOCKER_HOST" ]; then
DOCKER_ADDR="-v $DOCKER_HOST:$DOCKER_HOST -e DOCKER_HOST"
else
DOCKER_ADDR="-e DOCKER_HOST -e DOCKER_TLS_VERIFY -e DOCKER_CERT_PATH"
fi
# Setup volume mounts for compose config and context
if [ "$(pwd)" != '/' ]; then
VOLUMES="-v $(pwd):$(pwd)"
fi
if [ -n "$COMPOSE_FILE" ]; then
compose_dir=$(dirname $COMPOSE_FILE)
fi
# TODO: also check --file argument
if [ -n "$compose_dir" ]; then
VOLUMES="$VOLUMES -v $compose_dir:$compose_dir"
fi
if [ -n "$HOME" ]; then
VOLUMES="$VOLUMES -v $HOME:$HOME -v $HOME:/root" # mount $HOME in /root to share docker.config
fi
# Only allocate tty if we detect one
if [ -t 1 ]; then
DOCKER_RUN_OPTIONS="-t"
fi
if [ -t 0 ]; then
DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS -i"
fi
exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES -w "$(pwd)" $IMAGE "$@"
可以看到,它其实是下载了 docker/compose
镜像并运行。
# 卸载
如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
如果是通过 pip
安装的,则执行如下命令即可删除。
$ sudo pip uninstall docker-compose