树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX

文章目录

  • 一、基于Ubuntu搭建Docker和portainer
    • 1.Docker简介
    • 2.Ubuntu20.04安装Docker-ce
    • 3.Ubuntu20.04安装Docker图形化界面portainer
    • 4.Docker的常用命令和portainer使用
  • 二、基于Docker搭建homeassistant
    • 1.homeassistant简介
    • 2.homeassistant不同版本的安装
    • 3.hacs插件商店的安装
  • 三、基于Docker搭建EMQX
    • 1.MQTT协议和EMQX简介
    • 2.Docker搭建EMQX


一、基于Ubuntu搭建Docker和portainer

1.Docker简介

相信接触过Linux系统和虚拟机的小伙伴都或多或少听说过Docker和Docker图形化工具portainer。

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第1张图片
Docker 是一个开源的应用容器引擎,基于Go语言并遵循Apache2.0开源。Docker的容器是完全使用沙箱机制,相互之间不会有任何接口,所以不同容器运行互不影响。开发人员可以通过Docker将App变成一种标准的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。

从概念上来看,Docker和传统的虚拟机比较类似,只是更轻量级,更方便使用。Docker和虚拟机最主要的区别有以下几点:
树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第2张图片

1.虚拟化技术依赖的是物理CPU和内存,是硬件级别的;Docker是构建在操作系统层面的,复用操作系统的容器化技术,所以Docker同样可以运行在虚拟机上面。

2.虚拟机中的操作系统是一个完整的操作系统镜像,比较复杂;而Docker比较轻量级,我们可以用Docker部署一个独立的redis,就类似于在虚拟机当中安装一个redis应用,但Docker部署的应用是完全隔离的。

3.传统的虚拟机技术是通过快照来保存状态的;而Docker引入了类似于源码管理的机制,将容器历史版本一一记录下来,切换成本非常之低。

4.传统的虚拟化技术在构建系统的时候非常复杂;而Docker可以通过一个简单的Dockerfile文件来构建整个容器,更重要的是Dockerfile可以手动编写,这样应用程序开发都可以通过发布Dockerfile来定义应用的环境和依赖,对于持续交付非常有利。

2.Ubuntu20.04安装Docker-ce

首先先卸载旧版本的Docker,旧版本的 Docker 被称为 docker、docker.io 或 docker-engine,新版本的是Docker-ce.

sudo apt-get remove docker docker-engine docker.io containerd runc

通过apt方式来卸载Ubuntu原有的旧版Docker

Docker相关依赖安装包

在链接里面下载 docker-ce 、docker-ce-cli、 containerd.io 三个不同的最新的安装包,我这里是ARM架构aarch64位的系统。

sudo curl -O https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/bionic/pool/stable/arm64/containerd.io\_1.2.6-3\_arm64.deb

sudo curl -O https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce-cli\_19.03.9~3-0~ubuntu-bionic\_arm64.deb

sudo curl -O https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce\_19.03.9~3-0~ubuntu-bionic\_arm64.deb

或者直接通过curl命令下载

sudo dpkg -i ./docker-ce-cli_20.10.2_3-0_ubuntu-bionic_arm64.deb 
sudo dpkg -i ./containerd.io_1.4.3-1_arm64.deb 
sudo dpkg -i ./docker-ce_20.10.2_3-0_ubuntu-bionic_arm64.deb 

cd到三个安装包的目录下,deb文件我们用dpkg命令解压并安装,zip文件我们用unzip命令解压,gz文件我们用tar命令解压并安装。注意三条指令是有顺序的,因为另外两个会安装第三个docker-ce安装的依赖项,如果下载顺序出错就会报错。

然后在etc目录下创建一个docker的文件夹用于配置镜像源地址,etc目录下是用来存放Linux系统主要的配置文件,例如用户的账号密码文件、各种服务的起始文件等.

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fvp17nw5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

这里的镜像源仓库地址可以根据自己的来更换。

sudo service docker start
sudo docker run hello-world

