2. Docker 基础回顾:Docker 安装、镜像与容器管理、Dockerfile 编写、Docker Compose 入门

在进入消息队列集群部署之前,必须夯实 Docker 基础。本章将快速梳理从安装到编排的核心操作,确保后续章节的容器化部署能够顺畅落地。

2.1 Docker 安装与验证

Docker 支持主流操作系统,安装方式因平台而异。以下为生产环境推荐安装路径:

平台 安装方式 关键命令
Ubuntu 20.04+ 官方 apt 仓库 sudo apt install docker-ce docker-ce-cli containerd.io
CentOS 7/8 yum 仓库 sudo yum install docker-ce docker-ce-cli containerd.io
macOS / Windows Docker Desktop 官网下载 .dmg / .exe 安装包
Linux 离线环境 静态二进制包 下载 docker-*.tgz 解压至 /usr/bin
验证安装: 执行 docker --version 和 docker info。若出现 Cannot connect to the Docker daemon,请检查当前用户是否加入 docker 用户组(sudo usermod -aG docker $USER)并重新登录。

2.2 镜像管理:拉取、查看与清理

镜像是容器运行的只读模板。消息队列集群部署中,常用镜像包括 rabbitmq:3.12-management、bitnami/kafka:3.6、redis:7.2-alpine 等。

# 拉取镜像
docker pull rabbitmq:3.12-management

# 列出本地镜像
docker images

# 查看镜像分层信息
docker history rabbitmq:3.12-management

# 删除无用镜像(-f 强制)
docker rmi <image_id>

# 清理所有悬空镜像
docker image prune
注意: 生产环境不要随意执行 docker image prune -a,它会删除所有未被容器使用的镜像,可能导致下次部署时重新下载大镜像,增加启动延迟。

2.3 容器生命周期管理

容器是镜像的运行实例。掌握容器的创建、启动、停止、重启和删除是集群部署的基础。

# 创建并启动容器(前台运行)
docker run --name my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management

# 后台运行(-d)
docker run -d --name my-rabbit rabbitmq:3.12-management

# 查看运行中容器
docker ps

# 查看所有容器(含已停止)
docker ps -a

# 停止容器
docker stop my-rabbit

# 启动已停止容器
docker start my-rabbit

# 重启容器
docker restart my-rabbit

# 进入容器内部
docker exec -it my-rabbit /bin/bash

# 查看容器日志
docker logs -f my-rabbit

# 删除容器(需先停止)
docker rm my-rabbit
关键参数速查:
  • -d:后台运行
  • -p 宿主机端口:容器端口:端口映射
  • --name:指定容器名称
  • -v 宿主机路径:容器路径:数据卷挂载
  • --network:指定网络模式
Docker 容器生命周期状态机 docker create Running Stopped Removed docker start docker stop docker rm docker restart 说明:容器在 Running 状态可通过 docker pause/unpause 进入暂停状态, 暂停状态不消耗 CPU,但内存仍被占用,适合消息队列集群的临时流量控制。

2.4 Dockerfile 编写:构建自定义镜像

当官方镜像无法满足定制需求时(如集成插件、修改配置、预置脚本),需要编写 Dockerfile 构建自定义镜像。

2.4.1 基础指令速查

指令 作用 示例
FROM 指定基础镜像 FROM rabbitmq:3.12-management
RUN 执行构建命令 RUN rabbitmq-plugins enable --offline rabbitmq_shovel
COPY 复制本地文件到镜像 COPY ./definitions.json /etc/rabbitmq/
ENV 设置环境变量 ENV RABBITMQ_DEFAULT_USER=admin
EXPOSE 声明容器监听端口 EXPOSE 5672 15672
CMD 容器启动默认命令 CMD ["rabbitmq-server"]
ENTRYPOINT 容器入口点 ENTRYPOINT ["docker-entrypoint.sh"]

2.4.2 实战:为 RabbitMQ 添加延迟消息插件

# Dockerfile
FROM rabbitmq:3.12-management

# 安装延迟消息插件
RUN apt-get update && apt-get install -y wget && \
    wget -O /plugins/rabbitmq_delayed_message_exchange-3.12.0.ez \
    https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.12.0/rabbitmq_delayed_message_exchange-3.12.0.ez && \
    rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange

# 复制自定义配置文件
COPY ./rabbitmq.conf /etc/rabbitmq/rabbitmq.conf

EXPOSE 5672 15672

CMD ["rabbitmq-server"]
构建与运行:
docker build -t my-rabbit:delayed .
docker run -d --name my-rabbit-custom -p 5672:5672 -p 15672:15672 my-rabbit:delayed

2.5 Docker Compose 入门:单机多容器编排

Docker Compose 通过 YAML 文件定义多容器应用,是消息队列集群本地开发和单机测试的首选工具。

2.5.1 安装 Compose

# Linux 安装 Compose V2(推荐)
sudo apt install docker-compose-plugin

# 验证
docker compose version

2.5.2 docker-compose.yml 核心结构

version: "3.8"

services:
  rabbitmq:
    image: rabbitmq:3.12-management
    container_name: rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin123
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    networks:
      - mq-net

  redis:
    image: redis:7.2-alpine
    container_name: redis-cache
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - mq-net

volumes:
  rabbitmq_data:
  redis_data:

networks:
  mq-net:
    driver: bridge

2.5.3 常用 Compose 命令

命令 作用
docker compose up -d 后台启动所有服务
docker compose down 停止并删除所有容器和网络
docker compose ps 查看服务状态
docker compose logs -f 实时查看所有服务日志
docker compose exec rabbitmq /bin/bash 进入指定服务容器
docker compose build 重新构建镜像(配合 Dockerfile)
Docker Compose 单机多容器架构 宿主机 (Host) docker-compose.yml rabbitmq 5672 / 15672 redis 6379 app 自定义 网络: mq-net (bridge) 数据卷: rabbitmq_data 数据卷: redis_data docker compose up -d 即可一键启动整个消息队列集群的依赖环境

2.6 本章小结

  • 安装验证:确保 Docker 守护进程运行正常,当前用户具备操作权限。
  • 镜像管理:优先使用官方镜像,定制需求通过 Dockerfile 构建。
  • 容器管理:掌握生命周期命令,理解端口映射、数据卷挂载和网络模式。
  • Dockerfile:多阶段构建、减少层数、利用构建缓存是生产级优化方向。
  • Docker Compose:单机多容器编排的利器,后续章节的集群部署将在此基础上扩展为多节点、多网络、多数据卷的复杂拓扑。