文章目录

  • 一、基于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。


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.debsudo 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.debsudo 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即可,首次登录要注册。

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

  1. 2022最新树莓派4B学习笔记:系统备份 OpenCV SPI TFT HTML

    树莓派4B学习笔记 一.首次使用 1.系统烧录 2.优化配置与备份 3.一些基本操作 二.摄像头 三.Pi Dashboard好看的仪表盘 四.OpenCV安装编译 五.SPI_TFT屏幕 六.最终代 ...

  2. 树莓派4B学习笔记——IO通信篇(UART)

    文章目录 UART简介 树莓派使用UART与串口屏通信 串口屏简介 硬件连接 配置串口接口 树莓派打开UART接口 树莓派安装串口调试助手 编程实现 wiringSerial.h Serial简介 C ...

  3. 树莓派4b学习笔记(1)—— 4B介绍

    转自:树莓派入门(一)-- 树莓派4B介绍 树莓派由注册于英国的慈善组织"Raspberry Pi 基金会"开发,Eben·Upton/埃·厄普顿为项目带头人.2012年3月,英国 ...

  4. 树莓派4b学习笔记一:树莓派4B开箱简单配置(远程工具+opencv+pytorch1.3)

            最近突然对树莓派起了兴趣,其实主要是为了在树莓派上练习linux操作,此外也能玩出一点花样,例如我就准备用树莓派做一些简单的计算机视觉方面的小实验.话不多说,下面简单介绍一下我对树莓派 ...

  5. ④ESP8266 开发学习笔记_By_GYC 【Ubuntu系统下ESP8266 开发环境搭建】

    目录 ④ESP8266 开发学习笔记_By_GYC [Ubuntu系统下ESP8266 开发环境搭建] 一.安装前准备 1.乐鑫官方的ESP-IDF 编程指南 2.ESP-IDF风格的ESP8266 ...

  6. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

  7. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  8. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  9. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

最新文章

  1. lr如何监控linux,LoadRunner如何监控Linux系统资源
  2. 消费机器人今年爆发!四大品类瓜分百亿蛋糕
  3. ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type
  4. windows下安装RabbitMQ
  5. 呼市职称计算机考试时间,2016下半年内蒙古呼和浩特会计从业考试报名时间
  6. android stackover flow problem
  7. angularjs全栈开发知乎_为什么你要去尝试全栈开发?
  8. vue路由跳转报错解决
  9. matlab 线性规划_从零开始的matlab学习笔记——(37)线性规划——后传
  10. 使用Regsvr32命令修复系统故障
  11. 拓端tecdat|在python 深度学习Keras中计算神经网络集成模型
  12. 计算机睡眠断网,win7睡眠不断网设置方法汇总
  13. 解决maven打包编译出现File encoding has not been set问题
  14. 【UVA213】Message Decoding(读入技巧+二进制十进制转换)
  15. Java基础 | 专业排行榜前7的Java代码审计工具
  16. pgadmin4 本地安装部署
  17. python游戏辅助lol_GitHub - skyedai910/lol-skin-spider: 30行Python代码爬取英雄联盟全英雄全皮肤...
  18. matlab求二阶电路图,MATLAB实验MATLAB数值计算:二阶电路时域研究
  19. 锐龙r5 6600g处理器怎么样 r7 6700g核显相当于什么显卡
  20. JDK11安装教程(WIN10)

热门文章

  1. Heartbeat的介绍及工作原理
  2. matlab 更换坐标轴_科学网—【Matlab】坐标轴的设置 - 叶瑞杰的博文
  3. 【Java】我的世界Java版外挂制作 [4] - 移动类模块合集
  4. catdog matlab,猫狗1,猫狗1百度云资源_盘多多如风搜_盘搜搜_哎哟喂啊
  5. word转换为html为什么图片显示不了,word插入html 转换为docx图片不显示问题
  6. pytorch拼接与保存图片
  7. 【北邮国院大三上】电子商务法(e-commerce law)知识点整理——Banking Lawe-Payment
  8. docker安装mysql遇到的问题
  9. mysql使用jdbc进行批量插入时把事务设为手动提交比事务自动提交速度快了10倍
  10. 程序员一般都如何接私活,我也想接,有什么可行的方法吗?