
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 Docker Compose,开发者可以使用一个 YAML 文件来配置应用程序需要的所有服务,然后使用单个命令来创建和启动这些服务。以下是关于 Docker Compose 多容器管理的详细介绍:
Compose 文件是一个 YAML 格式的文件,用于定义应用程序的服务、网络和卷等配置。以下是一个基本的 docker-compose.yml
文件示例:
# 指定 Docker Compose 文件的版本
version: '3.8'
services:
web:
# 使用官方的 nginx 最新版本镜像
image: nginx:latest
ports:
# 将宿主机的 8080 端口映射到容器的 80 端口
- "8080:80"
volumes:
# 将本地 ./web 目录挂载到容器内的 /usr/share/nginx/html 目录
- ./web:/usr/share/nginx/html
networks:
- frontend # 将该服务连接到 frontend 网络
app:
# 使用名为 myapp 的最新版本镜像
image: myapp:latest
build:
# 指定构建上下文为 ./app 目录
context: ./app
ports:
# 将宿主机的 5000 端口映射到容器的 5000 端口
- "5000:5000"
depends_on:
# 指定该服务依赖于 db 服务,确保 db 服务先启动
- db
networks:
# 将该服务连接到 backend 网络
- backend
# 将该服务连接到 frontend 网络
- frontend
db:
# 使用官方的 PostgreSQL 最新版本镜像
image: postgres:latest
environment:
# 设置 PostgreSQL 用户名为 example
POSTGRES_USER: example
# 设置 PostgreSQL 用户密码为 example
POSTGRES_PASSWORD: example
# 设置默认的数据库名为 example
POSTGRES_DB: example
volumes:
# 将名为 db-data 的数据卷挂载到容器内的 /var/lib/postgresql/data 目录
- db-data:/var/lib/postgresql/data
networks:
# 将该服务连接到 backend 网络
- backend
volumes:
# 定义名为 db-data 的数据卷
db-data:
networks:
# 定义 frontend 网络
frontend:
# 定义 backend 网络
backend:
启动多容器应用:
在包含 docker-compose.yml
文件的目录中,运行以下命令来启动定义的所有服务:
docker-compose up
这个命令会拉取所需的镜像(如果本地不存在),创建并启动所有定义的容器。如果希望以守护进程模式运行,可以使用 -d 参数:
docker-compose up -d
停止和移除容器:
停止运行中的服务:
docker-compose stop
停止并移除容器、网络和卷等资源:
docker-compose down
查看容器日志:
可以查看单个或多个服务的日志,帮助调试和监控:
docker-compose logs
查看特定服务的日志:
docker-compose logs service_name
重启服务:
可以单独重启一个或多个服务:
docker-compose restart service_name
networks:定义网络,用于配置容器间的通信。可以是默认的 bridge 网络或自定义网络。
扩展服务:
可以使用 scale
参数来扩展某个服务的实例数量(仅适用于 Docker Compose v2 和 v3 版本):
docker-compose up --scale web=3
覆盖配置文件:
可以使用多个 Compose 文件,通过 -f 参数指定覆盖配置:
docker-compose -f docker-compose.yml -f docker-compose.override.yml up
环境变量文件:
可以在 Compose 文件中引用外部的环境变量文件(如 .env):
env_file:
- .env
命令和入口点:
可以覆盖容器的默认命令和入口点:
command: ["npm", "start"]
entrypoint: ["entrypoint.sh"]
docker-compose.yml
)与应用程序代码分离,便于版本控制和配置管理。通过 Docker Compose,可以简化多容器应用的管理,提升开发、测试和部署的效率,并确保应用程序在不同环境中的一致性和可移植性。