十、Docker Compose
10.1、Compose是什么
compose
项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,项目地址 https://github.com/docker/compose 可以通过项目文件定义和运行多个 Docker 容器的应用
Dockerfile
模板文件,定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成。例要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器,Compose
可以满足需求,通过一个单独的 docker-compose.yml
模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
Compose
中有两个重要的概念:
- 服务 (
service
):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 - 项目 (
project
):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml
文件中定义。
Compose
的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose
项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose
来进行编排管理。
10.2、安装Compose
# 下载
$ curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加可执行权限
$chmod +x /usr/local/bin/docker-compose
#设置环境变量
$ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 查看版本
$ docker-compose --version
# bash补全
$ curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
10.3、Compose-demo
编写docker-compose.yml
文件
# vim docker-compose.yml
version: '3' #compose版本
services: #服务
web: #服务名
image: nginx #web服务所使用的镜像
ports: #web服务所映射的端口
- "88:80"
执行docker-compose up
即可
10.4、模板文件详解
默认的模板文件名称为 docker-compose.yml
,格式为 YAML 格式
10.4.1、build
指定 Dockerfile
所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose
将会利用它自动构建这个镜像,然后使用这个镜像。
version: '3'
services:
webapp:
build: /test/go
你也可以使用 context
指令指定 Dockerfile
所在文件夹的路径。
使用 dockerfile
指令指定 Dockerfile
文件名。
version: '3'
services:
webapp:
build:
context: /test/go
dockerfile: Dockerfile
10.4.2、command
覆盖容器启动后默认执行的命令。
command: echo "hello world"
10.4.3、container_name
指定容器名称。默认将会使用 项目名称_服务名称_序号
这样的格式。