使用DockerCompose进行容器编排

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。使用 Docker Compose,你可以通过一个简单的 YAML 配置文件来定义所有的服务、网络和数据卷,并通过一个命令启动所有容器。Compose 能够让你在单台主机上管理多个相互依赖的容器,并简化了容器的部署、管理和更新。

Docker Compose 的优势

  1. 简化多容器管理:Docker Compose 允许你通过一个文件管理多个容器,而无需为每个容器编写单独的命令。
  2. 自动化部署:只需要运行一个命令,就可以启动整个应用栈,减少了手动配置和部署的复杂性。
  3. 可移植性:Docker Compose 配置文件是跨平台的,可以在不同的开发和生产环境中使用,确保一致的部署。
  4. 灵活的服务管理:支持多个服务之间的网络连接,确保它们能够相互通信。
  5. 易于扩展:可以轻松增加或减少服务实例,适应不同的应用需求。

编写 docker-compose.yml 文件

Docker Compose 使用 docker-compose.yml 文件来定义应用的服务、网络和数据卷。以下是一个典型的 docker-compose.yml 文件示例,它定义了两个服务:一个是 Web 服务(例如,Nginx),另一个是数据库服务(如 MySQL 或 PostgreSQL)。

示例场景:Web 服务 + 数据库

假设我们有一个简单的 Web 应用,它使用 Nginx 作为反向代理服务器,并通过 MySQL 作为数据库后端。我们将使用 Docker Compose 来管理这两个容器。

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
29
30
31
version: '3.8'

services:
web:
image: nginx:latest
container_name: nginx_web
ports:
- "80:80" # 映射端口
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # 挂载 Nginx 配置文件
networks:
- app_network

db:
image: mysql:5.7
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: rootpassword # 设置数据库密码
MYSQL_DATABASE: my_database # 创建数据库
volumes:
- db_data:/var/lib/mysql # 持久化数据库数据
networks:
- app_network

networks:
app_network:
driver: bridge

volumes:
db_data:
driver: local

解释:

  1. version:定义使用的 Docker Compose 文件格式版本,这里我们使用的是 3.8 版本。

  2. services:定义了两个服务,分别是 web(Web 服务)和 db(数据库服务)。

    • web 服务

      • image: 使用官方的 Nginx 镜像 nginx:latest
      • container_name: 为 Web 服务容器指定名称 nginx_web
      • ports: 映射宿主机的端口 80 到容器的端口 80,以便通过浏览器访问。
      • volumes: 将宿主机的 nginx.conf 配置文件挂载到容器中,以便定制 Nginx 配置。
      • networks: 指定服务所属的网络 app_network
    • db 服务

      • image: 使用 MySQL 镜像 mysql:5.7
      • container_name: 为数据库容器指定名称 mysql_db
      • environment: 设置 MySQL 的环境变量,包括根密码和数据库名称。
      • volumes: 使用数据卷 db_data 来持久化数据库中的数据,以便容器重启时数据不会丢失。
      • networks: 与 Web 服务共享相同的网络 app_network
  3. networks:定义了一个名为 app_network 的自定义网络,确保 Web 服务和数据库服务能够互相通信。

  4. volumes:定义了一个名为 db_data 的数据卷,用于持久化 MySQL 数据库的文件。

启动和管理容器

一旦你编写好了 docker-compose.yml 文件,就可以使用 Docker Compose 来启动整个应用栈。以下是常见的 Docker Compose 命令:

  1. 启动服务
    在项目根目录下执行以下命令,启动 docker-compose.yml 中定义的所有服务:

    1
    docker-compose up

    如果你想在后台运行容器,可以添加 -d 参数:

    1
    docker-compose up -d
  2. 查看服务状态
    使用 docker-compose ps 查看当前容器的状态。

    1
    docker-compose ps
  3. 停止服务
    若要停止并删除运行中的容器,可以使用:

    1
    docker-compose down

    此命令会停止所有容器并移除它们,但数据卷会保留。

  4. 重新启动服务
    若你对 docker-compose.yml 文件做了修改,可以通过以下命令重新启动服务:

    1
    docker-compose restart