Docker Compose 开发笔记

什么是 Docker Compose?

Docker Compose 是一个工具

  • 是一个用于定义和管理多容器 Docker 应用的工具
  • 通过 docker-compose.yml 文件简化容器的配置、部署和管理。
    好处:
  • 简化配置:通过 YAML 文件集中管理应用的多个服务、网络和卷,易于理解和维护。
  • 多容器管理:能够轻松定义和管理多个相互依赖的容器,便于开发和测试复杂应用。
  • 环境一致性:确保在不同环境(如开发、测试、生产)中以一致的方式运行应用,减少环境差异导致的问题。
  • 快速启动和停止:使用简单的命令快速启动、停止和重启整个应用堆栈,节省时间和精力。
  • 版本控制:docker-compose.yml 文件可以版本控制,便于跟踪配置变化。
  • 服务间的网络配置:自动为容器创建一个网络,使它们能够相互通信,无需手动配置网络。
  • 扩展性:可以轻松地通过修改配置文件来扩展服务的实例数量,实现负载均衡。

基本结构

docker-compose.yml 文件通常包含以下几个部分:

1. 版本

指定 Docker Compose 文件的版本。

version: '3'

2. 服务(services)

定义应用程序中的服务。每个服务可以是一个容器。

services:
  web:
    # 服务配置
  db:
    # 数据库配置

3. 构建(build)

指定构建 Docker 镜像的上下文。

build: .
  • . 表示当前目录,Docker 将使用该目录中的 Dockerfile

  • 或者使用现成的image
    描述:指定要使用的 Docker 镜像。如果镜像不存在,将从 Docker Hub 拉取。
    示例:

services:
  web:
    image: nginx

4. 命令(command)

指定容器启动时要执行的命令。

command: python manage.py runserver 0.0.0.0:8000

5. 卷(volumes)

定义主机与容器之间的文件共享。

volumes:
  - .:/app  # 将主机当前目录挂载到容器的 /app 目录

6. 端口映射(ports)

将主机端口映射到容器端口。

ports:
  - "8000:8000"  # 将主机的 8000 端口映射到容器的 8000 端口

7. 依赖(depends_on)

定义服务之间的依赖关系。确保服务按顺序启动。

depends_on:
  - db  # web 服务在 db 服务之后启动

8. 环境变量(environment)

设置容器内的环境变量。

environment:
  - DATABASE_URL=mysql://root:root@db/db1  # 配置数据库连接信息

示例 docker-compose.yml

以下是一个完整的示例,包含一个 Django 应用和一个 MySQL 数据库:

version: '3'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=mysql://root:root@db/db1

  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db1

volumes:
  db_data:  # 定义持久化卷

常用命令

  • 启动服务docker-compose up(可以使用 -d 参数在后台运行)
  • 停止服务docker-compose down
  • 查看服务日志docker-compose logs
  • 重建服务docker-compose up --build
    | 命令 | 描述 |
    |---------------------------------------------|--------------------------------------------|
    | docker-compose up | 启动 docker-compose.yml 文件中定义的所有服务。 |
    | docker-compose up -d | 在分离模式下启动服务,让它们在后台运行。 |
    | docker-compose down | 停止并删除所有服务、网络和卷。 |
    | docker-compose build | 仅构建在 docker-compose.yml 中定义的服务的镜像,而不启动它们。 |
    | docker-compose start | 启动已存在但停止的服务。 |
    | docker-compose stop | 停止正在运行的服务,但不删除它们。 |
    | docker-compose restart | 重启所有服务。 |
    | docker-compose ps | 列出当前运行的服务及其状态。 |
    | docker-compose logs | 显示所有服务的日志。 |
    | docker-compose logs <service_name> | 查看特定服务的日志。 |
    | docker-compose up --scale web=3 | 启动多个实例(例如,将 web 服务扩展到 3 个实例)。 |
    | docker-compose exec <service_name> <command> | 在运行的服务中执行指定的命令。 |
    | docker-compose build --no-cache | 强制重建镜像。 |
    | docker-compose up -d --build | 仅更新已更改的服务。 |

小贴士

  • 在开发过程中使用主机的文件挂载,以便快速反映代码更改。
  • 在生产环境中,考虑使用命名卷和网络,以确保数据持久化和服务间的安全通信。
posted @ 2024-10-29 14:53  林汉州win  阅读(11)  评论(0编辑  收藏  举报