[TOC] #### 1. 前言 --- 上一讲我们看了 RabbitMQ 的整体架构,这一讲,我们把它装起来。 不用编译源码,不用折腾依赖,一行命令搞定:Docker #### 2. 为什么用 Docker --- 如果你直接在 Linux 上装 RabbitMQ,要先装 Erlang,再装 RabbitMQ,还要处理版本依赖、系统兼容性问题。 Docker 帮你把这些都打包好了,你只需要拉一个镜像,启动就行,而且干净、好删、不影响宿主机环境。 #### 3. Docker 安装 RabbitMQ --- 一行命令启动 ```bash docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ rabbitmq:3-management ``` | 参数 | 含义 | | ------------------------ | -------------------------------------- | | `-d` | 后台运行 | | `--name rabbitmq` | 容器名字叫 rabbitmq | | `-p 5672:5672` | AMQP 协议端口,PHP 连接用这个 | | `-p 15672:15672` | 管理界面端口,浏览器访问用这个 | | `rabbitmq:3-management` | 带管理界面的镜像版本 | 如果遇到这个提示,说明服务器连接 Docker Hub 超时 ```plaintext Unable to find image 'rabbitmq:3-management' locally docker: Error response from daemon: failed to resolve reference "docker.io/library/rabbitmq:3-management": failed to do request: Head "https://registry-1.docker.io/v2/library/rabbitmq/manifests/3-management": dial tcp 128.121.243.76:443: i/o timeout ``` 需要运行以下命令 ```bash mkdir -p /etc/docker # 配置 Docker 镜像加速器 cat > /etc/docker/daemon.json <<'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.1ms.run", "https://docker.xuanyuan.me" ] } EOF # 如果 cat 命令无法使用,可以使用 tee 命令配置镜像加速器(Ubuntu) sudo tee /etc/docker/daemon.json > /dev/null <<'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.1ms.run", "https://docker.xuanyuan.me" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker # 重新拉取镜像 docker pull rabbitmq:3-management # 重新启动 docker run -d \ --name rabbitmq \ -p 5672:5672 \ -p 15672:15672 \ rabbitmq:3-management ``` 查看运行中的容器 ```bash # 看到状态是 Up,说明容器已经启动了 docker ps | grep rabbitmq ``` #### 4. 验证安装成功 --- 虽然容器启动了,但是不代表 RabbitMQ 就完全正常,我们再验证一下 第一步:查看启动日志 ```bash docker logs rabbitmq ``` 正常情况下你会看到一堆日志,最后几行类似这样 ```plaintext completed with N plugins. Server startup complete. ``` 如果看到 `Server startup complete`,说明 RabbitMQ 启动成功 如果日志里有明显的 error 或者容器反复重启,说明有问题,需要根据日志排查 第二步:打开 RabbitMQ 后台管理界面(使用浏览器访问): ```plaintext 如果是本机安装的 RabbitMQ,访问地址:http://localhost:15672 如果是云服务器/虚拟机安装的 RabbitMQ,访问地址:http://服务器IP:15672 ``` 默认账号密码都是 `guest`,如果是在本机安装,通常可以直接登录 如果是在云服务器上安装,后面提到的 `guest` 用户限制问题一定要注意 能看到登录页面,说明端口映射正常,能成功登录进去,说明 RabbitMQ 已经完全就绪 #### 5. 常见问题:guest 登录不了 --- 第一次装 RabbitMQ,会遇到一个情况:账号密码明明是 guest/guest,但就是登录失败。 这不是你装错了,而是 RabbitMQ 默认限制 guest 用户只能在本机访问。 如果你是从另一台电脑访问云服务器上的 RabbitMQ,guest 是登不进去的。 解决办法:创建一个新用户。 ```bash # 进入容器 docker exec -it rabbitmq bash # 创建用户 rabbitmqctl add_user admin admin123 # 设置为管理员 rabbitmqctl set_user_tags admin administrator # 授权 rabbitmqctl set_permissions -p / admin ".*"".*"".*" # 退出容器 exit ``` 然后用 admin / admin123 登录就行了。如果是在本机访问,guest 直接就能用,不需要创建新用户。 其它常见问题:端口被占用,报错说 5672 或 15672 端口被占了,那就换个端口映射 ```bash # 这样宿主机用 5673 和 15673,容器内部还是 5672 和 15672 docker run -d \ --name rabbitmq \ -p5673:5672 \ -p15673:15672 \ rabbitmq:3-management ``` #### 6. 补充:用 Docker Compose 启动 --- 如果你习惯用 Docker Compose,可以写一个 `docker-compose.yml`: ```yaml version: '3' services: rabbitmq: image: rabbitmq:3-management container_name: rabbitmq ports: - "5672:5672" - "15672:15672" volumes: - rabbitmq_data:/var/lib/rabbitmq restart: always volumes: rabbitmq_data: ``` 然后一行命令启动: ```bash docker-compose up -d ``` `volumes` 把数据持久化了,容器删了重装,数据还在 初学阶段用 `docker run` 就够了,Docker Compose 作为了解即可 #### 7. 本文小结 --- 安装 RabbitMQ 就三步: + docker run 启动容器 + docker logs rabbitmq 查看日志,确认启动成功 + 浏览器打开管理界面,用 guest 登录 Docker 环境已经准备好,整个过程通常只需要几分钟,到这里 RabbitMQ 已经成功运行起来了。 下一讲我们先不写代码,先把管理后台好好逛一遍,看看里面的 Queue、Exchange、Connection 都代表什么。