2. Docker 基础回顾:核心概念、常用命令与 Compose 入门
在搭建消息队列读写分离环境之前,必须掌握 Docker 的核心知识。本章将快速梳理镜像、容器、仓库三大概念,并演示常用命令与 Docker Compose 的使用方法,为后续的集群部署打下坚实基础。
2.1 Docker 三大核心概念
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像(Image) | 类 / 模板 | 只读的轻量级可执行包,包含运行应用所需的代码、运行时、库、环境变量和配置文件。 |
| 容器(Container) | 实例 / 进程 | 镜像的运行态,每个容器拥有独立的文件系统、网络和进程空间,彼此隔离。 |
| 仓库(Repository) | 代码仓库 | 集中存储和分发镜像的地方,分为公共仓库(如 Docker Hub)和私有仓库(如 Harbor)。 |
关键理解:镜像构建一次,可以启动任意数量的容器。消息队列的读写分离架构中,每个节点(如主节点、从节点、仲裁节点)通常使用同一个镜像,但通过不同的环境变量或配置文件区分角色。
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 <服务名> <命令> |
在指定服务容器中执行命令 |
注意事项:
- 消息队列集群要求所有节点使用相同的
Erlang Cookie,否则节点间无法认证。 - 生产环境中建议将数据卷挂载到宿主机指定路径,避免容器删除后数据丢失。
- 端口映射时注意宿主机端口冲突,从节点和仲裁节点应使用不同的宿主机端口。
2.4 本章小结
通过本章的学习,你应该能够:
- 清晰区分 Docker 镜像、容器、仓库三个核心概念及其关系。
- 熟练使用常用 Docker 命令进行镜像拉取、容器运行、日志查看和网络创建。
- 理解 Docker Compose 文件结构,并能够编写简单的多服务编排文件。