Ceph入门到精通-podman 入门实战

news2024/9/23 9:35:31

目录

  • podman安装
  • podman制作本地镜像
  • podman(docker)命令回顾
  • podman快速入门

一入编程深似海,从此节操是路人。

最近使用podman,就想着写一篇总结性的笔记,以备后续参考。就如同写代码,不写注释,过了一段时间可能会想这是我写的吗?不会吧,还要理一下逻辑才能读懂,不利于后期维护。

感觉整体体验下来,镜像获取、容器创建、容器监控、容器移除,和docker差不多,感觉可以作为替代品。

什么是podman

Podman is a utility provided as part of the libpod library. It can be used to create and maintain containers. The following tutorial will teach you how to set up Podman and perform some basic commands.

大意是 podman 使用libpod库提供的一部分,打造应用程序。你可以使用podman创建容器、维护容器。

每个人使用环境可能不一样,在介绍podman安装与使用时,我想先介绍自己的环境

个人使用环境

操作系统:Linux发行版Centos9-stream。

容器环境:podman 4.2.0。

测试运行服务:Maven 构建 Java web 应用程序打包成 jar。

Linux-Centos9-stream使用podman(docker)制作本地镜像,Maven构建 jar 运行并测试。

  1. 项目构建(spring官网 & 阿里云 脚手架构架,IDE开发工具构建)。
  2. 项目打包(maven 打包,mvn install)。
  3. 项目发布(上传至服务器Linux 发行版Centos9-stream)。
  4. 制作本地镜像(podman(docker) 容器制作镜像)。

本文核心:主要介绍podman(docker)打包本地 jar 文件,制作镜像运行测试。

准备

  • 本地环境:MySQL、JDK、Maven、jar包文件,用于测试。
  • 服务器环境:podman(docker)环境,openJDK。

如果没有jar包环境,可以去spring官网和阿里云springboot脚手架官网在线构建demo。
spring initializr:https://start.spring.io/
阿里云云原生应用脚手架:https://start.aliyun.com/

cd demo
mvn install
scp -r target\demo-1.0.jar root@192.168.245.132:/opt/dkr/  

podman安装

关于podman,支持Windows、MacOS与Linux发行版,可以前往github获取更多版本安装包(exe、zip、pkg、tar.gz、source),便于在网络隔离情况下部署。如果网络环境允许,可以使用操作系统支持的安装工具进行安装,比如RHEL系列使用yum或者dnf管理工具,Debian与Ubuntu使用apt工具。

podman开源仓库:GitHub - containers/podman: Podman: A tool for managing OCI containers and pods.

如果获取资源缓慢,这是正常现象,你可能需要加速一下,或者使用BT工具。

如果使用Linux发行版在线安装,可以更换国内镜像源,比如阿里云、腾讯云、华为云。

1、安装podman(docker)

yum install -y podman

在RHEL9中可以使用yum或者dnf命令安装服务。

查看podman版本:podman -v

[root@Centos9-Stream demo]# podman -v
podman version 4.2.0

2、启动podman

systemctl start podman

RHEL7以及以上推荐使用systemctl命令去管理服务,使用service命令也是兼容的,用法有些区别。

设置开机自启:systemctl enable podman

