一、基于Ubuntu搭建Docker和portainer
1.Docker简介
相信接触过Linux系统和虚拟机的小伙伴都或多或少听说过Docker和Docker图形化工具portainer。
Docker 是一个开源的应用容器引擎,基于Go语言并遵循Apache2.0开源。Docker的容器是完全使用沙箱机制,相互之间不会有任何接口,所以不同容器运行互不影响。开发人员可以通过Docker将App变成一种标准的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。
从概念上来看,Docker和传统的虚拟机比较类似,只是更轻量级,更方便使用。Docker和虚拟机最主要的区别有以下几点:
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了,初次登录要设置用户名和密码。
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 集群和服务等集中管理和操作、登录用户管理和控制等功能。
通过边栏进入容器管理界面
点击add container
然后在images进入docker官网寻找需要添加的镜像,然后部署容器即可。
回到容器界面我们就可以发现刚刚部署的容器和容器的运行状态。
进入每个容器的界面我们还可以控制容器的运行,停止,重启,或者直接删除容器。
这些步骤与用docker命令来完成的效果是等价的。
二、基于Docker搭建homeassistant
1.homeassistant简介
相信玩过智能家居和物联网的小伙伴都会听过homeassistant的大名。Homeassistan是基于 Python开发 的智能家居系统,设备支持度高,支持自动化(Automation)、群组化(Group)、UI 客制化(Theme) 等等高度定制化设置。开源家庭自动化,将本地控制和隐私放在首位,由全球优秀开发者和DIY爱好者社区提供支持,非常适合在树莓派或本地服务器上运行。
hass是HomeAssistant运行的程序实例,hass由两部分的逻辑组成,内核(core)和组件(component)。hass内核主要用于管理Homeassistant的状态、事件、服务,hass的组件主要用于完成内核向外界发出交互,如设备的控制,自动化的执行等。
2.homeassistant不同版本的安装
刚开始安装一定要搞清楚自己的需求和不同版本的区别
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 发布,基本原理如下:
MQTT协议的核心是发布者和订阅者,是一种端对端的数据传输协议。
IoT 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的, MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。
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即可,首次登录要注册。文章来源:https://www.toymoban.com/news/detail-447793.html
文章来源地址https://www.toymoban.com/news/detail-447793.html
到了这里,关于树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!