Docker Compose
是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分 布式应用。
本章将介绍 Compose 项目情况以及安装和使用。
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multicontainer Docker applications)」,其前身是开源项目 Fig。
通过第一部分中的介绍,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。
例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose
恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml
模板文件 (YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose
中有两个重要的概念:
Compose
的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
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.17.1, build 6d101fb
Linux 系统请使用以下介绍的方法安装。
Compose 既然是一个 Python 应用,自然也可以直接用容器来执行它。
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose-container
$ chmod +x /usr/local/bin/docker-compose-container
$ docker-compose-container --version
Unable to find image 'docker/compose:1.8.0' locally
1.8.0: Pulling from docker/compose
e110a4a17941: Pull complete
92120570534d: Pull complete
47d26c525b40: Pull complete
40a1d6f501ac: Pull complete
643031e197d8: Pull complete
0841ec069338: Pull complete
Digest: sha256:9bb1d2f141b4511b52dac37e5ea0aecadaf7786bc47184c133c566a4f678061d
Status: Downloaded newer image for docker/compose:1.8.0
docker-compose version 1.8.0, build f3628c7
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
...
docker/compose 1.8.0 89188432ef03 7 years ago 59.1MB
...
知识普及:
uname
命令:用于显示操作系统信息,例如内核版本、主机名、处理器类型等。
-n 或 --nodename
:显示主机名。-m 或 --machine
:显示处理器类型。查看下载的 run.sh
脚本内容,如下:
#!/bin/bash
#
# Run docker-compose in a container
#
# This script will attempt to mirror the host paths by using volumes for the
# following paths:
# * $(pwd)
# * $(dirname $COMPOSE_FILE) if it's set
# * $HOME if it's set
#
# You can add additional volumes (or any docker run options) using
# the $COMPOSE_OPTIONS environment variable.
#
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
如果用的容器,直接删除docker-compose-container
文件,再删除docker/compose
镜像即可:
$ sudo rm /usr/local/bin/docker-compose-compose
$ docker image rm docker/compose:1.8.0
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。