Docker Compose使用教程

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过使用YAML文件来配置应用程序的服务,你可以使用一个命令创建并启动所有服务。本教程将详细介绍Docker Compose的安装、配置和使用方法。

1 安装Docker Compose

  • 确保已安装Docker。Docker Compose依赖于Docker引擎。
  • 安装Docker Compose:
  • Linux系统:
  •      sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
         sudo chmod +x /usr/local/bin/docker-compose
  • macOS和Windows系统:Docker Desktop已内置Docker Compose,无需单独安装
  • 验证安装:
  •    docker-compose --version

2 编写docker-compose.yml文件

  • 创建项目目录:
  •    mkdir mywebapp
       cd mywebapp
  • 创建docker-compose.yml文件:
  •    version: '3.8'
    
       services:
         web:
           build: .
           ports:
             - "5000:5000"
           volumes:
             - .:/code
           environment:
             FLASK_ENV: development
         redis:
           image: "redis:alpine"

3 构建和运行服务

  • 在项目目录中启动服务:
  •    docker-compose up
  • 在后台运行服务:
  •    docker-compose up -d
  • 查看运行的服务:
  •    docker-compose ps
  • 停止服务:
  •    docker-compose down

4 常用命令

  • 构建服务(重新构建镜像):
  •   docker-compose build
  • 查看服务日志:
  •   docker-compose logs -f
  • 在服务中执行命令:
  •   docker-compose exec web ls -l
  • 停止并删除容器、网络、卷和镜像:
  •   docker-compose down --volumes --rmi all

5 实战示例:部署一个Flask应用

  • 创建app.py文件:
  •    from flask import Flask
       import redis
       import os
    
       app = Flask(__name__)
       redis_host = os.getenv('REDIS_HOST', 'redis')
       redis_client = redis.Redis(host=redis_host, port=6379)
    
       @app.route('/')
       def hello():
           count = redis_client.incr('hits')
           return f'Hello World! I have been seen {count} times.\n'
    
       if __name__ == "__main__":
           app.run(host="0.0.0.0", port=5000, debug=True)
  • 创建requirements.txt文件:
  •    flask
       redis
  • 创建Dockerfile:
  •    FROM python:3.9-alpine
       WORKDIR /code
       ENV FLASK_APP=app.py
       ENV FLASK_RUN_HOST=0.0.0.0
       RUN apk add --no-cache gcc musl-dev linux-headers
       COPY requirements.txt requirements.txt
       RUN pip install -r requirements.txt
       EXPOSE 5000
       COPY . .
       CMD ["flask", "run"]
  • 更新docker-compose.yml文件:
  •    version: '3.8'
    
       services:
         web:
           build: .
           ports:
             - "5000:5000"
           environment:
             REDIS_HOST: redis
           depends_on:
             - redis
         redis:
           image: "redis:alpine"
  • 启动应用:
  •    docker-compose up -d
  • 访问应用:打开浏览器访问http://localhost:5000

6 高级配置

  • 环境变量覆盖:创建.env文件
  •    REDIS_HOST=myredis

在docker-compose.yml中使用:

   environment:
     REDIS_HOST: ${REDIS_HOST:-redis}
  • 网络配置:
  •    services:
         web:
           networks:
             - front-tier
         db:
           networks:
             - back-tier
    
       networks:
         front-tier:
           driver: bridge
         back-tier:
           driver: bridge
  • 卷配置:
  •    services:
         db:
           image: postgres
           volumes:
             - db-data:/var/lib/postgresql/data
    
       volumes:
         db-data:

7 故障排除

  • 查看详细错误信息:
  •    docker-compose up --build --force-recreate
  • 清理未使用的资源:
  •    docker system prune
  • 检查容器状态:
  •    docker-compose logs web
  • 进入容器调试:
  •    docker-compose run web sh

8 总结

Docker Compose通过一个简单的YAML文件定义多容器应用,极大地简化了容器化应用的部署和管理流程。它使得开发、测试和生产环境的一致性得到保障,并支持服务编排、网络管理、数据持久化等高级功能。掌握Docker Compose是现代化应用开发和部署的重要技能,能够显著提高开发效率和运维便利性。通过本教程的学习,你应该能够熟练地使用Docker Compose来构建和管理多容器Docker应用程序。

发表回复

后才能评论