跳到主要内容

Docker Compose 教程

· 阅读需 3 分钟
ahKevinXy
作者

什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(通常是 docker-compose.yml),你可以配置应用程序的服务、网络和卷,然后使用单个命令来启动、停止和管理整个应用程序。

Docker Compose 特别适用于开发、测试和 CI/CD 环境,因为它简化了多容器应用的部署和管理。

安装 Docker Compose

Docker Compose 通常与 Docker Desktop 一起安装。如果你使用的是 Linux,可以单独安装:

# 下载最新版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 给执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

基本概念

docker-compose.yml 文件

这是 Docker Compose 的核心配置文件。它的结构如下:

version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
  • version: 指定 Compose 文件格式版本
  • services: 定义要运行的容器
  • image: 指定容器镜像
  • ports: 端口映射
  • environment: 环境变量

简单示例:运行一个 Web 应用

让我们创建一个简单的示例,包括一个 Flask 应用和一个 Redis 数据库。

1. 创建项目目录

mkdir docker-compose-tutorial
cd docker-compose-tutorial

2. 创建 Flask 应用

创建 app.py

from flask import Flask
import redis

app = Flask(__name__)
r = redis.Redis(host='redis', port=6379)

@app.route('/')
def hello():
r.incr('hits')
return f'Hello World! This page has been viewed {r.get("hits").decode("utf-8")} times.'

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

3. 创建 requirements.txt

Flask==2.3.3
redis==4.6.0

4. 创建 Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY app.py .

CMD ["python", "app.py"]

5. 创建 docker-compose.yml

version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- redis
redis:
image: "redis:alpine"

6. 运行应用

docker-compose up --build

访问 http://localhost:5000,你应该看到计数器在增加。

常用命令

  • docker-compose up: 启动服务
  • docker-compose down: 停止并删除服务
  • docker-compose build: 构建或重新构建服务
  • docker-compose logs: 查看服务日志
  • docker-compose ps: 列出运行中的容器
  • docker-compose exec <service> <command>: 在运行中的容器中执行命令

高级用法

环境变量

你可以使用 .env 文件来管理环境变量:

# .env
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword

docker-compose.yml 中:

services:
db:
image: postgres
env_file:
- .env

卷(Volumes)

持久化数据:

services:
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data

volumes:
postgres_data:

网络

自定义网络:

services:
web:
networks:
- frontend
db:
networks:
- backend

networks:
frontend:
backend:

总结

Docker Compose 让多容器应用的开发和部署变得简单。通过学习这些基本概念和命令,你可以开始构建更复杂的应用程序。记得查看官方文档以获取更多详细信息:https://docs.docker.com/compose/