Docker Compose

Docker compose 是Docker官方编排的项目之一,负责快速的部署分布式应用。

简介

负责实现对Docker容器集群的快速编排。从功能上看,跟openstack中的Heat十分类似。

Compose定位是定义和运行多个Docker 容器的应用。

通过一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器,但是很多情况下,需要多个容器相互配合来完成某项任务,Compose刚好满足了这样的需求。

它允许用户通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器为一个项目。

Compose中有两个重要的概念,分别是

  • 服务:一个应用的容器,实际上也可以包括若干运行相同镜像的容器实例。
  • 项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

可见,一个项目可以由多个服务(容器)关联而成,Compose面向项目进行管理。

使用

编写一个app.py文件用来记录页面访问次数,然后编写Dockerfile文件。,

1
2
3
4
5
FROM python:3.6-alpine
ADD . /code
WORDDIR /code
RUN pip install redis flask
CMD ["python","app.py"]

然后编写docker-compose.yml文件,这是Compose使用的主模板文件。

1
2
3
4
5
6
7
8
version: '3'
services:
web:
build: .
port :
- "5000:5000"
redis:
image: "redis:alpine"

运行compose项目

1
$ docker-compose up

Compose 命令说明

对于Compose来说,大部分的命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

执行docker-compose [COMMAND] --help 或者docker-compose help [COMMAND]

可以查看具体某个命令的使用格式。

  • build 是构建项目中的服务容器
  • config验证compose文件格式是否正确
  • down命令停止up命令所启动的容器,并移除网络
  • exec进入指定的容器
  • help获得一个命令的帮助
  • images列出compose文件中包含的镜像
  • Kill 强行停止服务容器
  • logs 查看服务容器的输出
  • pause 暂停一个服务容器
  • port 打印某个容器端口所映射的公共端口
  • ps 列出项目中目前的所有容器
  • pull 拉取服务依赖的镜像
  • push 推送服务依赖的镜像到Docker 镜像仓库
  • restart 重启项目中的服务
  • rm 删除所有停止的服务容器
  • run 在指定服务上执行一个命令
  • scale设置指定服务运行的容器个数
  • start 启动已经存在的服务容器
  • stop 停止已经处于运行状态的容器,但是不删除它。
  • top 查看各个容器内运行的进程
  • up 自动完成构建容器,重新创建服务,启动服务,并关联服务相关容器的一系列操作。

Compose 模板文件

模板文件是使用compose的核心,默认文件名是docker-compose.yml。格式是YAML

1
2
3
4
5
6
7
8
9
version: "3"

services:
webapp:
image: example/web
port:
- "80:80"
volumes:
- "/data"
build

指定Dockerfile 所在文件夹的路径。Compose 将会利用它来自动构建这个镜像,然后使用这个镜像。

command

覆盖容器启动后默认执行的命令。

dns

自定义DNS服务器,可以是一个值,也可以是一个列表。

tmpfs

挂载一个tmpfs文件系统到容器

env_file

从文件中获取环境变量

environment

设置环境变量

expose

暴露端口,但是不映射到宿主机,只被连接的服务访问。

secret

存储敏感数据

ports

暴露端口信息