简介
对于寻求简化容器管理和应用程序部署的开发者来说,Docker Compose 是一个必不可少的工具。本全面教程将探讨 Docker Compose 的基础知识,为高效且系统地配置、部署和管理复杂的多容器环境提供实用见解。
对于寻求简化容器管理和应用程序部署的开发者来说,Docker Compose 是一个必不可少的工具。本全面教程将探讨 Docker Compose 的基础知识,为高效且系统地配置、部署和管理复杂的多容器环境提供实用见解。
Docker Compose 是用于定义和运行多容器 Docker 应用程序的强大工具。它允许开发者使用 YAML 文件来配置应用程序服务、网络和卷,简化了容器编排和管理的过程。
关键概念 | 描述 |
---|---|
docker-compose.yml | 定义服务、网络和卷的配置文件 |
服务 | 构成应用程序的各个容器 |
卷 | 容器的持久数据存储 |
网络 | 用于容器通信的自定义网络配置 |
以下是一个全面的示例,展示了典型 Web 应用程序的 Docker Compose 配置:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes: -./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
version: '3.8'
指定 Docker Compose 文件格式services
部分定义了两个容器:Web 服务器和数据库nginx
服务将主机端口 80 映射到容器端口 80postgres
服务设置了一个带有持久卷存储的数据库要在 Ubuntu 22.04 上安装 Docker Compose:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
关键的 Docker Compose 命令:
docker compose up
:启动所有服务docker compose down
:停止并移除容器docker compose ps
:列出正在运行的服务docker compose logs
:查看服务日志Docker Compose 配置依赖于一个定义整个应用程序基础设施的 YAML 文件。标准文件名为 docker-compose.yml
,其中包含全面的服务定义。
version: "3.8"
services:
backend:
image: python:3.9
build:
context:./backend
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:password@database:5432/appdb
depends_on:
- database
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
postgres_data:
参数 | 描述 | 示例 |
---|---|---|
image |
基础容器镜像 | nginx:latest |
build |
自定义镜像构建配置 | context:./app |
ports |
端口映射 | "8080:80" |
volumes |
持久数据存储 | -./data:/app/data |
environment |
容器环境变量 | DATABASE_HOST=localhost |
Ubuntu 22.04 上的典型部署工作流程:
## 验证 Compose 文件
docker compose config
## 构建服务
docker compose build
## 启动服务
docker compose up -d
## 检查正在运行的服务
docker compose ps
## 查看日志
docker compose logs backend
## 停止服务
docker compose down
services:
webserver:
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Docker Compose 通过多个配置文件和覆盖机制支持复杂的环境管理。
version: "3.8"
services:
application:
image: myapp:latest
environment:
- APP_ENV=${DEPLOY_ENV:-development}
- DATABASE_URL=${DATABASE_CONNECTION}
## 将 web 服务扩展到 3 个实例
docker compose up -d --scale web=3
网络模式 | 描述 | 使用场景 |
---|---|---|
bridge | 默认网络 | 隔离容器通信 |
host | 直接主机网络 | 高性能场景 |
custom | 用户定义网络 | 复杂的微服务架构 |
version: '3.8'
services:
webserver:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
backend:
image: myapp:${VERSION}
secrets:
- db_password
configs:
- source: app_config
target: /app/config.json
secrets:
db_password:
external: true
configs:
app_config:
file:./config.json
## 标记并推送版本化镜像
docker build -t myapp:v1.0.
docker compose push
## 扫描 Compose 服务中的漏洞
docker compose config --resolve-env-vars
docker scan docker-compose.yml
通过掌握 Docker Compose,开发者能够简化容器编排,将基础设施定义为代码,并创建可扩展、可重现的应用程序环境。本教程涵盖了核心概念、配置策略以及实际实现技术,这些技术能够在不同的基础设施场景中实现无缝的多容器应用程序开发与部署。