Docker Compose使用教程

1. 简介

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过一个YAML文件配置应用程序的所有服务,然后使用单个命令启动、停止和管理所有服务。

2. 安装Docker Compose

确保已安装Docker引擎

安装Docker Compose:

   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):一组相关联的服务组成完整应用

YAML文件:定义服务、网络和卷的配置文件

4. 创建第一个Compose文件

创建项目目录:

   mkdir my-compose-app
   cd my-compose-app

创建docker-compose.yml文件:

   version: '3.8'
   services:
     web:
       image: nginx:latest
       ports:
         - "8080:80"
       volumes:
         - ./html:/usr/share/nginx/html

创建静态内容目录:

   mkdir html
   echo "<h1>Hello Docker Compose</h1>" > html/index.html

5. 管理服务

启动服务:

   docker-compose up -d

查看运行状态:

   docker-compose ps

查看日志:

   docker-compose logs -f web

停止服务:

   docker-compose down

6. 多服务应用示例

更新docker-compose.yml添加数据库服务:

   version: '3.8'
   services:
     web:
       image: nginx:latest
       ports:
         - "8080:80"
       volumes:
         - ./html:/usr/share/nginx/html
       depends_on:
         - db

     db:
       image: mysql:5.7
       environment:
         MYSQL_ROOT_PASSWORD: example
         MYSQL_DATABASE: myapp
       volumes:
         - db-data:/var/lib/mysql

   volumes:
     db-data:

启动多服务应用:

   docker-compose up -d

验证数据库连接:

   docker-compose exec db mysql -uroot -pexample -e "SHOW DATABASES;"

7. 网络配置

自定义网络示例:

   version: '3.8'
   services:
     frontend:
       image: myapp-frontend
       networks:
         - front-tier

     backend:
       image: myapp-backend
       networks:
         - front-tier
         - back-tier

   networks:
     front-tier:
       driver: bridge
     back-tier:
       driver: bridge

验证网络连接:

   docker-compose exec frontend ping backend

8. 环境变量管理

创建.env文件:

   DB_PASSWORD=secret
   DB_NAME=production

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

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

验证变量加载:

   docker-compose config

9. 扩展服务

创建多个实例:

   version: '3.8'
   services:
     web:
       image: nginx:latest
       ports:
         - "8080-8082:80"
       deploy:
         replicas: 3

启动扩展服务:

   docker-compose --compatibility up -d

10. 数据持久化

使用命名卷:

   version: '3.8'
   services:
     db:
       image: postgres:13
       volumes:
         - postgres_data:/var/lib/postgresql/data

   volumes:
     postgres_data:

备份数据卷:

   docker run --rm -v my-compose-app_postgres_data:/volume -v $(pwd):/backup alpine tar cvf /backup/postgres_backup.tar /volume

11. 健康检查

添加健康检查配置:

   version: '3.8'
   services:
     web:
       image: nginx:latest
       healthcheck:
         test: ["CMD", "curl", "-f", "http://localhost"]
         interval: 30s
         timeout: 10s
         retries: 3
         start_period: 40s

监控健康状态:

   docker inspect --format='{{json .State.Health}}' $(docker-compose ps -q web)

12. 高级配置

使用自定义Dockerfile:

   version: '3.8'
   services:
     app:
       build:
         context: .
         dockerfile: Dockerfile.dev
       ports:
         - "3000:3000"

资源限制:

   services:
     db:
       image: mysql:5.7
       deploy:
         resources:
           limits:
             cpus: '0.50'
             memory: 512M

13. 总结

Docker Compose通过简化多容器应用的部署和管理,极大提高了开发效率。本教程涵盖了从基础安装到高级配置的全流程,包括服务定义、网络管理、数据持久化和健康检查等关键特性。通过编写清晰的docker-compose.yml文件,开发者可以轻松定义复杂的应用架构,实现一键式部署和扩展。掌握Docker Compose是现代容器化应用开发的必备技能,它能有效简化开发、测试和生产环境的一致性管理。

发表回复

后才能评论