启动Docker并运行helloworld来验证Docker是否安装成功,如果安装过程没报错并且终端会有 "helloworld from Docker"的回应就可以了。

systemctl start docker
sudo systemctl enable docker

通过systemct1命令设置Docker开机自启动。

3.Ubuntu20.04安装Docker图形化界面portainer

sudo docker pull portainer/portainer

用docker pull 命令拉取portainer镜像

sudo docker volume create portainer_data

创建一个docker容器存放portainer

sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

启动portainer并通过端口映射在网页中打开portainer,此时在网页地址中输入 http://你的树莓派的ip地址:9000/ 就可以访问portainer了,初次登录要设置用户名和密码。

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第3张图片

4.Docker的常用命令和portainer使用

Docker的常用终端命令其实不多,主要用于镜像的下载和删除,容器的创建和删除,还有一些运行信息的查看,这些命令通过portainer图形化UI也可以实现。

#info|version
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker -v   #显示docker的版本信息。

#帮助命令
docker 命令 --help #帮助命令

#镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search 镜像id #搜索镜像
docker pull 镜像id #下载镜像 docker image pull
docker rmi 镜像id #删除镜像 docker image rm

#容器命令
docker run 镜像id #新建容器并启动
docker ps 列出所有运行的容器 docker container list
docker rm 容器id #删除指定容器
	#删除所有容器
	docker rm -f $(docker ps -aq)  	 #删除所有的容器
	docker ps -a -q|xargs docker rm  #删除所有的容器
#启动和停止容器
docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器
#退出容器
exit 		#容器直接退出
ctrl +P +Q  #容器不停止退出 	---注意:这个很有用的操作
#其他常用命令
docker run -d 镜像名  #后台启动命令
docker logs 		#查看运行日志
docker cp 容器id:容器内路径  主机目的路径	#从容器内拷贝到主机上

Portainer 功能十分全面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。

通过边栏进入容器管理界面

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第4张图片
点击add container
树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第5张图片
树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第6张图片

然后在images进入docker官网寻找需要添加的镜像,然后部署容器即可。

回到容器界面我们就可以发现刚刚部署的容器和容器的运行状态。

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第7张图片
进入每个容器的界面我们还可以控制容器的运行,停止,重启,或者直接删除容器。

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第8张图片
这些步骤与用docker命令来完成的效果是等价的。

二、基于Docker搭建homeassistant

1.homeassistant简介

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第9张图片

相信玩过智能家居和物联网的小伙伴都会听过homeassistant的大名。Homeassistan是基于 Python开发 的智能家居系统,设备支持度高,支持自动化(Automation)、群组化(Group)、UI 客制化(Theme) 等等高度定制化设置。开源家庭自动化,将本地控制和隐私放在首位,由全球优秀开发者和DIY爱好者社区提供支持,非常适合在树莓派或本地服务器上运行。

hass是HomeAssistant运行的程序实例,hass由两部分的逻辑组成,内核(core)和组件(component)。hass内核主要用于管理Homeassistant的状态、事件、服务,hass的组件主要用于完成内核向外界发出交互,如设备的控制,自动化的执行等。

2.homeassistant不同版本的安装

刚开始安装一定要搞清楚自己的需求和不同版本的区别
树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第10张图片
OS版相当与官方封装好的一个操作系统,加载项商店和supervisor都有且功能最完整;Container版相当与一个容器来管理运行homeassistant,但是缺少加载项和supervisor;Core版相当于安装一堆父类程序;Supervised版则包含加载项商店和supervisor。

起初我想在刷好Ubuntu的树莓派上安装Supervised版,毕竟OS版需要重装homeassistant官方的系统而且有碍于后期树莓派的学习,然后我在github上找到了一种方法,通过OS代理方式,它把homeassistant OS 关键依赖封装好然后寄生在Linux系统之上来运行,然后再安装supervised。

Linux系统上安装含supervisor的homeassistant

按照大佬的说法我试了一遍

