1. 概述

Docker Compose 是一个强大的工具,用于定义并运行多容器的Docker应用程序。它允许开发者在单个 YAML 文件中定义应用的服务、网络和卷,使部署和管理复杂应用变得简单。借助Docker 的服务配置文件,用户可以专门定义容器的配置,使得容器管理变得更加容易。

有时,我们可能需要根据 Docker Compose 文件中的某些配置来运行特定的服务。

在这篇教程中,我们将学习服务配置文件及其在 Docker 中的重要性。

2. 了解 Docker Compose 服务

在使用服务配置文件以特定配置运行 Docker 服务之前,让我们先理解 docker-compose 服务。

Docker 服务是协同工作的容器逻辑分组,提供特定功能。在 Docker Compose 中,服务指的是容器化应用元素,可以水平扩展。它允许同时运行相同服务的多个实例。

docker-compose.yml 文件中,我们可以定义服务的各种属性,如容器 镜像、网络配置和环境变量。

为了演示,让我们创建一个包含 webdb 服务的 docker-compose.yml 文件:

version: "3.9"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secretpassword

在这里,web 服务使用了 nginx 镜像,并将主机机器内部容器的端口 8080 展示出来。数据库服务使用了 postgres 镜像,并设置了环境变量 POSTGRES_PASSWORDsecretpassword

此外,我们可以通过 docker-compose up 命令仅运行 Docker Compose 文件中的特定服务。为了演示,让我们查看仅运行上述示例中的 web 服务的命令:

$ docker-compose up web

通过上述命令,仅会启动 web 服务及其依赖的服务。由于 web 服务不依赖于数据库服务,因此不会启动。通过空格分隔,我们可以指定多个服务。为了说明,让我们同时运行 webdb 服务:

$ docker-compose up web db

此命令将同时启动 web 服务、数据库服务及其任何依赖关系。

3. 服务配置文件

Docker Compose 文件定义了基于服务配置文件在 Docker 服务中运行的容器的特定配置。服务配置文件是在 Docker 版本 20.10 中引入的一个实验性特性。服务配置文件允许我们为作为服务一部分运行的容器定义特定配置。因此,它们简化了容器管理,并且也维持了正确的配置。

Docker 服务配置文件允许我们为 Docker 服务内部的容器定义特定配置。因此,管理单个容器和动态管理配置变得非常容易。 只能在 Docker Compose 文件的 profile 部分使用服务配置文件。为了演示,让我们查看包含服务配置的 docker-compose.yml 文件:

version: "3.9"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secretpassword  
    profiles:
      - dev   
  mysqldb:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: testrootpassword
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: testpassword
    profiles:
      - prod
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

在 Docker Compose 中,我们创建了三个不同的服务:webdbmysqldbdb 服务具有 dev 服务配置文件,而 mysqldb 具有 prod 服务配置文件。在我们的 Docker Compose 文件中,我们可以通过传递选项 –profile 后跟配置文件的名称来指定要使用的服务配置文件。为了说明,让我们查看运行带有 “prod” 配置文件的 mysqldb 服务的命令:

$ docker-compose --profile=prod up

在上述情况下,mysqldbweb 服务将开始运行。由于配置中的 prod 配置文件,mysqldb 服务将启动。此外,web 服务也将运行,因为没有配置文件的服务总是启用的。

4. 总结

在这篇文章中,我们探索了如何在 Docker 中使用服务配置文件。首先,我们学习了使用 docker-compose 文件的基本概念。之后,我们介绍了服务配置文件与 docker-compose 文件的结合使用。