docker部署開源MQTT平臺mosquitto
一、安裝docker
在開始之前,確保你的系統上已經安裝了Docker。Docker提供了一個開放的平臺,可以在容器中打包、分發和運行應用程序。你可以從Docker官方網站下載和安裝適合你操作系統的Docker版本。
二、拉取Mosquitto Docker鏡像
這里我們以阿里云的Ubuntu系統為例。想要在docker中部署MQTT的服務就得先找好一個開源平臺,像mosquitto、EMQ X Broker 等都是開源的MQTT服務,這里我們以搭建mosquitto為例。
拉取mosquitto鏡像:
# 拉取2.0.20版本
docker pull eclipse-mosquitto:2.0.20
#或者 使用下面的方法 比較快
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
mkdir /mnt/docker-root/mosquitto/{config,data,log}
# 進入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
# 布爾值,用于確定是否允許未提供用戶名的客戶端進行連接。 # 如果設置為false,則應創建一個密碼文件(請參閱password_file選項)以控制經過身份驗證的客戶端訪問。 # 如果未設置其他安全選項,則默認為true。 # 如果設置了password_file
或psk_file
,或者如果加載了實現用戶名/密碼或TLS-PSK檢查的身份驗證插件, # 則'allow_anonymous' 默認為false。
allow_anonymous true
# 將持久消息數據保存到磁盤(true/false)。這樣可以保存有關所有消息的信息,包括訂閱,當前運行中的消息和保留的消息。 # reserved_persistence是此選項的同義詞。
persistence false
四、創建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 --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鏡像。