[root@Centos9-Stream ~]# systemctl enable podman
Created symlink /etc/systemd/system/default.target.wants/podman.service → /usr/lib/systemd/system/podman.service.
[root@Centos9-Stream ~]# systemctl status podman
○ podman.service - Podman API Service
     Loaded: loaded (/usr/lib/systemd/system/podman.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Sun 2023-02-26 16:56:43 CST; 2min 33s ago
...
2月 26 16:56:38 Centos9-Stream podman[3173]: time="2023-02-26T16:56:38+08:00" level=info msg="/usr/bin/podman filtering at log level info"
...
2月 26 16:56:43 Centos9-Stream systemd[1]: podman.service: Deactivated successfully.

使用命令 systemctl enable podman 设置podman服务开机自启,查看pdoman状态:systemctl status podman,发现由 disabled 转变成了enabled。如果不想开机自启,可以使用禁用命令:systemctl disable podman。

podman制作本地镜像

Dockerfile文件作用:个人理解,相当于路标,通过相关命令去指引我们如何前进,构建镜像。

1、打包本地jar:新建Dockerfile文件

将上传的 jar 文件复制到与Dockerfile同一目录,比如我演示目录在 /opt/dkr:

cp springboot-crud-0.0.1-SNAPSHOT.jar /opt/dkr/

创建Dockerfile文件:

touch Dockerfile

编辑Dockerfile文件:

vim Dockerfile

填充如下内容:

 FROM openjdk:17
 MAINTAINER Fisher "dywangk@gmail.com"
 ADD springboot-crud-0.0.1-SNAPSHOT.jar crud-app.jar

FROM:从哪里获取到 JDK 作为运行 jar 包支撑环境,此处我获取的是 openjdk17 与 springboot 指定 jdk 版本对应上。
MAINTAINER:指定维护人。可选项,可加可不加。
ADD:添加 jar 文件。可以使用COPY替代。
RUN:顾名思义,运行。运行命令以及服务,本次测试没加上,在 podman build 时运行。

2、打包本地jar作为镜像

通过 podman build 命令构建本地镜像服务。

podman build -f Dockerfile -t springboot:crud-app.jar

查看images,注意对应上IMAGE ID

[root@Centos9-Stream ~]# podman images
REPOSITORY                 TAG           IMAGE ID      CREATED       SIZE
none				       none			 4f7431dafa0a  2 hours ago   519 MB
docker.io/library/openjdk  17            5e28ba2b4cdb  9 months ago  475 MB

通过podman images命令查看images发现REPOSITORY和TAG是none,接下来会继续介绍指定TAG。
注意:podman images 是列出本地存储镜像列表,相当于 podman image list;podman image 是用于管理镜像。

例如删除镜像:

podman image rm 4f7431dafa0a
podman image rm -f 4f7431dafa0a

3、指定tag

使用 podman tag 命令去添加标签名,tag 后面追加 IMAGE ID 以及本地打包好的镜像。

podman tag 4f7431dafa0a srpingboot:crud-app.jar

再次查看images,发现REPOSITORY和TAG有内容了。

[root@Centos9-Stream ~]# podman images
REPOSITORY                 TAG           IMAGE ID      CREATED       SIZE
localhost/srpingboot       crud-app.jar  4f7431dafa0a  2 hours ago   519 MB
docker.io/library/openjdk  17            5e28ba2b4cdb  9 months ago  475 MB

4、运行jar服务

使用 podman run 命令启动容器中的本地镜像服务。-p 参数,指定端口8082和传输协议TCP;--name 参数,用于指定容器名称;-it -d 参数,用于将服务置于后台;java -jar 参数, 与平时本地环境直接启动 java -jar服务是同样地命令。

podman run -p 8082:8081/tcp --name crud -it -d localhost/srpingboot:crud-app java -jar crud-app.jar 

你可以再启动一个服务,端口映射到8088,注意,--name 取名不能重复,示例如下:

podman run -p 8088:8081/tcp --name crud7 -it -d localhost/srpingboot:crud-app java -jar crud-app.jar 

查看运行中的服务,使用命令:podman ps

[root@Centos9-Stream dkr]# podman ps
CONTAINER ID  IMAGE                              COMMAND               CREATED      STATUS          PORTS                   NAMES
920899cf9aad  localhost/srpingboot:crud-app.jar  java -jar crud-ap...  2 hours ago  Up 2 hours ago  0.0.0.0:8082->8081/tcp  crud

将8081端口映射到8082上,访问时使用端口是8082。

列出容器端口映射:podman port crud

[root@Centos9-Stream dkr]# podman port crud
8081/tcp -> 0.0.0.0:8082

例如:访问接口,如果你没有在controller层编写任何代码,访问显示的是404。当然这些并不重要,只需要印证podman(docker)打包本地jar包正常运行就足够了。
http://192.168.245.132:8082/thymeleaf/findCity

5、查看日志
查看日志命令 podman logs,后面追加IMAGE ID:920899cf9aad,IMAGE ID理解为唯一值便于检索。

podman logs 920899cf9aad

反馈结果

2023-02-13T12:56:21.113Z  INFO 1 --- [           main] com.example.Application                  : Started Application in 7.021 seconds (process running for 8.49)
...
2023-02-13T12:56:59.312Z  INFO 1 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 3 ms
Hibernate: select c.Name, c.CountryCode from world.city c;

ppmaR1K.png

可以看到使用 JPA show-sql 打印出了自己指定的SQL语句:

select c.Name, c.CountryCode from world.city c;

6、停止容器

采用 podman stop 命令手动停止一个或多个容器:

podman stop crud

7、启动容器

当容器意外宕掉或者手动停止了,此时可以使用 podman start 启动一个或多个容器:

podman start crud

8、监控容器

查看(监控)容器健康状态,主要分析CPU、内存负载:podman stats,使用ctrl + c 退出。如下图所示:

podman  stats

当然,可以配合重定向输出到日志文件:podman stats > podman-stats.log,初次已覆盖形式;再次使用重定向输出命令:podman stats >> podman-stats.log,采用追加形式。查看日志文件内容,可以使用tail、cat、vim命令。

当然,你还可以使用 podman top 查看容器负载,示例查看最新容器状态:

podman top -l

善用podman自带帮助文档,有一定基础后这是最有效的方式,需要有一定阅读英文文档积累。

列出podman全部文档提示,示例:

podman help
man podman

只查看 podman ps 帮助文档,示例:

podman help ps
podman ps --help

podman(docker)命令回顾

闲扯

开始使用,感觉命令太多,哎呀记不住,怎么办?没有捷径可走,多敲几遍,自然而然记住了。主要做札记,使用笔记本记录,记录过程也是思考的过程。分类整理,容器管理,容器内镜像管理。其次靠工作经验以及平时积累总结出常用以及实用命令,熟悉后,使用podman自带的帮助文档提高工作效率

只停留在看和札记上,显得很抽象,需要配合搭建环境去感受。运用越多,实际工作中越有底气。

回顾一下,制作本地镜像使用到了哪些命令。你会发现,自己实践一遍,需要掌握哪些命令,用到的还不少。仅仅通过构建本地镜像到运行,涉及到知识面有限,我并没有介绍到容器初始化(init)、连接(attach)、内容自动更新(auto-update)、提交(commit)、比对(diff)等等命令。

回顾命令

查看容器列表,正在运行中的容器:podman ps

podman ps

启动一个或者更多容器:podman start,示例启动crud7

podman start crud7

停止一个或者更多容器:podman stop,示例停止crud7

podman stop crud7

查看(监控)容器健康状态,示例:

podman  stats

从远程地址拉取镜像:podman pull

查看 podman 版本命令:podman -v

从容器定义配置文件Dockerfile, 构建自定义镜像命令:podman build

给镜像加上tag(标签名):podman tag

新的容器中运行一条命令,比如我在文中运行到 jar 服务:podman run

管理镜像:podman image

查看本地(已拉取)镜像列表:podman images

移除一个或多个容器:podman rm ,根据容器ID移除。例如:

podman rm 03dd5a923f51

从本地存储移除一个或多个镜像:podman rmi

查看容器中运行服务后的日志:podman logs

配合Linux中grep、tail命令进行检索

podman logs cd57c4af7fb8 | grep 8081
podman logs cd57c4af7fb8 | tail -f

此处,我已知使用到了端口8081,直接匹配比较精确,也可以模糊一点,只输入80。使用 tail -f 命令,查看最近的10条信息。

列出容器端口映射:podman port ,示例,查找名称为crud的容器:

podman port crud

搜索远程地址镜像:podman search ,例如搜索 openjdk17:

podman search openjdk17

使用 podman 帮助文档:podman help

使用帮助命令时候,同样可以配合 grep 命令匹配已知的命令:

podman help  | grep images
podman help images

podman快速入门

podman提供了快速启动,以 httpd 服务为示例:镜像获取、容器创建、容器监控、容器移除。

快速入门,参考podman文档

Getting Started with Podman

此处演示使用 podman 获取 httpd(web中间件Apache服务)。

搜索命令:podman search ,示例如下:

[root@Centos9-Stream kart]# podman search httpd --filter=is-official
NAME                     DESCRIPTION
docker.io/library/httpd  The Apache HTTP Server Project

获取 httpd 服务

podman pull docker.io/library/httpd

列出所有镜像列表

podman images

运行容器

 podman run -dt -p 8080:80/tcp docker.io/library/httpd

获取的是最新版,此处,你可能需要修改才能运行:

podman run -dt -p 8080:80/tcp docker.io/library/httpd:latest

查询正在运行的容器:

podman ps

测试容器,访问 httpd :

http://localhost:8080/

或者使用 curl命令:

curl http://localhost:8080
<html><body><h1>It works!</h1></body></html>

看到页面显示:It works! ,代表测试运行httpd服务成功。

监控容器,示例:

podman top amazing_matsumoto

查看日志,指定容器NAME,示例:

podman logs amazing_matsumoto

停止容器,根据容器(CONTAINER)ID或者NAME都行。注意,如果没有指定NAME,会生成随机字符串。

示例根据NAME停止容器:

podman stop amazing_matsumoto

查出所有容器(包含退出的、创建的),示例:

podman ps -a

移除容器,示例:

podman rm amazing_matsumoto

通过管道符配合 grep 命令搜索,发现确实移除掉了,示例:

podman ps -a | grep amazing_matsumoto

基本命令文档:可以下载文档,包含:PDF、HTML、Epub三种格式。

Commands — Podman documentation

  • latest:最新版
  • stable:稳定版
  • v4.3:历史版本podman4.3

podman开源仓库:GitHub - containers/podman: Podman: A tool for managing OCI containers and pods.

最后,希望对你的工作有所帮助,以上总结仅供参考!

静下心来,才发现原来不会的还有很多。

一分耕耘,一分收获。

多总结,你会发现,自己的知识宝库越来越丰富。

——END——

养得胸中一种恬静

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Leetcode】572.另一棵树的子树

另一棵树的子树 题目思路代码 题目 思路 这道题目主要用到判断两个二叉树是否相同 对root为根节点的树进行递归遍历判断 是否存在一颗子树和以subRoot为根节点的树 代码 class Solution {public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root null){return…

HJL-93/A数字式交流三相电流继电器 导轨安装 约瑟JOSEF

品牌&#xff1a;JOSEF约瑟名称&#xff1a;数字式交流三相电流继电器型号&#xff1a;HJL系列功率消耗&#xff1a;≤5W触点容量&#xff1a;250V/5A额定电压&#xff1a;58、100、110、220V HJL系列 数字式交流三相电流继电器型号&#xff1a; HJL-93/AY数字式交流三相电流继…

收藏~六大网站访客类型及应对方式

收藏&#xff01;六大网站访客类型及应对方式&#xff01; 当涉及到与潜在客户接触时&#xff0c;速度是关键。毕竟&#xff0c;当一个潜在客户来到你的网站时&#xff0c;你只有10秒钟的时间来捕捉他们的兴趣。我们把这种主动的方法称为 "扑捉"。它确保你的销售团队…

《百年孤独》

《创世记》之后&#xff0c;首部值得全人类阅读的文学巨著。 — 纽约时报 加西亚 马尔克斯以小说作品创建了一个自己的世界&#xff0c;一个浓缩的宇宙&#xff0c;其中喧嚣纷乱却又生动可信的现实&#xff0c;映射了一篇大陆及其人民的富足与贫困。 — 诺贝尔文学奖颁奖辞 马…

元宇宙数字人直播

数字人直播发展趋势主要有以下几个方面&#xff1a; AI技术&#xff1a;随着人工智能技术的不断发展&#xff0c;数字人直播将更加贴近真实&#xff0c;虚拟人物的表现力和情感交流能力将会得到大幅提升。 元宇宙&#xff1a;元宇宙是一种虚拟现实的空间&#xff0c;数…

如何把视频里的声音提取出来,4种有效方法学起来

在我们日常生活中&#xff0c;可能会有需要从视频文件中提取音频的情况&#xff0c;比如想要将视频中的歌曲或语音内容提取出来&#xff0c;或者电脑上看视频时&#xff0c;总有一些很有意思的BGM&#xff0c;想录下来或者提取出来单独使用&#xff0c;不过有些小伙伴可能不知道…

分布式事务Seata-TCC事务模式

承接上文Seata强一致性事务模式XA的设计理念 通用TCC模式 TCC是二阶段提交协议&#xff0c;Try-Confirm-Cancel&#xff08;资源预留、确认操作、取消操作&#xff09;&#xff0c;Try是对当前业务资源的检查&#xff0c;如果成功&#xff0c;则Confirm提交&#xff0c;否则C…

8 DWA(一)

8 DWA DMA简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取&#xff08;可以直接访问32内部存储器&#xff0c;包括内存SRAM&#xff0c;Flash&#xff09; DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#x…

NewBing、Andi、Phind、Perplexity 还有国产kuaisou五个AI搜索引擎的介绍和对比

NewBing NewBing是微软推出的新一代AI搜索引擎&#xff0c;它基于OpenAI的下一代大语言模型&#xff0c;比ChatGPT更强大&#xff0c;专门为搜索定制。NewBing可以理解自然语言的问题&#xff0c;生成简洁、准确、有趣的回答&#xff0c;并提供相关的链接和图片。NewBing还可以…

【Happy Eyeballs算法】Happy Eyeballs算法及curl支持--happy-eyeballs-timeout-ms或者代码实现

参考链接 IPV6 && Happy Eyeballs - 腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1561091 Happy Eyeballs算法 Happy Eyeballs是一个应用于网络双栈环境的算法&#xff0c;于2011年被提出。 Happy Eyeballs有两个主要目标&…

C语言实现杨辉三角

目录 1. 发现杨辉三角的规律 2. 实现杨辉三角&#xff08;无格式控制&#xff09; 3. 输出带格式控制的杨辉三角 1. 发现杨辉三角的规律 # 每一行的第一个元素是1 ## 每一行的最后一个元素是1 ### 上一行的两个数相加等于下一行的某个数值 2. 实现杨辉三角&#x…

Linux服务器Anaconda版本安装JupyterLab

1、场景 在Linux服务器上安装JupyterLab并可在远程访问&#xff01; 2、Anaconda版本 本次安装的Anaconda 版本&#xff1a;Anaconda3-5.2.0-Linux-x86_64.sh 下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 3、安装 3.1 关闭防火墙 # 查看防火…

使用状态机实现幂等性

文章目录 背景幂等概念适用场景示例代码上述代码状态流转 背景 在某些场景下&#xff0c;可以使用状态机来实现幂等性。将业务流程抽象为一个状态机&#xff0c;定义各个状态之间的转换规则。当收到一个请求时&#xff0c;根据当前状态和请求类型来判断是否允许执行操作&#x…

MySQL高级篇——存储引擎和索引

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题_java黑马笔记 目录 一、存储引擎 1.1、查看、设置存储引擎的命令 1.2、InnoDB引擎 1.2.1、特点 1.2.2、优势 1.2.3、InnoDB事务的ACID特…

[读书笔记] 从问题和公式角度理解 Diffusion Model

[小全读书笔记] 从问题和公式角度理解 Diffusion Model 1. Diffusion Model的结构1.1 定义与限制1.2 定义与限制的数学体现 2. Diffusion Model的模型训练2.1 似然函数转换成ELBO2.2 拆解ELBO2.3 求解关键&#xff1a; q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1…

垃圾回收概述

什么是垃圾 垃圾收集&#xff0c;不是Java语言的伴生产物。早在1960年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题&#xff1a; 哪些内存需要回收&#xff1f;什么时候回收&#xff1f;如何回收&#xff1f; 垃圾收…

在线审片工具是什么,安捷秀如何在线审片?

当影视内容完成拍摄后&#xff0c;即进入漫长、繁复的后期制作过程&#xff0c;审片就是后期制作过程中一个非常重要的环节。传统的审片需要专门的场地、音画设备&#xff0c;召集人员在特定时间进行&#xff0c;人财物的成本都非常高&#xff0c;在此情况下&#xff0c;在线审…

GeoServer使用MySQL数据库出现“Error decoding wkb”错误的一种情况

错误 请看一下GeoServer官方文档的警告 Warning:Currently the MySQL extension is unmaintained and carries unsupported status. While still usable, do not expect the same reliability as with other extensions. 没事不要特立独行使用MySQL当GeoServer的空间数据库&am…

文件和用户管理

Linux基础 提示&#xff1a;个人学习总结&#xff0c;仅供参考。 一、Linux系统部署 二、服务器初始化 三、文件和用户管理 提示&#xff1a;文档陆续更新整理 文件和用户管理 Linux基础一、Linux目录结构二、文件管理1.文件类型2.文件管理命令 三、用户管理1. 用户/组基本概…

MySQL隐式类型转换

当运算符与不同类型的操作数一起使用时&#xff0c;会发生类型转换以使操作数兼容。有些转换是隐式发生的。例如&#xff0c;MySQL会根据需要自动将字符串转换为数字&#xff0c;反之亦然。 转换规则 如果一个或两个参数都为NULL&#xff0c;则比较结果为NULL 。但是相等比较…