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响应快,步骤清晰、答案精准,值的使用;
相关文章:

Docker可视化管理工具Portainer
Portainer简介 Portainer 是一个轻量级的、开源的容器管理工具,提供了一个直观的 Web 用户界面(UI),用于管理 Docker 和 Kubernetes 环境。它简化了容器的部署、监控和管理,特别适合不熟悉命令行操作的用户或团队。 …...

WPF实战案例 | C# WPF实现大学选课系统
WPF实战案例 | C# WPF实现大学选课系统 一、设计来源1.1 主界面1.2 登录界面1.3 新增课程界面1.4 修改密码界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#) 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…...
leetcode 面试经典 150 题:有效的括号
链接有效的括号题序号20题型字符串解法栈难度简单熟练度✅✅✅ 题目 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须…...

python学opencv|读取图像(三十九 )阈值处理Otsu方法
【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,还学习了一种自适应处理方法,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学o…...
GBase8c aes_encrypt和aes_decrypt函数
在数据库中,aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别: 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb,…...

【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)
一、问题描述 题目描述 对一个数据a进行分类,分类方法为: 此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。 比如一个数据a=0x010…...

机器学习 vs 深度学习
目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练(归纳)和预测(演绎) 归纳: 从具体案例中抽象一般规律…...

flutter_学习记录_00_环境搭建
1.参考文档 Mac端Flutter的环境配置看这一篇就够了 flutter的中文官方文档 2. 本人环境搭建的背景 本人的电脑的是Mac的,iOS开发,所以iOS开发环境本身是可用的;外加Mac电脑本身就会配置Java的环境。所以,后面剩下的就是&#x…...

SpringBoot如何自定义Starter ?
大家好,我是锋哥。今天分享关于【SpringBoot如何自定义Starter ?】面试题。希望对大家有帮助; SpringBoot如何自定义Starter ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Spring Boot 中,自定义 Starter 是一种将应用程…...
前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释
文章目录 前言1、技术复杂性与成熟度 / Technical Complexity and Maturity2.、应用场景与行业需求 / Application Scenarios and Industry Demand3、监管与法律问题 / Regulatory and Legal Issues4、去中心化与网络效应 / Decentralization and Network Effects5、能源消耗与…...

WordPress果果对象存储插件
将网站上的图片等静态资源文件上传至七牛云对象存储,可以减轻服务器文件存储压力,提升静态文件访问速度,从而加速网站访问速度。 支持:阿里云对象存储、华为云对象存储、百度云对象存储、腾讯云对象存储、七牛云对象存储。 下载…...
elk 安装
创建elk网络 docker network create -d bridge elkelasticsearch 创建目录 mkdir -p /data/elasticsearch/{conf,logs,data,plugins}vim /data/elasticsearch/conf/elasticsearch.ymlcluster.name: "es-cluster" network.host: 0.0.0.0 xpack.security.enabled: tr…...

Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...
OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap(使用单位矩阵 R…...
用 Java 发送 HTML 内容并带附件的电子邮件
实现思路 首先,设置邮件服务器的相关属性,包括是否需要认证、使用的邮件协议、服务器地址、端口等。 创建一个会话对象,使用 Session.getInstance 方法,并提供邮件服务器的属性和认证信息。 创建一个 MimeMessage 对象作为邮件消…...
【Day24 LeetCode】贪心Ⅱ
一、贪心Ⅱ 1、买卖股票的最佳时机 II 122 这题第一想法是使用动态规划做,每天有两个状态,持有股票和非持有股票,每次计算这两个状态下的最优值。 class Solution { public:int maxProfit(vector<int>& prices) {//表示当前 没有…...

vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)
管理员管理 搭建管理员页面 在views中创建一个manager文件夹,并创建ManagerIndexView.vue、MangagerListView.vue、UserList.vue <!-- src/views/manager/ManagerIndexView.vue --> <template><!-- 作为一个占位符,用于渲染与当前 URL…...
上位机知识篇---ROS2命令行命令静态链接库动态链接库
文章目录 前言第一部分:ROS2命令行命令1. 基础命令(1)ros2 run(2)ros2 launch(3)ros2 node(4)ros2 topic(5)ros2 service(6࿰…...

2025/1/21 学习Vue的第四天
睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候,普通得定义一个对象与属性。 <!DOCTYPE html> <h…...

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?
引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中,云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨,为从业者提供了宝贵…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...