美文网首页嵌入式
一个自由职业程序员的树莓派:容器工具篇

一个自由职业程序员的树莓派:容器工具篇

作者: 几昆虫 | 来源:发表于2020-11-01 23:20 被阅读0次

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

    《一个自由职业程序员的树莓派》系列文章包括:

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

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

    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 \
      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 \
      -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?

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

    相关文章

      网友评论

        本文标题:一个自由职业程序员的树莓派:容器工具篇

        本文链接:https://www.haomeiwen.com/subject/apmyvktx.html