Docker Compose

Docker Compose 用于定义和运行多容器 Docker 应用程序。
它通过 YAML 文件来配置应用程序的服务、网络和卷,简化了多个容器的管理和部署流程。

和 DockerFile 的区别

使用 Docker Compose 而不是仅仅使用 Dockerfile 有几个重要的原因,主要集中在简化多容器应用程序的管理和配置方面

  • Docker File

    用于定义单个容器的构建步骤。一个 Dockerfile 描述了如何构建一个 Docker 镜像。
    如果应用程序由多个容器组成(例如,一个数据库容器和一个应用服务器容器),你需要分别编写多个 Dockerfile,并手动启动和链接这些容器。

  • Docker Compose

    在一个 YAML 文件中定义和管理多容器应用。通过一个 docker-compose.yml 文件,你可以描述整个应用的服务、网络和卷。
    通过docker-compose up 可以同时启动和管理多个容器,处理它们之间的依赖关系和网络配置。

Docker compose 解决容器和容器之间的编排

Docker compose

安装 (CentOS7)

[!tip]
Docker 18 后内置 Compose,无需再次安装

常用命令

1
2
3
4
5
6
docker-compose up: 启动所有compose服务
docker-compose up -d: 后台启动所有compose服务
docker-compose down: 停止并删除全部绑定的资源
docker-compose exec: <serviceID>: 进入容器实例并/bin/bash
docker-compose ps: 编排过的所有容器
docker-compose top: 编排过的容器进程

编写 YAML

[!warning]
容器的启动顺序由depends_on决定
myService为服务名,类似于hosts。container_name为容器名称
编写完成后通过 docker-compose config -q检查语法是否有误

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: "3"

services:
myService:
image: myImage:latest
container_name: myServer01
ports:
- "8080:80"
volumes:
- /app/path/:/xxx/path
networks:
- my_net1
depends_on:
- debian
command: /bin/bash

debian:
image: debian:latest
ports:
- "8081:80"
volumes:
- /xxx/path:/xxx/path
networks:
- my_net1
command: /bin/bash

networks:
- my_net