一手掌握! -- 局域网内利用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,点击连接即可。
输入名称, 目标服务器地址,端口2375,点击连接即可。单独说说威联通
作者不才,找到了威联通的docker配置文件,但修改并不起作用
威联通安装Docker后,配置文件位于/share/CACHEDEV1_DATA/.qpkg/container-station/etc/docker.json
问了威联通客服,也说不支持远程docker管理。
群晖客服反馈如果哪位值友搞定了,也烦请赐教啊,感激不尽。
于是,我只能曲线救国,另辟蹊径了!就是在威联通里面装一个Portainer Agent。
(当然这个方法也适于其他linux服务器,但是都会多一个容器,和镜像,比较占空间和资源)
我们在威联通SSH直接输入以下内容
docker 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
威联通安装portainer agent安装完毕后,威联通会多一个 portianer_agent 容器
安装完毕后,威联通会多一个 portianer_agent 容器我们回到Portainer 管理端,准备连接威联通。
步骤和之前差不多,这次选【Agent】,输入威联通ip:9001 连接即可
这次选【Agent】,输入威联通ip:9001 连接即可到此,完活!效果如下图:
效果如图随便点一个进去,就能看到该服务器上的所有容器了
随便点一个进去,就能看到该服务器上的所有容器了点击【首页】可以切换到其他服务器。
总结下
如果你家的数码环境类似,有多个docker服务器,那么可以借鉴这个方法来统一管理所有docker,比较方便直接。
感谢各位看官耐心阅读到此。我是以浪得虚名,浪是浪的难受的[浪]。 喜欢数码、喜欢研究、喜欢讲原理、喜欢分享。
从来不索要点赞收藏打赏,我也是其他作者的阅读者,我会因为喜欢才会赞,觉得对自己有用才会收藏,心情激动才会打赏,哈哈哈哈。
能力一般水平有限,任何问题,错误,疏漏,欢迎大家指教。评论区见!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案