陈伦刚
陈伦刚
发布于 2024-12-16 / 14 阅读
0

Docker-Compose使用教程

Docker Compose 是一种工具,用于定义和运行多容器的 Docker 应用程序,使用 YAML 文件配置应用程序的服务。以下是一个详细的 Docker Compose 教程,从基础到实际应用:

1. Docker Compose 安装

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

Windows 和 macOS:

Docker Desktop 自带 Docker Compose。

验证安装:

docker-compose --version

2. Docker Compose 基本概念

• docker-compose.yml 文件

Compose 项目核心文件,用来定义服务、网络和存储卷。

服务(Services)

定义单个容器的配置。

网络(Networks)

配置服务间的通信。

存储卷(Volumes)

定义数据持久化方式。

3. 创建一个简单的 docker-compose.yml 文件

以下是一个典型的例子,定义了一个包含 Nginx 和 Redis 的应用:

version: '3.9'  # 指定 Docker Compose 文件版本
services:  # 定义服务
  web:
    image: nginx:latest  # 使用的镜像
    ports:
      - "8080:80"  # 映射端口
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载本地目录到容器
    networks:
      - app-network
  redis:
    image: redis:alpine  # 使用 Redis 的轻量镜像
    networks:
      - app-network
networks:  # 定义网络
  app-network:
    driver: bridge

• 保存为 docker-compose.yml。

4. Docker Compose 常用命令

在 docker-compose.yml 文件所在目录运行:

1. 启动服务

docker-compose up

• -d: 后台运行。

docker-compose up -d

2. 停止服务

docker-compose down

• 删除网络、容器、数据卷等。

3. 查看服务状态

docker-compose ps

4. 重启服务

docker-compose restart

5. 构建镜像

如果有自定义镜像:

docker-compose build

6. 运行单个服务

docker-compose up web

7. 查看日志

docker-compose logs

• 指定服务:

docker-compose logs web

5. 自定义应用案例:PHP + MySQL + phpMyAdmin

以下是一个多容器 PHP 应用的例子:

version: '3.9'
services:
  php:
    image: php:8.1-apache
    ports:
      - "8080:80"
    volumes:
      - ./php-app:/var/www/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: rootpassword
volumes:
  db-data:

1. 启动服务:

docker-compose up -d

2. 访问:

• PHP 应用:http://localhost:8080

• phpMyAdmin:http://localhost:8081

6. 高级功能

1. 使用 .env 文件

环境变量文件 .env:

MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=mydb

在 docker-compose.yml 中:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  MYSQL_DATABASE: ${MYSQL_DATABASE}

2. 扩展和缩放服务

动态扩展服务实例:

docker-compose up --scale web=3

3. 健康检查

定义服务健康状态:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3

7. 清理未使用资源

清理停止的容器、未使用的网络和悬空的数据卷:

docker system prune -f
docker volume prune -f

8. 调试和问题排查

• 查看日志:

docker-compose logs

• 进入容器:

docker exec -it <container_id> bash

9. 参考文档

• Docker Compose 官方文档:https://docs.docker.com/compose/