apt-get install \
apparmor \
jq \
wget \
curl \
udisks2 \
libglib2.0-bin \
network-manager \
dbus \
systemd-journal-remote -y

首先是安装一些依赖项,注意复制到终端要把换行删掉,还有配置network-manager会导致树莓派无法访问国外网站。

https://github.com/home-assistant/os-agent/releases/latest

https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb

然后下载这两个包,在终端cd到目录下用dpkg -i 命令来解压并安装相关依赖项。

dpkg -i homeassistant-supervised.deb
dpkg -i os-agent_1.4.1_linux_aarch64.deb

安装过程中可能会有报错,看看是依赖没安装好还是网络的问题,这里建议将树莓派设为静态IP,反正尝试多次后终于安装成功了,但是有一个warning提示我要reboot我就重启了树莓派,看到下面这提示应该没问题了。

[info] Within a few minutes you will be able to reach Home Assistant at:
[info] http://homeassistant.local:8123 or using the IP address of your
[info] machine: http://192.168.2.160:8123

我以为成功了,就在浏览器地址输入http://你的树莓派的ip地址:8123/ 进入homeassistant后却发现warnings和errors,主要提示是系统不适配和Docker没法正常运行homeassistant加载项的问题,后面我发现这个方法只适配装好Debian11的树莓派而不对Ubuntu提供适配和维护,最后害怕更新后依赖不足导致homeassistant用不了就删了homeassistant所有的镜像文件装一个Container版的。

docker pull homeassistant/home-assistant:stable

终端用docker命令拉取一个homeassistant稳定版的镜像

docker run -d --name homeassistant --privileged --restart=unless-stopped -e TZ=Asia/Shanghai -v /home/homeassistant:/config --network=host homeassistant/home-assistant:stable

创建容器来运行homeassistant并将homeassistant的卷挂载到物理机中,方便以后修改。

3.hacs插件商店的安装

下面我们来装hacs插件商店,在hacs中集成了很多有用的插件,例如Xiaomi Miot Auto,hasslife。

cd到homeassistant目录下用mkdir命令创建一个custom_components文件夹,该文件夹用于配置一些用户安装的组件,然后再cd到custom_components文件夹目录下创建一个hacs文件夹。

sudo mkdir custom_components
sudo mkdir hacs

https://github.com/hacs/integration/releases

通过上面链接下载好hacs.zip压缩包,然后通过mv命令将hacs.zip放到hacs目录下解压

sudo mv hacs.zip /home/homeassistant/custom_components/hacs
sudo unzip hacs.zip

然后在portainer中重启homeassistant然后在配置–设备与服务–集成中搜索hacs并添加,需要通过github账号来认证。

之前手上有一个刷好Debian系统的电视盒子,里面装好了含supervisor的homeassistant,以后有时间写个学习笔记讲讲homeassistant的基础玩法,UI配置,几大加载项Node-red(自动化流程图)、esphome(esp系列DIY接入homeassistant)、zigbee2mqtt(zigbee设备接入homeassistant)等的学习心得。

三、基于Docker搭建EMQX

1.MQTT协议和EMQX简介

MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布,基本原理如下:
树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第11张图片
MQTT协议的核心是发布者和订阅者,是一种端对端的数据传输协议。

IoT 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的, MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。
树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第12张图片

EMQ X (简称 EMQ), 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,同时也支持 CoAP/LwM2M 一站式 IoT 协议接入。EMQ 是 5G 时代万物互联的消息引擎,适用于 IoT、M2M 和移动应用程序,可处理千万级别的并发客户端。

2.Docker搭建EMQX

在终端用docker pull命令拉取emqx镜像

docker pull emqx/emqx

然后用docker run命令创建容器并将EMQX端口映射

docker run  -itd  --name emqService -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 emqx/emqx

然后在浏览器地址输入**http://你的树莓派的ip地址:18083/**打开EMQX即可,首次登录要注册。

树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX_第13张图片

你可能感兴趣的:(学习,docker,运维)