自由职业者的树莓派:容器工具篇

摘要:本篇主要讲解如何使用容器技术工具,在树莓派或其它电脑上进行业务应用的部署和管理,从此不再因程序的安装失误而破坏操作系统环境,造成重装,并可以随时按需一键启动和停服。内容涉及安装 Docker 容器运行环境、Portainer 容器管理工具、Registry 镜像管理工具,以及推送容器镜像和部署容器等。

阅读本篇之前,建议您先了解 基础准备篇内网穿透篇 的内容。

容器是当下最流行的后端软件部署和运行技术,在树莓派4b这种 arm64 架构上同样也能提供很好的支持。作为自由职业者,将我们开发、测试和演示过程都在容器中进行,可以减少对树莓派主机系统环境的破坏,也能更好的接近生产环境的部署。容器技术已经成为自由职业者(特别是IT人员)当下必备的技能。

下面,我们就开始来亲手打造吧。

  1. 安装 Docker 容器运行工具
  2. 安装 Portainer 容器管理工具
  3. 安装 Registry 容器镜像管理工具
  4. 推送容器镜像并部署容器

安装 Docker 容器运行工具

步骤1:更新 apt 软件包索引并安装软件包,以允许 apt 通过 HTTPS 使用存储库。

sudo apt update
sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

步骤2:添加 Docker 官方 GPG key。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

通过搜索指纹的最后8个字符,验证您刚得到带指纹的 key:

sudo apt-key fingerprint 0EBFCD88

步骤3:设置 arm64 架构的稳定版本存储库。

sudo add-apt-repository \
   "deb [arch=arm64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

步骤4:安装 Docker 引擎。

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

如果要安装指定版本的 Docker 引擎,或者需要更多的帮助,可参考官方安装说明 https://docs.docker.com/engine/install/ubuntu/

启动

sudo systemctl start docker

配置容器镜像加速:
编辑配置文件 /etc/docker/daemon.json :

{
  "registry-mirrors": [
    "https://xxxxxxxx.mirror.aliyuncs.com",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://reg-mirror.qiniu.com"
  ]
}

备注:阿里云的镜像加速器地址,参见 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors ,然后将 xxxxxxxx 变更为您获取到的地址。

# 重新启动 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker

安装 Portainer 容器管理工具

默认用使用 9000 端口。

sudo docker run -d --restart=always --name=portainer \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /data/portainer/data:/data \
  -v /etc/timezone:/etc/timezone:ro \
  -v /etc/localtime:/etc/localtime:ro \
  portainer/portainer-ce:2.0.0

备注:如果您不只一台树莓派,可以再暴露 8000 端口:-p 8000:8000,给 EDGE Agent 用于反向隧道功能。

如果要安装最新稳定版本,可去掉镜像名称后面的具体版本号。

通过 http://192.168.31.199:9000 访问控制台界面。首次登录时,设置一下自己的管理密码即可。
为了更好的使用容器管理工具,我们参考 内网穿透篇,通过二级域名来访问,并启用 HTTPS。
在 frp client 端的配置文件 frpc.ini 中增加代理。

[portainer]
type = https
subdomain = portainer
plugin = https2http
plugin_local_addr = 127.0.0.1:9000
plugin_crt_path = /data/certs/portainer.mydomain.com/server.crt
plugin_key_path = /data/certs/portainer.mydomain.com/server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

关于证书相关文件 server.crt 和 server.key,请在公网申请免费证书时获取,或者使用自己生成的证书。

这样就可以通过域名来访问了,比如 http://portainer.mydomain.com

Portainer Dashboard

安装 Registry 容器镜像管理工具

# 创建认证和镜像仓库数据目录
cd /data
sudo mkdir -p registry/auth
sudo mkdir -p registry/library
# 通过 htpasswd 工具,创建并确认凭据
sudo apt install apache2-utils
sudo htpasswd -Bbn admin admin > /data/registry/auth/htpasswd
sudo cat /data/registry/auth/htpasswd

可将其中的 admin admin 更换为更换的用户名和密码。

sudo docker run -d --restart=always --name registry \
  -p 5000:5000 \
  -v /data/registry/auth:/auth:ro \
  -v /data/registry/var-lib-registry:/var/lib/registry \
  -v /data/certs/registry.mydomain.com:/certs:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v /etc/localtime:/etc/localtime:ro \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
  -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt" \
  -e "REGISTRY_HTTP_TLS_KEY=/certs/server.key" \
  registry:2.7.1

如果镜像有新版本,请更换其镜像版本号。
更多细节,参见:https://docs.docker.com/registry/

为了更好的使用镜像管理工具,我们参考 内网穿透篇,通过二级域名来访问。
在 frp client 端的配置文件 frpc.ini 中增加代理。

[registry]
type = https
local_port = 5000
subdomain = registry

推送容器镜像并部署容器

如果暂未配置 TLS,要使用自己搭建的镜像中心,需要在 /etc/docker/daemon.json 文件中添加以下配置,才可以推送或拉取自己镜像中心的镜像。

{
    "insecure-registries" : ["registry.mydomain.com"]
}

更多细节,参见:https://docs.docker.com/registry/insecure/

接下来,就可以登录镜像中心,推送或拉取镜像了。

# 登录
sudo docker login registry.mydomain.com
# 推送或拉取镜像
sudo docker pull hello-world
sudo docker tag hello-world registry.mydomain.com/library/hello-world:1.0
sudo docker push registry.mydomain.com/library/hello-world:1.0
sudo docker pull registry.mydomain.com/library/hello-world:1.0

恭喜您,已完成容器工具的安装,后续的树莓派上安装应用,我们就可以用容器的方式来部署了,这样可以确保树莓派本身的 Ubuntu 操作系统干净整洁,部署的应用也易迁移。如果需要更好的容器编排工具,可以安装 microk8s、k3s 或 kubeedge 等,不过相对比较消耗树莓派的资源,暂不介绍了。做基本的容器部署,有 portainer 可视化管理工具目前基本够用了。

另外,对于您电脑端的 Docker,如果要尝试使用 Kubernetes 来编排部署容器应用,请参见:如何成功启动 Docker 自带的 Kubernetes?

我是几昆虫,一个追求终身成长的努力者。感谢您完整阅读这篇文章,期待与您的思想相遇。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342