Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。其代码目前在 https://github.com/docker/com... 上开源。
Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and runningmulti-container Docker applications)」。python
咱们知道经过Dockerfile 模板文件,可让用户很方便的定义一个单独的应用容器。然而,在平常工做中,常常会碰到须要多个容器相互配合来完成某项任务的状况。例如要实现一个 Web 项目,除了 Web 服务容器自己,每每还须要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。linux
Compose 刚好知足了这样的需求。它容许用户经过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。git
Compose 中有两个重要的概念:github
Compose 的默认管理对象是项目,经过子命令对项目中的一组容器进行便捷地生命周期管理。web
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。所以,只要所操做的平台支持 Docker API,就能够在其上利用Compose 来进行编排管理。redis
Compose 支持 Linux、macOS、Windows 10 三大平台。
Compose 能够经过 Python 的包管理工具 pip 进行安装,也能够直接下载编译好的二进制文件使用,甚至可以直接在 Docker 容器中运行。
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。docker
接下来看看在Linux系统上的安装。shell
在 Linux 上的也安装十分简单,从 官方 Github Realease 处直接下载编译好的二进制文件便可。
好比64为的linux下能够经过以下命令进行安装:数据库
curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
注: x86_64 架构的 Linux 建议按照上边的方法下载二进制包进行安装,若是您计算机的架构是 ARM (例如,树莓派),再使用 pip 安装。
这种方式是将 Compose 看成一个 Python 应用来从 pip 源中安装。安装与卸载执行安装命令:flask
sudo pip install -U docker-compose
若是是二进制包方式安装的,删除二进制文件便可。
$ sudo rm /usr/local/bin/docker-compose
若是是经过 pip 安装的,则执行以下命令便可删除。
$ sudo pip uninstall docker-compose
首先介绍几个术语。
可见,一个项目能够由多个服务(容器)关联而成, Compose 面向项目进行管理。
最多见的项目是 web项目的管理,如python建站项目
下面咱们用 Python 来创建一个可以记录页面访问次数的 web 网站。
新建文件夹,在该目录中编写 app.py 文件
from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): count = redis.incr('hits') return 'Hello World! 该页面已被访问 {} 次。\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
编写 Dockerfile 文件,内容为
FROM python:3.6-alpine ADD . /code WORKDIR /code RUN pip install redis flask CMD ["python", "app.py"]
编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。
version: '2' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
最后经过docker-compose up命令运行 compose 项目
这样每刷新一次浏览器就看到数字加1了
对于 Compose 来讲,大部分命令的对象既能够是项目自己,也能够指定为项目中的服务或者容器。若是没有特别的说明,命令对象将是项目,这意味着项目中全部的服务都会受到命令影响。
执行 docker-compose [COMMAND] --help 或者 docker-compose help
[COMMAND] 能够查看具体某个命令的使用格式。
docker-compose 命令的基本的使用格式是
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
build
格式为 docker-compose build [options] [SERVICE...] 。构建(从新构建)项目中的服务容器。
命令说明
服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,多是 web_db。
能够随时在项目目录下运行 docker-compose build 来从新构建服务。
选项包括:
--force-rm 删除构建过
$ docker-compose kill -s SIGINT
logs
格式为 docker-compose logs [options] [SERVICE...] 。
查看服务容器的输出。默认状况下,docker-compose 将对不一样的服务输出使用不一样的颜色来区分。能够经过 --no-color 来关闭颜色。
该命令在调试问题的时候十分有用。
pause
格式为 docker-compose pause [SERVICE...] 。
暂停一个服务容器。
port
格式为 docker-compose port [options] SERVICE PRIVATE_PORT 。
打印某个容器端口所映射的公共端口。
选项:
--protocol=proto 指定端口协议,tcp(默认值)或者 udp。
--index=index 若是同一服务存在多个容器,指定命令对象容器的序号(默
认为 1)。
ps
格式为 docker-compose ps [options] [SERVICE...] 。
列出项目中目前的全部容器。
选项:
-q 只打印容器的 ID 信息。
pull
格式为 docker-compose pull [options] [SERVICE...] 。
命令说明
拉取服务依赖的镜像。
选项:
--ignore-pull-failures 忽略拉取镜像过程当中的错误。
push
推送服务依赖的镜像到 Docker 镜像仓库。
restart
格式为 docker-compose restart [options] [SERVICE...] 。
重启项目中的服务。
选项:
rm
格式为 docker-compose rm [options] [SERVICE...] 。
删除全部(中止状态的)服务容器。推荐先执行 docker-compose stop 命令来
中止容器。
选项:
选项。
run
格式为 docker-compose run [options] [-p PORT...] [-e KEY=VAL...]SERVICE [COMMAND] [ARGS...] 。
在指定服务上执行一个命令。
例如:
命令说明
$ docker-compose run ubuntu ping docker.com
将会启动一个 ubuntu 服务容器,并执行 ping docker.com 命令。
默认状况下,若是存在关联,则全部关联的服务将会自动被启动,除非这些服务已
经在运行中。
该命令相似启动容器后运行指定的命令,相关卷、连接等等都将会按照配置自动创
建。
两个不一样点:
若是不但愿自动启动关联的容器,可使用 --no-deps 选项,例如
$ docker-compose run --no-deps web python manage.py shell
将不会启动 web 容器所关联的其它容器。
选项:
-T 不分配伪 tty,意味着依赖 tty 的指令将没法运行。
命令说明
scale
格式为 docker-compose scale [options] [SERVICE=NUM...] 。
设置指定服务运行的容器个数。
经过 service=num 的参数来设置数量。例如:
$ docker-compose scale web=3 db=2
将启动 3 个容器运行 web 服务,2 个容器运行 db 服务。
通常的,当指定数目多于该服务当前实际运行容器,将新建立并启动容器;反之,将中止容器。
选项:
start
格式为 docker-compose start [SERVICE...] 。
启动已经存在的服务容器。
stop
格式为 docker-compose stop [options] [SERVICE...] 。
中止已经处于运行状态的容器,但不删除它。经过 docker-compose start 能够再次启动这些容器。
选项:
top
查看各个服务容器内运行的进程。
unpause
格式为 docker-compose unpause [SERVICE...] 。
命令说明
恢复处于暂停状态中的服务。
up
格式为 docker-compose up [options] [SERVICE...] 。
该命令十分强大,它将尝试自动完成包括构建镜像,(从新)建立服务,启动服务,并关联服务相关容器的一系列操做。连接的服务都将会被自动启动,除非已经处于运行状态。能够说,大部分时候均可以直接经过该命令来启动一个项目。
默认状况, docker-compose up 启动的容器都在前台,控制台将会同时打印全部容器的输出信息,能够很方便进行调试。
当经过 Ctrl-C 中止命令时,全部容器将会中止。
若是使用 docker-compose up -d ,将会在后台启动并运行全部的容器。通常推荐生产环境下使用该选项。
默认状况,若是服务容器已经存在, docker-compose up 将会尝试中止容器,而后从新建立(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配docker-compose.yml 文件的最新内容。若是用户不但愿容器被中止并从新建立,可使用 docker-compose up --no-recreate 。这样将只会启动处于中止状态的容器,而忽略已经运行的服务。若是用户只想从新部署某个服务,可使用docker-compose up --no-deps -d <SERVICE_NAME> 来从新建立服务并后台中止旧服务,启动新服务,并不会影响到其所依赖的服务。
选项:
version格式为 docker-compose version 。打印版本信息。