日志
- 2024-04-05:新增通过tar导入docker image的方法,这对于不被维护的老镜像来说是个好方法。
- 2023-04-15:新增Portainer的日常使用建议。
前言
前面我们学习了NPM
、ddns-go
和bitwarden的安装。今天我们要安装一个管理docker应用的docker应用——Portainer。Portainer的界面差不多是这样的:
我觉得它在进行程序调试和查看日志时比较方便;而且它也比较有利于向大家展示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程序的后台。建议你在安装好NPM和bitwarden后要马上安装它。
它的安装也很简单:
# 提前拉取镜像
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
。无特殊设置。
访问https://example.com
即可访问。
刚开始会要求你设置帐户和密码。用bitwarden记录即可。
日常使用
目前使用的是
Community Edition2.17.0
版本
Stack
我比较喜欢在Portainer里观察Stack的情况:
Container
可以很方便地查看某个docker容器的日志等:
Image
建议小伙伴将未被使用的image(sha256编号后有一个Unused
标签)删除以节省空间:
有时候,我们可能需要获得某个版本的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的:
你可以添加tag:
当然,这些用法并不常规,仅建议在某些开发中的不太稳定的项目使用这种策略。大多数情况下,我们都是使用最新版。
导入镜像
通过Portainer可以很方便地导入或导出镜像。对于某些可能会被官方archive的镜像来说,通过该方法进行个人备份是必须的,因为个人开发者或者官方很可能会在将来不再维护这些镜像(比如nmtan/chevereto:1.4.1
、wangqiru/ttrss:nightly-2023-10-26
等经典版本的image),甚至将其从dockerhub上下架。
通过Portainer可以很轻松地导入或导出镜像:
这里以nmtan/chevereto:1.4.1
(下载链接)为例:
有时候,浏览器上传会出现这种报错:
<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里就可以看到这个镜像了:
经过测试,这个恢复的镜像是可以正常使用的:
小结
基本上是这样,没啥特别的。Portainer的用途以后再慢慢展示吧!
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
提问,为何这里直接用docker命令,不用docker-compose了?因为官方只给了docker命令吗ヾ(≧∇≦*)ゝ还有为什么官方给了两个端口的转发(8000和9443),但这里只用到一个9000?
因为感觉这个应用比较简单,而且也没有特别的目录或文件要挂载(-v的那个是docker的系统文件);而且这个命令是我较早期是写的,那个时候自己还不会用docker-compose,哈哈!所以就这样用了。至于2个端口的问题,你可以试试看,我还没试过ヾ(≧∇≦*)ゝ 自己折腾下呗!我目前的用法好像没啥问题。我平时也只用它看一下,我一般都是用命令行比较多୧(๑•̀⌄•́๑)૭
找到一个关于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
这个视角不错。对于某些场景,比如代理远程的Portainer时,9443或许是一个更好的选择。如果与Nginx Proxy Manager联用没有重定向问题,其实9443也可以。目前,在我的应用场景中,由于使用Nginx Proxy Manager反代地址http://127.0.0.1,用9000这个http端口足矣。8000端口是开tcp隧道的,一时想不出有什么场景。谢谢大佬的测试!
docker-compose的应用场景就是多容器的编排,单容器应用没必要吧,效果都一样
你觉得哪个方便、哪个好用,就用那个即可。条条大道通罗马。
我以前也只用过docker命令,看了博主的文章之后觉得docker-compose的可读性挺好的。而且用来备份安装方式也是不错的,当然理论上也可以把docker命令给备份了?,但那样的话就得是好几条pull和run,感觉不如docker-compose简洁和易读。
为什么我添加了反代,无法访问(´இ皿இ`)
问题解决了吗?一般Nginx Proxy Manager没啥问题的,估计是你哪设置错了 ~ 评论区可以用markdown语法,方便的话可以贴一下NPM的设置看看
比如我的域名是123.com,这个是直接访问123.com吗?还是可以解析一个比如portainer.123.com的来访问呢?
portainer.123.com更优。
123.com
或者www.123.com
一般留给你最重要的应用,比如个人博客。好的,谢谢大佬。
还有一个问题就是:duplicati备份站点的话,是备份哪些文件夹呢?
刚刚回答过了 ~ 比如wordpress,就是wordpress的所有相关的文件夹:
查看图片
好滴,我的一直报错 备份到一半,就报错了 哈哈哈 我在试试