Docker Compose使用教程

1. 什么是Docker Compose

Docker Compose是Docker官方提供的容器编排工具,用于定义和运行多容器Docker应用程序。通过一个YAML文件配置所有服务,然后使用单个命令创建并启动所有服务。

2. 安装Docker Compose

• 下载Docker Compose二进制文件(以Linux为例):

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

• 添加执行权限:

sudo chmod +x /usr/local/bin/docker-compose

• 验证安装:

docker-compose --version

3. 基本概念

• **服务(Service)**:一个容器实例,如web服务器、数据库等

• **项目(Project)**:由一组关联的服务组成的应用程序

• **镜像(Image)**:用于创建容器的模板

• **容器(Container)**:镜像的运行实例

4. 编写docker-compose.yml文件

• 创建项目目录:

mkdir myapp && cd myapp

• 创建docker-compose.yml文件:

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - app-network

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:

5. 常用指令详解

• **version**:指定Compose文件格式版本

• **services**:定义所有服务

• **image**:指定服务使用的镜像

• **ports**:映射容器端口到主机

• **volumes**:挂载卷或目录

• **environment**:设置环境变量

• **networks**:配置网络

• **depends_on**:定义服务依赖关系

6. 常用命令

• 启动服务:

docker-compose up -d

• 查看运行的服务:

docker-compose ps

• 查看服务日志:

docker-compose logs -f web

• 停止服务:

docker-compose down

• 构建镜像:

docker-compose build

• 执行命令:

docker-compose exec web sh

7. 示例:部署WordPress应用

• 创建项目目录:

mkdir wordpress && cd wordpress

• 创建docker-compose.yml:

version: '3.8'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress

volumes:
  db_data:

• 启动应用:

docker-compose up -d

• 访问http://localhost:8000完成WordPress安装

8. 管理应用

• 扩展服务实例:

docker-compose up -d --scale wordpress=3

• 更新服务:

docker-compose up -d --build

• 暂停服务:

docker-compose pause

• 恢复服务:

docker-compose unpause

• 删除容器和网络:

docker-compose down

• 删除容器、网络和数据卷:

docker-compose down -v

9. 环境变量管理

• 创建.env文件:

DB_PASSWORD=secret
WP_VERSION=latest

• 在docker-compose.yml中使用变量:

version: '3.8'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

  wordpress:
    image: wordpress:${WP_VERSION}

10. 数据持久化

• 使用命名卷:

version: '3.8'

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

volumes:
  postgres_data:

• 使用绑定挂载:

services:
  app:
    image: myapp
    volumes:
      - ./static:/app/static
      - ./config:/app/config

11. 网络配置

• 自定义网络:

version: '3.8'

services:
  frontend:
    image: myfrontend
    networks:
      - frontend-net

  backend:
    image: mybackend
    networks:
      - frontend-net
      - backend-net

networks:
  frontend-net:
  backend-net:
    driver: bridge

12. 生产环境最佳实践

• 使用健康检查:

version: '3.8'

services:
  web:
    image: mywebapp
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3

• 限制资源:

services:
  db:
    image: postgres
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

• 使用多阶段构建:

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.prod

13. 故障排除

• 查看服务日志:

docker-compose logs -f --tail=100 service_name

• 进入容器调试:

docker-compose run service_name bash

• 重建服务:

docker-compose up -d --force-recreate --no-deps service_name

14. 总结

Docker Compose通过简化的YAML配置和强大的命令行工具,极大地简化了多容器Docker应用的开发、部署和管理。无论是开发环境还是生产环境,Docker Compose都能提供一致、可靠的容器编排解决方案。通过本文介绍的核心概念、实用示例和最佳实践,您可以高效地构建和管理复杂的容器化应用。随着容器技术的不断发展,掌握Docker Compose已成为现代运维和开发人员的必备技能之一。

发表回复

后才能评论