Docker Compose
Docker Compose
介绍
Docker Compose 是 Docker 公司推出的一个工具,它可以用于定义和运行多个 Docker 容器的应用程序。它使用 YAML 文件来配置应用程序的服务,并提供了一组命令来管理这些服务。
使用 Docker Compose,您可以轻松地定义、启动、停止和重启由多个 Docker 容器组成的应用程序。您可以定义每个容器的映像、端口、环境变量和数据卷等信息,并且可以定义容器之间的依赖关系和链接关系。
Docker Compose 的工作流程如下:
- 使用 YAML 文件定义应用程序的服务和配置。
- 使用 "docker-compose up" 命令启动应用程序,Docker Compose 将会自动拉取容器镜像并启动容器。
- 使用 "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支持的版本包括1
、2
、2.1
、3
、3.1
、3.2
、3.3
、3.4
、3.5
、3.6
、3.7
、3.8
等。每个版本都有其特定的语法规则和功能。
需要注意的是,不同版本的Compose文件语法在支持的Docker Engine版本上也会有所不同。因此,您需要根据您的Docker Engine版本来选择适合的Compose文件语法版本。如果您使用的Compose文件版本不支持您的Docker Engine版本,您可能会遇到一些问题或错误。
以下是常见的 Docker Engine 版本和与之兼容的 Docker Compose 版本的表格形式:
Docker Engine 版本 | Docker Compose 最低兼容版本 |
---|---|
1.10.0 | 1.6.0 |
1.12.0 | 1.8.0 |
1.13.0 | 1.10.0 |
17.04.0-ce | 1.13.0 |
17.06.0-ce | 1.14.0 |
17.09.0-ce | 1.16.0 |
17.12.0-ce | 1.18.0 |
18.06.0-ce | 1.22.0 |
18.09.0-ce | 1.23.0 |
19.03.0-ce | 1.24.0 |
19.03.12 | 1.25.0 |
20.10.0 | 1.27.0 |
20.10.2 | 1.28.0 |
20.10.6 | 1.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(部署)。