对于初学docker的小白,一款好的可视化工具有助于快速掌握docker基本形态和概念。
一、Portainer简介
https://www.portainer.io/installation/ 是一款Docker可视化管理工具,可让您轻松构建和管理 Docker、Docker Swarm、Kubernetes 和 Azure ACI 中的容器。
Portainer 将管理容器的复杂性隐藏在易于使用的 UI 后面。通过消除使用 CLI、编写 YAML 或理解清单的需要,Portainer 使部署应用程序和解决问题变得如此简单,任何人都可以做到。
Portainer 比较适合团队使用,因为他有访问控制。
二、Portainer架构
Portainer 由两个元素组成:Portainer 服务器和 Portainer 代理。两者都在您现有的容器化基础设施上作为轻量级容器运行。Portainer 代理应该部署到集群中的每个节点,并配置为向 Portainer 服务器容器报告。 单个 Portainer 服务器将接受来自任意数量的 Portainer 代理的连接,从而提供从一个集中式界面管理多个集群的能力。为此,Portainer Server 容器需要数据持久性。Portainer 代理是无状态的,数据被传送回 Portainer 服务器容器。
三、Portainer安装
运行下面两条命令即可。这些命令会创建一个Portainer专用的卷,然后在8000和9000端口创建容器并运行。
1.基于本地容器的部署
如果使用Portainer管理本地Docker主机的话,需要绑定/var/run/docker.sock
【这里是个知识点,涉及docker之间通信的问题,以及docker 里运行docker】
注意:portainer/portainer 是 Portainer v1.24.x 的镜像名,现在已弃用;从 2022 年 1 月开始,Portainer 2.0 的所有新版本都将在 portainer/portainer-ce 中发布
#安装Portainer的Docker镜像 docker pull portainer/portainer-ce #创建数据卷 #【注意】在docker数据目录下,如:/var/lib/docker/volumes/portainer_data docker volume create portainer_data #创建并运行容器 docker run --name portainer -d -p 8000:8000 -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
小插曲:我的测试服务器,端口9000被php-fpm占用了,那就改用端口 8001 吧 !
docker run --name portainer -d -p 8000:8000 -p 8001:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
在Docker中启动Portainer CE服务,解释:
docker run:运行容器的命令
- --name portainer:为容器指定一个名称
- -d:表示以守护进程模式运行容器
- -p 8000:8000:将本地主机的8000端口映射到容器内的8000端口,用于Portainer与Docker守护进程通信
- -p 9000:9000:将本地主机的9000端口映射到容器内的9000端口,用于访问Portainer Web界面
- --restart=always:设置容器自动重启
- -v /var/run/docker.sock:/var/run/docker.sock:将本地主机的Docker守护进程socket文件挂载到容器内,以便与Docker守护进程进行通信
- -v portainer_data:/data:将容器内的/data目录挂载到本地主机上的portainer_data卷中,用于保存Portainer的数据和配置信息
- portainer/portainer-ce:latest:指定要运行的Portainer CE镜像及其版本
然后在浏览器打开对应地址,就会发现成功运行了。第一次运行的时候需要设置账号,然后选择要管理的Docker主机。
2.连接到远程容器的部署
docker run --name portainer -d -p 9000:9000 --restart always -v portainer_data:/data portainer/portainer -H tcp://<REMOTE_HOST>:<REMOTE_PORT>
PS:-H 后面的remote是你想用portainert管理的docker。
四、添加新的容器集群环境
1. 本机连接方式
只能在创建 Portainer Server 容器时添加本地环境。部署 Portainer 后,您无法添加本地环境。
第一次登录会让选择管理的容器环境,这里可以选择本机,通过挂载/var/run/docker.sock 和docker 守护进程通信(如图所示)。
之后就可以看到本机上运行的Docker容器了,点击它们还可以进行容器的管理。
左边的条目可以管理卷、创建容器、查看主机信息等等。基本上该有的功能都有了。
2. Remote连接方式
通过该方式,可以将远程机器添加到Portainer服务端,统一管理远程机器上的容器环境。
将 Docker Standalone 主机连接到 Portainer 时,可以使用两种方法。您可以通过 TCP 直接连接到 Docker API,也可以在 Docker Standalone 主机上安装 Portainer 代理并通过代理连接。
相关链接:https://docs.portainer.io/v/ce-2.11/admin/environments/add/docker
1)通过远程访问TCP:2375端口绑定环境
使用Remote要求被管理的主机开启docker守护线程监听端口 可以在/etc/docker/daemon.json
中添加如下配置:
{ "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"] }
2)通过Portainer Agent方式管理docker环境
使用Agent需要在要监控的主机上创建一个Portainer Agent容器
相关链接: https://docs.portainer.io/v/ce-2.11/start/install/agent/docker/linux
#安装Portainer Agent的Docker镜像 docker pull portainer/agent #常见Agent容器 docker run --name portainer_agent -d -p 9001:9001 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest
3)通过Portainer Agent方式管理k8s集群环境
在k8s集群上执行以下命令
curl -L https://downloads.portainer.io/portainer-agent-ce211-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml
在远程k8s集群上部署agent后,在Portainer server 上通过nodeport 或者 targetport 进行服务配置,完成k8s集群的连接配置。
参考: