一、安装docker
在开始之前,确保你的系统上已经安装了Docker。Docker提供了一个开放的平台,可以在容器中打包、分发和运行应用程序。你可以从Docker官方网站下载和安装适合你操作系统的Docker版本。
二、拉取Mosquitto Docker镜像
这里我们以阿里云的Ubuntu系统为例。想要在docker中部署MQTT的服务就得先找好一个开源平台,像mosquitto、EMQ X Broker 等都是开源的MQTT服务,这里我们以搭建mosquitto为例。
拉取mosquitto镜像:
# 或者拉取2.0.18版本
docker pull eclipse-mosquitto:2.0.18
#或者 使用下面的方法 比较快
docker pull m.daocloud.io/docker.io/eclipse-mosquitto:2.0.20
#重命名image
docker tag dedeef6b0c07 eclipse-mosquitto:2.0.20
#删除镜像
docker rmi m.daocloud.io/docker.io/eclipse-mosquitto:2.0.20
docker rmi docker.m.daocloud.io/eclipse-mosquitto:2.0.20
三、创建mosquitto配置文件
在运行容器之前我们需要先创建一个配置文件,定义mosquitto的日志、配置等文件的存储路径,我们在服务器的根目录下创建一个文件夹。
# 创建文件夹
mkdir /mnt/docker-root/mosquitto
# 进入mosquitto文件夹
cd /mnt/docker-root/mosquitto
# 创建配置文件夹、日志文件夹
mkdir /mnt/docker-root/mosquitto/config
mkdir /mnt/docker-root/mosquitto/data
mkdir /mnt/docker-root/mosquitto/log
在config文件夹下编辑配置文件mosquitto.conf,并添加下列配置内容;
路径使用docker 的路径 不要写自己主机的路径
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
listener 9001
port 1883
allow_anonymous true
四、创建mosquitto容器运行
docker run -itd --name mosquitto -p 1883:1883 -p 9001:9001 -v /mnt/docker-root/mosquitto/config:/mosquitto/config -v /mnt/docker-root/mosquitto/data:/mosquitto/data -v /mnt/docker-root/mosquitto/log:/mosquitto/log eclipse-mosquitto:2.0.18
docker run -d --restart=always --name mosquitto -p 1883:1883 -p 9001:9001 \
-v /mnt/docker-root/mosquitto/config:/mosquitto/config \
-v /mnt/docker-root/mosquitto/data:/mosquitto/data \
-v /mnt/docker-root/mosquitto/log:/mosquitto/log --log-opt max-size=10m --log-opt max-file=3 eclipse-mosquitto:2.0.20
解释一下这个命令:
-itd:以交互模式运行容器,启动之后在后台运行,方便查看输出日志和控制台信息。
-p 1883:1883:将宿主机的1883端口映射到容器内的1883端口,以便可以通过该端口与MQTT代理进行通信。
--name 容器名称
-v /mnt/docker-root/mosquitto/config:/mosquitto/config:将本地的mosquitto-config文件夹挂载到容器内的/mosquitto/config路径,用于配置文件的持久化存储。
-v /mnt/docker-root/mosquitto/data:/mosquitto/data:将本地的mosquitto-data文件夹挂载到容器内的/mosquitto/data路径,用于数据的持久化存储。
-v /mnt/docker-root/mosquitto/log:/mosquitto/log:将本地的mosquitto-log文件夹挂载到容器内的/mosquitto/log路径,用于日志的持久化存储。
eclipse-mosquitto:指定要运行的Mosquitto镜像。