Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,它使用 YAML 文件来配置应用程序的服务、网络和卷。在一个完整的 docker-compose.yml 文件中,你可以定义多个服务,每个服务都包含了各种配置选项。以下是一个详细解释的 docker-compose.yml 文件示例,以及其中包含的各个部分:
version: '3' # Docker Compose 文件版本
services: # 服务定义的部分开始
web: # 第一个服务名称,可以自定义
image: nginx:latest # 使用的镜像及版本
container_name: my_web_app # 容器的自定义名称
ports: # 端口映射配置
- "8080:80" # 将容器内部的 80 端口映射到主机的 8080 端口
volumes: # 卷挂载配置
- ./html:/usr/share/nginx/html # 挂载本地 ./html 目录到容器的 /usr/share/nginx/html
app: # 第二个服务名称
build: # 构建镜像的配置
context: ./app # Dockerfile 所在目录
dockerfile: Dockerfile.prod # 自定义 Dockerfile 文件名
container_name: my_app # 容器的自定义名称
environment: # 环境变量配置
- DEBUG=True # 设置环境变量 DEBUG 为 True
depends_on: # 依赖关系配置
- db # 依赖于名为 "db" 的服务
db: # 第三个服务名称
image: postgres:12 # 使用的 PostgreSQL 镜像及版本
container_name: my_postgres_db # 容器的自定义名称
environment: # 环境变量配置
- POSTGRES_PASSWORD=secret # 设置 PostgreSQL 密码为 "secret"
- POSTGRES_DB=mydatabase # 创建数据库名为 "mydatabase"
networks: # 网络定义的部分开始
my_network: # 自定义网络名称
driver: bridge # 网络驱动程序,默认为 bridge
ipam: # IP 地址管理配置
config: # IP 配置
- subnet: 172.28.0.0/16 # 子网配置
volumes: # 卷定义的部分开始
my_volume: # 自定义卷名称
driver: local # 卷驱动程序,默认为 local
driver_opts: # 驱动程序选项配置
type: none # 驱动程序类型
device: /mydata # 卷的本地路径这个示例包含了一个完整的 docker-compose.yml 文件,并详细解释了其中的各个部分:
version:指定了 Docker Compose 文件的版本。在示例中,使用的是版本 3。
services:这是定义各个服务的部分。每个服务都可以包含以下属性:
image:指定了要使用的镜像及其版本。
container_name:设置容器的自定义名称。
ports:用于将容器内部端口映射到主机上的端口。
volumes:用于挂载主机上的目录或卷到容器内部。
build:如果需要构建自定义镜像,可以使用 build 属性来指定 Dockerfile 的路径。
environment:设置容器内部的环境变量。
depends_on:定义了服务之间的依赖关系。在示例中,app 服务依赖于 db 服务。
networks:这是定义自定义网络的部分。可以定义多个自定义网络,并指定网络驱动程序、IP 地址管理配置等。
volumes:这是定义自定义卷的部分。可以定义多个自定义卷,并指定卷的驱动程序、驱动程序选项等。
这个示例中包含了一个完整的 docker-compose.yml 文件,你可以根据自己的需求自定义服务、网络和卷的配置。 Docker Compose 文件的强大之处在于它可以轻松管理复杂的多容器应用程序的部署和配置。
Docker Compose 提供了一组命令来管理容器应用程序的生命周期。以下是一些常用的命令及其解释:
docker-compose up:启动应用程序。它会创建和启动定义在 docker-compose.yml 文件中的所有服务。
docker-compose up -d:以后台模式启动应用程序,即不会在终端上显示日志输出。
docker-compose down:停止并移除应用程序的所有容器、网络和卷。
docker-compose ps:列出正在运行的容器。
docker-compose logs:查看应用程序的日志输出。
docker-compose build:构建在 docker-compose.yml 文件中定义的服务。如果你修改了 Dockerfile 或应用程序代码,需要重新构建镜像。
docker-compose stop:停止运行中的应用程序,但不会移除容器。
docker-compose start:启动停止的应用程序。
docker-compose restart:重新启动应用程序的容器。
docker-compose exec <service> <command>:在指定的服务容器内执行命令。例如,docker-compose exec app bash 可以在 app 服务容器内打开一个 Bash 终端。
docker-compose down -v:停止并移除应用程序的所有容器、网络、卷以及关联的数据卷。谨慎使用,它会删除数据。
docker-compose pull:拉取定义在 docker-compose.yml 文件中的所有服务所需的镜像,但不会启动容器。