Docker可视化管理工具Portainer
Portainer简介
Portainer 是一个轻量级的、开源的容器管理工具,提供了一个直观的 Web 用户界面(UI),用于管理 Docker 和 Kubernetes 环境。它简化了容器的部署、监控和管理,特别适合不熟悉命令行操作的用户或团队。
Portainer架构概述
Portainer 由两个元素组成:Portainer 服务器和 Portainer 代理。两者均作为轻量级容器在现有的容器化基础架构上运行。Portainer 代理应部署到集群中的每个节点,并配置为向 Portainer 服务器容器报告。
单个 Portainer 服务器将接受来自任意数量的 Portainer 代理的连接,从而能够从一个集中式界面管理多个集群。为此,Portainer 服务器容器需要数据持久性。Portainer 代理是无状态的,数据会被发送回 Portainer 服务器容器。
其它请参见官方文档:Welcome | Portainer Documentation
Portainer安装
环境依赖
由于本地已具备Docker服务运行环境,因此基于docker环境安装Portaniner镜像服务,并运行容器,相关Docker安装过程此处省略,可参见《Docker基础安装与使用》
拉取镜像文件
拉取Docker中央仓库最新版本镜像;
docker pull portainer/portainer-ce:latest
注意:portainer-ce为开源社区版,同时官方还有商业版portainer-be,拉取时需要区分;
执行日志
[root@centos72 docker]# docker pull portainer/portainer-ce:latest
latest: Pulling from portainer/portainer-ce
dc8df0f2921e: Pull complete
c82aa9c9fb45: Pull complete
d40df14c1d7a: Pull complete
a3939f2dc487: Pull complete
204b2fbb824e: Pull complete
a53c840f28bf: Pull complete
9e1dadc4be73: Pull complete
6f01ec19fa2b: Pull complete
e2f767fe3885: Pull complete
793e77bf062e: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:bd12f7a8732kx8e2a512e18272c3lwifjsf5sdf2d663451894axv557a3b9uiw6
Status: Downloaded newer image for portainer/portainer-ce:latest
docker.io/portainer/portainer-ce:latest
令查看images镜像列表是否已存在,以及查看版本与大小;
docker images
创建Docker服务
下载镜像后,可以直接通过docker run创建并默认运行portainer服务容器;
docker run -d --name=portainer -p 9000:9000 portainer/portainer-ce:latest
但默认安装存在弊端,并没有对portainer的docker容器环境做硬件资源分配限制,因此可能会占用过多以及与其它应用程序竞争;
如果已安装启动portainer容器,先停止portainer的docker容器,通过外部命令行运行容器,限制容器内存、CPU资源数
相关命令参数可通过:docker run --help 查看或查看官方文档:Resource constraints | Docker Docs
# 创建并启动指定docker容器,后缀b、k、 m、g表示内存容量单位
docker run -d --name=portainer \
-c 2 -m 512m --memory-swap=1G \
-p 9090:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/docker/sysdata/portainer_data:/data \
-e APP_ENV="production" \
--restart unless-stopped \
portainer/portainer-ce:latest
参数解说:
run:表示从镜像中创建一个新的docker容器并启动运行;
-d:表示容器在后台启动
--name:表示为docker容器设置一个名称
-m或--memory:表示容器可使用最大内存;
--memory-swap:表示容器可缓存到磁盘上的交换内存使用量和-m内存可使用量的总和,设置为0则忽略,-1则无限制,如果与-m数量一致,则无法使用磁盘缓存内存空间;
-c或--cpus:表示容器可使用的CPU资源量,通常按核心数量算,也支持,0.5,1.5~等使用量计算;
-p:表示宿主机与docker容器的端口映射,多个端口可以用多个-p来实现;
-v:表示宿主机与docker容器的文件目录映射,多个目录映射可用多个-v来实现;注意:需要是有效的宿主机卷目录;
-e:表示在docker容器中添加环境变量
--restart:表示docker容器的重启策略为:no:默认不自动重启;always:总是重启容器;on-failure:仅在容器退出状态码非 0 时重启;unless-stopped:总是重启,除非容器被手动停止;
portainer/portainer-ce:latest:表示服务镜像名称,可通过docker images查看
当控制台没有输出错误,并返回显示正常的dockerId串后,表示启动成功,
访问docker服务器的9000端口(注意事向:因我的环境上9000端口已被占用实际用的9090,因此创建docker容器时,用的-p 9090:9000参数)
管理与使用
浏览器输入:http://ip:9000,即可进入Portainer初始化界面,它会要求我们配置用户名密码:
完成账户密码初始化之后,默认无任何管理服务;
Docker主机管理
可点击Home页上Infomation提示中的的"environment wizard“进行服务器本地容器管理,或从左侧菜单Environments》Add environment进入添加;
跳到QuickSetup页,选择第一项,Docker Standalone,因为本地测试的docker容器为单机独立部署;点击Start Wizard进入下一步;
选择通过在Docker服务器上安装Agent程序来支持远程管理;
选中Agent块,点击"Copy command"按钮,复掉脚本到远程Docker服务所在主机上执行,自动下载并安装Agent代理;
注意:此处是指需要在安装Docker引擎服务的主机上运行此Agent代理脚本;
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.16.2
复制脚本在远程docker服务器上安装Portainer Agent程序;
待执行完毕,点击Connect按钮链接即可在右上角看到连接配置;
回到主页面,可以查看已成功连接的远程docker服务。
安装镜像演示
通过安装Tomcat来演示,在Portainer上如何操作,点击Images,进入镜像Pull页面;输入tomcat,点击Search跳入到官方平台,查找是否存在或支持的版本;
点击搜索列表中的tomcat,进入tomcat版本镜像明细页面,切换到Tags选项卡内容中,因为在Overview中主要是提供基于Dockerfile安装的版本;
点击Tags标签,官方已打包好多个可用的Tags镜像版本;
选择一个最新的版本,用来安装镜像与测试;Copy: docker pull tomcat:9.0.98-jdk8-corretto-al2,复制tomcat:9.0.98-jdk8-corretto-al2内容到Portainer中docker.io框,点击”Pull the image“拉取;
因拉取中央仓库镜像,拉取速度受网络环境影响比较大,等待一会儿,待拉取完毕后,在Images中显示;
在Containers页中,通过 Add container 添加创建容器;Name任意命名,Image为并填项,输入已拉取的tomcat镜像版本:tomcat:9.0.98-jdk8-corretto-al2,因为我们已拉取tomcat镜像到docker服务器下,因此将”Always pull the image“关闭,默认会查找本地已有的镜像对应版本;
点击publish a new network prot 添加docker容器环境与 docker服务器主机环境(宿主机)关联的端口映射,(宿主机)host:8080,(容器) container:8080,当通过浏览器访问宿主机物理端口8080时,奖映射到docker容器系统下的8080端口;
点击Deploy the container 部署应用后,回到Containers列表,docker容器tomcat服务已成功运行;
在Docker服务主机上检索8080端口,显示已启用;
通过浏览器访问,显示404,但这页面风格明显这是tomcat服务返回的;
通过外部命令行,进入容器内查看,发现在/usr/local/tomcat/webapps下没有任何应用运行,因此返回404;
如果开发使用,只需将/usr/local/tomcat/webapps映射到宿主机目录下,将web打包后的文件置放在该宿主机绑定的映射目录下,tomcat服务重启后,即能发现应WEB用并加载运行WEB应用服务;
docker exec -it tomcat-9.0.98 /bin/bash
执行日志
为了演示一个完整的tomcat部署服务过程,重新建一个tomcat镜像服务,命名为:tomcat-9.0.98-2 ,docker镜象为:tomcat:9.0.98-jdk8-corretto-al2,此镜像为我们已拉取imags中的tomcat镜像为系统运行环境基础;
在Volumes卷中,为docker容器中tomcat的webapps和logs虚拟目录添加docker服务主机上(宿主机)映射目录,用于在服务主机上上传服务和查看tomcat的运行日志;
创建成功后,在Contaners 列表运行tomcat-9.0.9-2服务;
在docker服务主机上,进入为docker容器tomcat服务映射的宿主机logs目录上,此时已在docker服务主机上生成tomcat运行日志;
向docker服务主机上映射的docker容器tomcat服务webapps目录上传可运行的WEB应用程序,此ROOT为从另一个tomcat9.tgz解压版webapps上复制上传而来,为tomcat的运行后的默认首页;
上传ROOT应用程序相关文件后,重启tomcat服务,因为在tomcat服务启动状态下上传web应用,会导致web应用加载不完整或加载出错;
包含tomcat服务的docker容器重启完毕后,再一次访问docker服务器映射的容器端口:8080,此时tomcat服务的默认大猫猫显示出来了;
再一次进入到docker容器里,查看容器里的/usr/local/tomcat/webapps目录下已经能看到上传的ROOT应用目录;
docker exec -it tomcat-9.0.98-2 /bin/bash
执行日志
到此以一个完整的流程,演示安装Portainer,使用Portainer来管理远程docker服务,以及拉取docker镜像,部署docker容器服务;
结束
在Portainer中还有很多细分的功能,因篇幅问题以及个人熟悉程度,未在本章中展示,期待大家自行摸索与测试;
注:在安装和使用过程中,如遇到问题,可以向国产AI大模型Deepseek V3版本提问,能够获得有效的方案和精准的回答。Deepseek响应快,步骤清晰、答案精准,值的使用;