跳至主要內容

Docker Compose


Docker Compose

介绍

Docker Compose 是 Docker 公司推出的一个工具,它可以用于定义和运行多个 Docker 容器的应用程序。它使用 YAML 文件来配置应用程序的服务,并提供了一组命令来管理这些服务。

使用 Docker Compose,您可以轻松地定义、启动、停止和重启由多个 Docker 容器组成的应用程序。您可以定义每个容器的映像、端口、环境变量和数据卷等信息,并且可以定义容器之间的依赖关系和链接关系。

Docker Compose 的工作流程如下:

  1. 使用 YAML 文件定义应用程序的服务和配置。
  2. 使用 "docker-compose up" 命令启动应用程序,Docker Compose 将会自动拉取容器镜像并启动容器。
  3. 使用 "docker-compose down" 命令停止并删除容器。

除了这些基本命令之外,Docker Compose 还提供了一些其他命令,例如 "docker-compose ps" 用于查看容器状态, "docker-compose logs" 用于查看容器日志等。通过这些命令,您可以轻松地管理和监控您的 Docker 容器应用程序。

YAML文件参数

以下是 Docker Compose YAML 文件中的一些常见参数及其用途:

  • version:指定 Docker Compose 文件格式的版本号。
  • services:定义每个服务及其配置选项。
  • build:指定 Dockerfile 的路径,用于构建镜像。
  • image:指定使用的镜像名称和版本号。
  • container_name:指定容器的名称。
  • ports:指定容器端口与主机端口的映射关系。
  • volumes:指定容器与主机目录的挂载关系。
  • environment:指定容器的环境变量。
  • networks:指定容器使用的网络。
  • depends_on:指定容器之间的依赖关系。
  • restart:指定容器停止后的重启策略。
  • command:覆盖容器启动时默认的命令。

以上是一些常见的参数,Docker Compose 还支持其他参数和选项,具体取决于您的应用程序的需求。在编写 Docker Compose YAML 文件时,您可以参考 Docker 官方文档,了解更多参数和选项的详细说明。

version

在Docker Compose中,version是用来指定Compose文件所使用的Docker Compose语法版本的关键字。Docker Compose支持不同版本的Compose文件语法,每个版本都有不同的特性和语法规则。

在Compose文件的开头,您需要指定要使用的Compose文件语法版本,例如:

version: '3.8'

这里的3.8指的是Compose文件的语法版本。目前,Docker Compose支持的版本包括122.133.13.23.33.43.53.63.73.8等。每个版本都有其特定的语法规则和功能。

需要注意的是,不同版本的Compose文件语法在支持的Docker Engine版本上也会有所不同。因此,您需要根据您的Docker Engine版本来选择适合的Compose文件语法版本。如果您使用的Compose文件版本不支持您的Docker Engine版本,您可能会遇到一些问题或错误。

以下是常见的 Docker Engine 版本和与之兼容的 Docker Compose 版本的表格形式:

Docker Engine 版本Docker Compose 最低兼容版本
1.10.01.6.0
1.12.01.8.0
1.13.01.10.0
17.04.0-ce1.13.0
17.06.0-ce1.14.0
17.09.0-ce1.16.0
17.12.0-ce1.18.0
18.06.0-ce1.22.0
18.09.0-ce1.23.0
19.03.0-ce1.24.0
19.03.121.25.0
20.10.01.27.0
20.10.21.28.0
20.10.61.29.0

以上表格只是列出了一些常见的 Docker Engine 版本和与之兼容的 Docker Compose 版本,实际情况可能因为 Docker Engine 和 Docker Compose 的更新而有所变化。在选择 Docker Compose 版本时,需要确保您的 Docker Engine 版本与所选的 Docker Compose 版本兼容。

volumes

在Docker Compose中,volumes是用来管理容器和宿主机之间文件共享的一种机制。它可以将宿主机的文件夹或文件映射到容器内部的文件夹或文件,以便在容器中访问宿主机的数据。

在docker-compose.yml文件中,可以使用volumes关键字来定义卷。例如:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - /path/on/host:/path/on/container

上述配置中,将宿主机上的/path/on/host目录挂载到容器内的/path/on/container目录上。这样,在容器中访问/path/on/container目录时,实际上是在访问宿主机上的/path/on/host目录。这个卷在容器启动时创建,在容器停止时删除,可以保持数据的持久性。

此外,还可以在docker-compose.yml文件中定义匿名卷。匿名卷是没有明确指定宿主机目录的卷,Docker会自动为其分配一个唯一的路径。例如:

version: '3'
services:
  db:
    image: postgres
    volumes:
      - /var/lib/postgresql/data
      - /etc/postgresql/myconfig.cfg
      - dbdata:/var/lib/postgresql/backup
volumes:
  dbdata:

上述配置中,定义了一个匿名卷dbdata,并将它映射到容器内的/var/lib/postgresql/backup目录上。这个匿名卷的数据将会存储在Docker管理的数据卷中,可以在容器之间共享。

使用volumes可以使容器和宿主机之间更好地共享数据,并可以方便地备份和恢复数据。

ports

在 Docker Compose 中,ports 是一种用于将容器内部的端口映射到主机上的端口的配置选项。ports 允许您指定容器内部的端口和主机上要映射到的端口。

ports 的格式如下:

ports:
  - <host_port>:<container_port>

其中,<host_port> 表示主机上要映射到的端口号,<container_port> 表示容器内部要映射的端口号。

例如,以下是一个包含 ports 配置选项的 Docker Compose 文件的示例:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

该文件中的 ports 配置选项将容器内部的 80 端口映射到主机上的 8080 端口。这意味着,当该容器运行时,您可以通过 http://localhost:8080 访问它提供的服务。

需要注意的是,ports 配置选项只是将容器内部的端口映射到主机上的端口,它并不会打开主机上的端口。如果您的防火墙或网络环境需要打开某些端口,请确保在主机上打开这些端口,以便外部客户端可以访问您的容器提供的服务。

Docker Compose文件示例

Docker Compose 的 YAML 文件是一个文本文件,用于定义 Docker 应用程序的服务、网络和卷以及它们之间的关系和配置。下面是一个 Docker Compose YAML 文件的示例:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    depends_on:
      - db
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

在这个例子中,我们定义了两个服务:web 和 db。web 服务使用当前目录中的 Dockerfile 构建镜像,并将容器的 5000 端口映射到主机的 5000 端口。web 服务还将当前目录映射到容器的 /code 目录,以便在容器内部访问应用程序代码。web 服务还声明了依赖关系,即它依赖于 db 服务。

db 服务使用了 Postgres 镜像,并设置了一个环境变量 POSTGRES_PASSWORD,以便在启动容器时设置 Postgres 数据库的密码。

除了服务定义之外,Docker Compose YAML 文件还可以包括其他部分,如 networks(网络)和 volumes(卷),以及其他配置选项,如 environment(环境变量)和 deploy(部署)。

上次编辑于:
贡献者: Neil