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