Docker系列 用Portainer管理Docker应用
本文最后更新于 71 天前,如有失效请评论区留言。

本博客由ZGOCLOUD大力赞助!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容!

日志

  • 2024-04-05:新增通过tar导入docker image的方法,这对于不被维护的老镜像来说是个好方法。
  • 2023-04-15:新增Portainer的日常使用建议。

前言

前面我们学习了NPMddns-go和bitwarden的安装。今天我们要安装一个管理docker应用的docker应用——Portainer。Portainer的界面差不多是这样的:

image-20220422181108792

我觉得它在进行程序调试和查看日志时比较方便;而且它也比较有利于向大家展示docker服务的一些结构。

以后会慢慢地提到它的简单用法。我们先安装它吧。

测试平台

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

docker --version # Docker version 20.10.5, build 55c4c88

docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

安装Portainer

Portainer是一个管理Docker程序的后台。建议你在安装好NPMbitwarden后要马上安装它。

它的安装也很简单:

# 提前拉取镜像
docker pull portainer/portainer-ce

# 开放目标端口,我们这里用9000。你应该改一个别的端口。
sudo ufw allow 9000 comment 'portainer' && sudo ufw reload

# 安装Portainer
docker run -d \
    --restart=unless-stopped \
    -p 9000:9000 `#改自己喜欢的端口号` \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --name portainer \
    portainer/portainer-ce

NPM设置

不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。

通过ddns-go或者域名托管后台解析一个域名example.com

NPM反代http://172.17.0.1:9000。无特殊设置。

image-20220422182336103

访问https://example.com即可访问。

刚开始会要求你设置帐户和密码。用bitwarden记录即可。

日常使用

目前使用的是Community Edition2.17.0版本

Stack

我比较喜欢在Portainer里观察Stack的情况:

msedge_ZPYpybr6AS

Container

可以很方便地查看某个docker容器的日志等:

msedge_gsMlpnqsrP

Image

建议小伙伴将未被使用的image(sha256编号后有一个Unused标签)删除以节省空间:

msedge_FBEVx4SNnC

有时候,我们可能需要获得某个版本的image。这时,可以获得image的sha265信息:

docker inspect kerwin1202/chatgpt-web

输出结果会包含:

"Id": "sha256:568e3b2dc343b360de7e01a073c2174255c49bb0c3b8457559911df25b80330b",
"RepoTags": [
    "kerwin1202/chatgpt-web:latest"
],
"RepoDigests": [
    "kerwin1202/chatgpt-web@sha256:7377d2bcfcf1c37e928bb330e98adb481cf8aa0b9230d19cf6c5f5ab2a7d8201"
],

其中这里的@sha256:xxx可以用于下载特定版本的image:

docker pull kerwin1202/chatgpt-web@sha256:7377d2bcfcf1c37e928bb330e98adb481cf8aa0b9230d19cf6c5f5ab2a7d8201

此时,下载到后台的image通常是没有tag的:

msedge_UIT92CbfLN

你可以添加tag:

msedge_zjt8Z7AeMg

当然,这些用法并不常规,仅建议在某些开发中的不太稳定的项目使用这种策略。大多数情况下,我们都是使用最新版。

导入镜像

通过Portainer可以很方便地导入或导出镜像。对于某些可能会被官方archive的镜像来说,通过该方法进行个人备份是必须的,因为个人开发者或者官方很可能会在将来不再维护这些镜像(比如nmtan/chevereto:1.4.1wangqiru/ttrss:nightly-2023-10-26等经典版本的image),甚至将其从dockerhub上下架。

通过Portainer可以很轻松地导入或导出镜像:

msedge_kv5OP8tF3a

这里以nmtan/chevereto:1.4.1下载链接)为例:

msedge_HS2wYPGRal

有时候,浏览器上传会出现这种报错:

<html> <head><title>413 Request Entity Too Large</title></head> <body> <center><h1>413 Request Entity Too Large</h1></center> <hr><center>cloudflare</center> </body> </html> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page -->

这应该是和nginx设置有关,导致太大的文件无法正常上传;一时之间我没有解决方案。最后还是用了最熟悉的方案——docker命令行。

首先,直接将nmtanchevereto_1.4.1.tar上传到VPS的某个位置(比如~)。然后进入文件所在目录:

cd ~

运行命令即可:

docker load --input nmtanchevereto_1.4.1.tar

日志如下:

