# Docker RabbitMQ

RabbitMQ 的 Docker 镜像在 dockerhub 上的网址:https://hub.docker.com/_/rabbitmq (opens new window)

当前(2021-04-02)latest3.8.21 是同一个镜像 。

不过,我们选择带有 management 的版本的镜像,因为其中包含 web 管理页面。例如:rabbitmq:3.8.21-management

# 1. 安装及测试

# 查询中央仓库
docker search -f is-official=true rabbitmq
    
# 从中央仓库下载
docker pull rabbitmq:3.8.21-management

# 或,直接导入已有的镜像文件
# docker load -i rabbitmq-3.8.21-management.tar

# 查看本地镜像
docker images

# 会出现类似如下内容:
# REPOSITORY      TAG                 IMAGE ID       CREATED        SIZE
# rabbitmq        3.8.21-management   b752ffe108c3   34 hours ago    249MB
# rabbitmq        3.8.21              7c1815579c8b   34 hours ago    216MB

运行容器:

# 删除曾经已有的同名容器
docker rm -f rabbitmq-test

# 创建并运行 rabbitmq 容器的语法
docker run \
  -d \
  --name <指定容器名> \
  -p <指定宿主机端口>:5672 \
  rabbitmq:3.8.21-management

例如:

docker run \
  -d \
  --name rabbitmq-test \
  -p 5672:5672 \
  -p 15672:15672 \
  rabbitmq:3.8.21-management

# docker run -d --name rabbitmq-test -p 5672:5672 -p 15672:15672 rabbitmq:3.8.21-management

验证安装成功

  • 通过 docker ps 命令查看容器的运行信息:

    docker ps
    

    会看到类似如下信息:

  • 访问 management web 管理系统。

    由于我们使用的是 management 镜像创建的容器,因此,容器自带了后台管理系统。我们可以通过我们映射的 15672 端口访问。

    访问网址 http://宿主机IP:15672 ,使用 guest / guest 登录。有一点点延迟,启动容器后稍等片刻。

    注意,虽然用户名是叫 guest ,但是它的角色是管理员 administrator 。

    当然,你也可以手动指定登录管理系统的用户名和密码:

    docker run \
      ... \
      -e RABBITMQ_DEFAULT_USER=<自定义用户名> \ 
      -e RABBITMQ_DEFAULT_PASS=<自定义密码> \ 
      rabbitmq:3.8.21-management
    

# 2. 配置与挂载

  • Docker RabbitMQ 的配置文件时容器中的 /etc/rabbitmq/rabbitmq.config

    其中的有效内容为:

    loopback_users.guest = false
    listeners.tcp.default = 5672
    management.tcp.port = 15672
    
  • RabbitMQ 的数据存储依赖于 docker run 命令中的 --hostname 属性的属性值。

    由于我们在创建容器时并没有指定容器的 --hostname ,Docker 会为我们创建的容器随机分配一个 hostname ,例如:12e22c2be88d

    这种情况下,rabbitmq 的数据的存储路径就是容器中的: /var/lib/rabbitmq/mnesia/rabbit@12e22c2be88d

    很显然,这种随机性很不方便,因此我们还是创建容器时自己指定 --hostname 的好。

  • 示例:

    # 删除已存在的同名容器
    docker rm -f rabbitmq-5672
    
    # 创建宿主机挂载目录
    mkdir -p ~/docker/rabbitmq/5672/{data,config}
    
    # 创建并运行容器
    docker run \
        -d \
        --hostname rabbitmq-5672 \
        --name rabbitmq-5672 \
        -p 5672:5672 \
        -p 15672:15672 \
        -v ~/docker/rabbitmq/5672/data:/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-5672 \
        rabbitmq:3.8.21-management
    

# 3. docker-compose 启动

version: '3'
services:
  rabbitmq:
    image: rabbitmq:3.8.21-management
    container_name: rabbitmq
    hostname: rabbitmq-5672
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=123456
    volumes:
      - ./data:/var/lib/rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"