当前位置: 首页 > news >正文

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 这题第一想法是使用动态规划做&#xff0c;每天有两个状态&#xff0c;持有股票和非持有股票&#xff0c;每次计算这两个状态下的最优值。 class Solution { public:int maxProfit(vector<int>& prices) {//表示当前 没有…...

vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)

管理员管理 搭建管理员页面 在views中创建一个manager文件夹&#xff0c;并创建ManagerIndexView.vue、MangagerListView.vue、UserList.vue <!-- src/views/manager/ManagerIndexView.vue --> <template><!-- 作为一个占位符&#xff0c;用于渲染与当前 URL…...

上位机知识篇---ROS2命令行命令静态链接库动态链接库

文章目录 前言第一部分&#xff1a;ROS2命令行命令1. 基础命令&#xff08;1&#xff09;ros2 run&#xff08;2&#xff09;ros2 launch&#xff08;3&#xff09;ros2 node&#xff08;4&#xff09;ros2 topic&#xff08;5&#xff09;ros2 service&#xff08;6&#xff0…...

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…...

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中&#xff0c;云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨&#xff0c;为从业者提供了宝贵…...

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种&#xff1a;主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备&#xff0c;而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

模拟算法习题篇

在算法中&#xff0c;模拟是一种通过计算机程序来模拟现实世界中的过程或系统行为的方法。它的核心思想是根据题目给定的规则和逻辑&#xff0c;按照步骤细致地重现事件的发展流程&#xff0c;从而获得最终结果。 解题时如何使用模拟算法&#xff1a; 理解题目规则&#xff1a;…...

蓝桥杯真题 - 翻转 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3520/learning/ 个人评价&#xff1a;难度 1 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;无 整体思路 贪心&#xff0c;除了第一位跟最后一位&#xff0c;其它字符&#xff0c;每当 S [ i ] ≠…...

IP属地与视频定位位置不一致:现象解析与影响探讨

在数字化时代&#xff0c;IP属地和视频定位位置已成为我们获取网络信息、判断内容真实性的重要依据。然而&#xff0c;有时我们会发现&#xff0c;某些视频内容中展示的定位位置与其发布者的IP属地并不一致。这种不一致现象引发了广泛的关注和讨论。本文旨在深入剖析IP属地与视…...

管道符、重定向与环境变量

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog 一、重定向 将命令和文件结合 标准输入重定向&#xff08;STDIN&#xff0c;文件描述符为0&#xff09;&#xff1a;默认从键盘输入&am…...

可扩展性设计架构模式——开闭原则

1. 概述 在架构设计中&#xff0c;遵循开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;,代码应该“对扩展开放&#xff0c;对修改关闭”是实现可扩展性的关键。这个原则指导我们设计系统时&#xff0c;应使其对新增功能开放&#xff0c;而对现有代码的修改封闭。这…...

算法随笔_17: 回文数

上一篇: 算法随笔_16: 找出第k小的数对距离-CSDN博客 题目描述如下: 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&…...

计算机的错误计算(二百一十九)

摘要 大模型能确定 sin(2.6^10) 的符号吗&#xff1f;实验表明&#xff0c;大模型的计算、推理均有问题。另外&#xff0c;结论也是错的。 前面讨论的内容为自变量是 2.6^100的正弦&#xff0c;本节讨论自变量为 2.6^10的正弦&#xff08;对于某些大模型&#xff0c;2.6^100似…...

React进阶之高阶组件HOC、react hooks、自定义hooks

React高级 高阶组件 HOC属性代理反向继承属性代理和反向继承的区别实例实例一实例二 HooksHooks APIuseState&#xff1a;useEffect&#xff1a;useLayoutEffect&#xff1a;useRef&#xff1a;useContext&#xff1a;useReducer:useMemouseCallback 自定义Hooks 拓展&#xff…...

【Pytest】基础到高级功能的理解使用

文章目录 第一部分&#xff1a;Pytest 简介1.1 什么是 Pytest&#xff1f;1.2 Pytest 的历史1.3 Pytest 的核心概念1.4 Pytest 的特点1.5 为什么选择 Pytest&#xff1f; 第二部分&#xff1a;Pytest 的基本使用2.1 安装 Pytest2.2 编写第一个测试用例2.2.1 创建一个简单的测试…...