608f3a074261: Loading layer [==================================================>]   83.9MB/83.9MB
ea61222fc24f: Loading layer [==================================================>]  3.584kB/3.584kB
1fef65785df5: Loading layer [==================================================>]  273.4MB/273.4MB
a9a0b6ccdc20: Loading layer [==================================================>]  6.144kB/6.144kB
8da8ace4fad7: Loading layer [==================================================>]  48.32MB/48.32MB
70c7e28ebf9b: Loading layer [==================================================>]  10.75kB/10.75kB
d1a9206e71d3: Loading layer [==================================================>]  8.192kB/8.192kB
1826a212a288: Loading layer [==================================================>]  11.75MB/11.75MB
9a8af8599427: Loading layer [==================================================>]  4.096kB/4.096kB
f51648e1032b: Loading layer [==================================================>]  44.12MB/44.12MB
c5fe2cd43930: Loading layer [==================================================>]   12.8kB/12.8kB
c41d67125f17: Loading layer [==================================================>]  4.608kB/4.608kB
d6ca3aee0c86: Loading layer [==================================================>]  4.608kB/4.608kB
ac53e24f2b6d: Loading layer [==================================================>]  54.06MB/54.06MB
1447e20fd7bb: Loading layer [==================================================>]  17.43MB/17.43MB
Loaded image: nmtan/chevereto:1.4.1

随后,在Portainer里就可以看到这个镜像了:

msedge_TatudB9ViH

经过测试,这个恢复的镜像是可以正常使用的:

msedge_013DajQ3fe

小结

基本上是这样,没啥特别的。Portainer的用途以后再慢慢展示吧!

---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍

感谢ZGOCLOUD友情赞助 (ฅ´ω`ฅ) 本博客基于m2w创作。版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载!由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租请留言 | 博客VPS | 致谢渺软公益CDN |

评论

  1. cye
    置顶
    Windows Chrome 102.0.0.0
    2 年前
    2022-6-16 12:00:19

    提问,为何这里直接用docker命令,不用docker-compose了?因为官方只给了docker命令吗ヾ(≧∇≦*)ゝ还有为什么官方给了两个端口的转发(8000和9443),但这里只用到一个9000?

    • 博主
      cye
      Windows Chrome 102.0.0.0
      2 年前
      2022-6-16 12:03:33

      因为感觉这个应用比较简单,而且也没有特别的目录或文件要挂载(-v的那个是docker的系统文件);而且这个命令是我较早期是写的,那个时候自己还不会用docker-compose,哈哈!所以就这样用了。至于2个端口的问题,你可以试试看,我还没试过ヾ(≧∇≦*)ゝ 自己折腾下呗!我目前的用法好像没啥问题。我平时也只用它看一下,我一般都是用命令行比较多୧(๑•̀⌄•́๑)૭

      • cye
        Bensz
        Windows Chrome 102.0.0.0
        2 年前
        2022-6-16 12:32:23

        找到一个关于9000和9043的解释:https://docs.portainer.io/release-notes#breaking-changes-2
        还有8000是optional的:https://docs.portainer.io/v/ce-2.11/start/install/server/docker/linux#introduction
        我试着把官网的docker命令翻译成了docker-compose,目前可以登录,暂时没有问题。版本是2.13

        services:
          app:
            image: portainer/portainer-ce:latest
            volumes:
              - ./app:/data/
              - /var/run/docker.sock:/var/run/docker.sock
              - portainer_data:/data
            ports:
              - <port>:9443
            restart: unless-stopped
        
        volumes:
          portainer_data:
      • 博主
        cye
        Windows Chrome 102.0.0.0
        2 年前
        2022-6-16 12:38:09

        这个视角不错。对于某些场景,比如代理远程的Portainer时,9443或许是一个更好的选择。如果与Nginx Proxy Manager联用没有重定向问题,其实9443也可以。目前,在我的应用场景中,由于使用Nginx Proxy Manager反代地址http://127.0.0.1,用9000这个http端口足矣。8000端口是开tcp隧道的,一时想不出有什么场景。谢谢大佬的测试!

    • cye
      Windows Edge 103.0.1264.37
      2 年前
      2022-6-26 20:15:28

      docker-compose的应用场景就是多容器的编排,单容器应用没必要吧,效果都一样

      • 博主
        见微
        Windows Chrome 102.0.0.0
        2 年前
        2022-6-26 20:17:24

        你觉得哪个方便、哪个好用,就用那个即可。条条大道通罗马。

      • cye
        见微
        Macintosh Chrome 103.0.0.0
        2 年前
        2022-6-27 10:48:20

        我以前也只用过docker命令,看了博主的文章之后觉得docker-compose的可读性挺好的。而且用来备份安装方式也是不错的,当然理论上也可以把docker命令给备份了?,但那样的话就得是好几条pull和run,感觉不如docker-compose简洁和易读。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