2. Docker 基础回顾:核心概念、常用命令与 Compose 入门

在搭建消息队列读写分离环境之前,必须掌握 Docker 的核心知识。本章将快速梳理镜像、容器、仓库三大概念,并演示常用命令与 Docker Compose 的使用方法,为后续的集群部署打下坚实基础。

2.1 Docker 三大核心概念

概念 类比 说明
镜像(Image) 类 / 模板 只读的轻量级可执行包,包含运行应用所需的代码、运行时、库、环境变量和配置文件。
容器(Container) 实例 / 进程 镜像的运行态,每个容器拥有独立的文件系统、网络和进程空间,彼此隔离。
仓库(Repository) 代码仓库 集中存储和分发镜像的地方,分为公共仓库(如 Docker Hub)和私有仓库(如 Harbor)。
关键理解:镜像构建一次,可以启动任意数量的容器。消息队列的读写分离架构中,每个节点(如主节点、从节点、仲裁节点)通常使用同一个镜像,但通过不同的环境变量或配置文件区分角色。
Docker 三大核心概念关系图 镜像 (Image) 只读模板 容器 (Container) 运行实例 仓库 (Repository) 存储分发 docker run docker pull docker push 工作流程 从仓库拉取镜像 → 基于镜像创建并运行容器 → 修改后提交为新镜像 → 推送回仓库

2.2 常用 Docker 命令速查

以下命令覆盖了镜像管理、容器生命周期、网络和卷操作,是搭建消息队列环境的高频操作。

分类 命令 说明
镜像管理 docker pull <镜像名>:<标签> 从仓库拉取指定版本的镜像
docker images 列出本地所有镜像
docker rmi <镜像ID> 删除本地镜像
容器操作 docker run -d --name <名称> <镜像> 后台运行容器
docker ps [-a] 列出运行中(或所有)容器
docker exec -it <容器名> /bin/bash 进入容器内部交互式终端
docker logs -f <容器名> 实时查看容器日志
网络与卷 docker network create <网络名> 创建自定义网络,用于容器间通信
docker volume create <卷名> 创建持久化数据卷
实战提示:消息队列集群要求节点间网络互通,务必使用 docker network create 创建自定义桥接网络,避免使用默认的 bridge 网络。

2.3 Docker Compose 入门

Docker Compose 通过一个 docker-compose.yml 文件定义和运行多容器应用,是编排消息队列读写分离架构的核心工具。

2.3.1 Compose 文件结构

version: '3.8'

services:
  # 定义服务名称
  rabbitmq-master:
    image: rabbitmq:3.12-management
    container_name: rabbitmq-master
    ports:
      - "5672:5672"      # AMQP 协议端口
      - "15672:15672"    # 管理界面端口
    environment:
      RABBITMQ_ERLANG_COOKIE: "SECRET_COOKIE"
    networks:
      - mq-cluster
    volumes:
      - mq-master-data:/var/lib/rabbitmq

  rabbitmq-slave:
    image: rabbitmq:3.12-management
    container_name: rabbitmq-slave
    ports:
      - "5673:5672"
    environment:
      RABBITMQ_ERLANG_COOKIE: "SECRET_COOKIE"
    networks:
      - mq-cluster
    depends_on:
      - rabbitmq-master

networks:
  mq-cluster:
    driver: bridge

volumes:
  mq-master-data:

2.3.2 常用 Compose 命令

命令 作用
docker-compose up -d 后台启动所有服务
docker-compose down 停止并移除所有容器和网络
docker-compose ps 查看服务状态
docker-compose logs -f 跟踪所有服务的日志输出
docker-compose exec <服务名> <命令> 在指定服务容器中执行命令
Docker Compose 编排消息队列集群 docker-compose.yml 编排文件 主节点 rabbitmq-master 从节点 rabbitmq-slave 仲裁节点 rabbitmq-quorum 自定义网络:mq-cluster (bridge)
注意事项:
  • 消息队列集群要求所有节点使用相同的 Erlang Cookie,否则节点间无法认证。
  • 生产环境中建议将数据卷挂载到宿主机指定路径,避免容器删除后数据丢失。
  • 端口映射时注意宿主机端口冲突,从节点和仲裁节点应使用不同的宿主机端口。

2.4 本章小结

通过本章的学习,你应该能够:

  • 清晰区分 Docker 镜像、容器、仓库三个核心概念及其关系。
  • 熟练使用常用 Docker 命令进行镜像拉取、容器运行、日志查看和网络创建。
  • 理解 Docker Compose 文件结构,并能够编写简单的多服务编排文件。