一手掌握! -- 局域网内利用Portainer集中管理所有服务器上的Docker
场景介绍
各位值友大家好,今天给大家带来新的干货。先介绍下使用场景,以便大家理解:
如果你家里部署了很多服务器,不管是物理机还是虚拟机,可能每台服务器上都部署了docker。而管理这些容器的时候,需要分别登录相应服务器。且前提是每台服务器都需要安装可视化容器管理应用。那么可否把这些docker容器集中在一起,方便查看管理呢? 答案是肯定的。
本文适用于广大折腾er,如果你家只有一台NAS装docker,那暂时用不到,但以后很可能用得到。如果你家不止一台NAS或者linux服务器,比如黑白群晖,比如NAS+软路由 等等,那么本文也许会帮到您。
先给大家看看效果:
通过远程集中管理多台服务器docker效果种种原因,我PVE,NAS部署了多套服务器。现在都集中到一起管理,一目了然,很是方便。
原理注意事项
原理是通过开通服务器2375端口,实现远程管理。因为没有认证机制,所以只要开通就可以连接。
所以请不要把暴露于公网上的服务器的2375端口放开。换言之,此方法只适用于局域网。
如何实现
前提:安装Portainer
你得安装了Docker(废话)。
首先在你的管理服务器上安装Portainer。
我这有个中文的Portainer,大家需要可以直接安装。自行修改端口就可以了。
docker run -d --restart=always --name="portainer" -p 9003:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /portainer:/data 6053537/portainer-ce
Step1. 安装好后,需要在远程连接目标服务器开通2375端口。开通方式:
1.群晖
SSH 链接后(root 权限)打开文件:
/var/packages/Docker/etc/dockerd.json
添加一行代码:
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
群晖添加一行代码保存重启 Docker 服务
2.Alpine
/etc/init.d/docker
修改这个文件中的: command_args 在参数后 增加: -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock, 完整的配置文件类似
#!/sbin/openrc-run
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
command="${DOCKERD_BINARY:-/usr/bin/dockerd}"
pidfile="${DOCKER_PIDFILE:-/run/${RC_SVCNAME}.pid}"
command_args="-p "${pidfile}" ${DOCKER_OPTS} -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock"
DOCKER_LOGFILE="${DOCKER_LOGFILE:-/var/log/${RC_SVCNAME}.log}"
DOCKER_ERRFILE="${DOCKER_ERRFILE:-${DOCKER_LOGFILE}}"
DOCKER_OUTFILE="${DOCKER_OUTFILE:-${DOCKER_LOGFILE}}"
start_stop_daemon_args="--background
--stderr "${DOCKER_ERRFILE}" --stdout "${DOCKER_OUTFILE}""
extra_started_commands="reload"
rc_ulimit="${DOCKER_ULIMIT:--c unlimited -n 1048576 -u unlimited}"
retry="${DOCKER_RETRY:-TERM/60/KILL/10}"
depend() {
need sysfs cgroups
}
start_pre() {
checkpath -f -m 0644 -o root:docker "$DOCKER_LOGFILE"
}
reload() {
ebegin "Reloading ${RC_SVCNAME}"
start-stop-daemon --signal HUP --pidfile "${pidfile}"
eend $? "Failed to stop ${RC_SVCNAME}"
}
3.CentOS
/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在末尾加上-H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this option.
TasksMax=infinity
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
[Install]
4.Debian、Ubuntu等linux,基本道理相同
你修改的是/usr/lib/systemd/system/docker.service下的服务配置文件:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
5.威联通
这个没搞定,后面单独说。
Step2.Portainer 里面添加环境
1.点击【添加环境】
1点击【添加环境】2.选择【独立的Docker】,开始向导
2选择【独立的Docker】选择【API】,输入名称, 目标服务器地址,端口2375,点击连接即可。
单独说说威联通
作者不才,找到了威联通的docker配置文件,但修改并不起作用
威联通安装Docker后,配置文件位于/share/CACHEDEV1_DATA/.qpkg/container-station/etc/docker.json
问了威联通客服,也说不支持远程docker管理。
群晖客服反馈如果哪位值友搞定了,也烦请赐教啊,感激不尽。
于是,我只能曲线救国,另辟蹊径了!就是在威联通里面装一个Portainer Agent。
(当然这个方法也适于其他linux服务器,但是都会多一个容器,和镜像,比较占空间和资源)
我们在威联通SSH直接输入以下内容
威联通安装portainer agentdocker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:2.19.4
安装完毕后,威联通会多一个 portianer_agent 容器
安装完毕后,威联通会多一个 portianer_agent 容器我们回到Portainer 管理端,准备连接威联通。
步骤和之前差不多,这次选【Agent】,输入威联通ip:9001 连接即可
这次选【Agent】,输入威联通ip:9001 连接即可到此,完活!效果如下图:
效果如图随便点一个进去,就能看到该服务器上的所有容器了
随便点一个进去,就能看到该服务器上的所有容器了点击【首页】可以切换到其他服务器。
总结下
如果你家的数码环境类似,有多个docker服务器,那么可以借鉴这个方法来统一管理所有docker,比较方便直接。
感谢各位看官耐心阅读到此。我是以浪得虚名,浪是浪的难受的[浪]。 喜欢数码、喜欢研究、喜欢讲原理、喜欢分享。
从来不索要点赞收藏打赏,我也是其他作者的阅读者,我会因为喜欢才会赞,觉得对自己有用才会收藏,心情激动才会打赏,哈哈哈哈。
能力一般水平有限,任何问题,错误,疏漏,欢迎大家指教。评论区见!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
灵KOYB
校验提示文案
南方的孩子
校验提示文案
一切随缘zh
校验提示文案
洛水衡山
校验提示文案
技术宅是我梦想
校验提示文案
deng待死亡
校验提示文案
寻千与千寻94
校验提示文案
闲嗑瓜子
校验提示文案
技术宅是我梦想
校验提示文案
风风leo
校验提示文案
白日梦不醒
校验提示文案
值友8075034593
校验提示文案
幸运多多plus
校验提示文案
pierrec
校验提示文案
上帝给了脑壳却没脑子
校验提示文案
一切随缘zh
校验提示文案
闲嗑瓜子
校验提示文案
上帝给了脑壳却没脑子
校验提示文案
洛水衡山
校验提示文案
pierrec
校验提示文案
幸运多多plus
校验提示文案
值友8075034593
校验提示文案
寻千与千寻94
校验提示文案
白日梦不醒
校验提示文案
风风leo
校验提示文案
deng待死亡
校验提示文案
灵KOYB
校验提示文案
技术宅是我梦想
校验提示文案
技术宅是我梦想
校验提示文案
南方的孩子
校验提示文案