首页 程序笔记 如何在 Ubuntu 24.04 (Noble Numbat) 上安装 Podman

如何在 Ubuntu 24.04 (Noble Numbat) 上安装 Podman

您是否开始了学习和掌握容器化技术的旅程?您在研究“最好的容器管理引擎”时是否偶然发现了Podman? Podman 是一个免费使用的应用程序,可以管理容器和 Pod。借助其强大的命令行界面,您可以构建、查找、运行和管理容器的整个生命周期。 Podman 作为 Docker 更安全的替代方案而受到广泛关注。但与 docker 不同的是,podman 不需要后台运行的守护进程。

Podman 最初是在 containerd 的基础上构建的,并符合开放容器倡议 (OCI) 标准。它支持以下容器相关功能:

  • 容器镜像管理:使用 podman 构建容器镜像、推送到注册表或从注册表中拉取。
  • 容器化应用程序的运行run子命令用于从镜像运行容器、进入其shell并管理容器中的应用程序
  • 存储管理:Podman 允许您创建持久卷、附加到容器以及删除卷。
  • 网络管理:Podman 为您提供管理容器网络的命令。创建网桥,并将网络连接到应用程序。
  • Pod 管理:Podman 的主要关注点不是 Pod 管理,但它使您能够将容器组作为 Pod 进行管理。这与您在 Kubernetes 中获得的功能类似。

这篇文章的内容:

  • 如何在 Ubuntu 24.04 上安装 podman
  • 如何使用 Dockerfile 构建 Docker 镜像
  • 如何在 Podman 中运行容器
  • 如何在 Podman 容器中挂载外部存储
  • 如何在 Podman 中运行 pod
  • 如何在 Podman 中创建网络并与容器一起使用

1 – 在 Ubuntu 24.04 上安装 Podman

更新 Ubuntu 系统中的软件包列表。

sudo apt update

使用 Ubuntu 上可用的 apt 包管理工具安装 Podman。

sudo apt install podman -y

安装只需几秒钟。

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  aardvark-dns buildah catatonit conmon containernetworking-plugins crun fuse-overlayfs golang-github-containers-common golang-github-containers-image libslirp0 libsubid4 libyajl2 login netavark
  passt passwd slirp4netns uidmap
Suggested packages:
  containers-storage libwasmedge0 docker-compose
The following NEW packages will be installed:
  aardvark-dns buildah catatonit conmon containernetworking-plugins crun fuse-overlayfs golang-github-containers-common golang-github-containers-image libslirp0 libsubid4 libyajl2 netavark passt
  podman slirp4netns uidmap
The following packages will be upgraded:
  login passwd
2 upgraded, 17 newly installed, 0 to remove and 187 not upgraded.
Need to get 33.4 MB of archives.
After this operation, 130 MB of additional disk space will be used.
Get:1 http://ke.archive.ubuntu.com/ubuntu noble/main amd64 login amd64 1:4.13+dfsg1-4ubuntu3 [202 kB]
Get:2 http://ke.archive.ubuntu.com/ubuntu noble/main amd64 passwd amd64 1:4.13+dfsg1-4ubuntu3 [845 kB]
Get:3 http://ke.archive.ubuntu.com/ubuntu noble/universe amd64 netavark amd64 1.4.0-4 [1,666 kB]
8% [3 netavark 1,217 kB/1,666 kB 73%]
... 

2 – 使用 Dockerfile 构建您的应用程序

通过检查 Podman 的版本来验证其安装。

$ podman --version
podman version 4.9.3

让我们使用 Dockerfile 构建 Nginx Web 服务器镜像。创建一个名为 Dockerfile 的新文件

vim Dockerfile

添加以下内容 - 如果您有适合您自己的特定应用程序的 Dockerfile,请使用它。

FROM ubuntu
MAINTAINER Josphat Mutai <[email >

RUN apt update
RUN apt install nginx -y
RUN echo "Hello World from Podman" > /var/www/html/index.html

EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

使用 podman build 命令构建容器镜像。

podman build -t nginx:latest .

这将下载 Ubuntu 基础镜像,安装 nginx 包,创建简单的 hello world 网页,并将服务运行的端口设置为 80。

....
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Setting up nginx (1.18.0-6ubuntu14.4) ...
Processing triggers for libc-bin (2.35-0ubuntu3.6) ...
--> 10af6f97e841
STEP 5/7: RUN echo "Hello World from Podman" > /var/www/html/index.html
--> 5f7aff2e1220
STEP 6/7: EXPOSE 80
--> b506f58bddca
STEP 7/7: CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
COMMIT nginx:latest
--> 4bf25c100a11
Successfully tagged localhost/nginx:latest
4bf25c100a116551b0d727e827d560357f6a5edc15265e2fb7805f16677e2ecc

构建后,通过列出可用的容器映像进行确认。

$ podman images
REPOSITORY                TAG         IMAGE ID      CREATED         SIZE
localhost/nginx           latest      4bf25c100a11  40 seconds ago  188 MB
docker.io/library/ubuntu  latest      7af9ba4f0a47  10 days ago     80.4 MB

3 – 在容器中运行容器化应用程序

我们有一个容器映像,可用于创建应用程序的运行实例 - 这是一个容器。您可以使用 podman run 命令创建容器。

podman run -d -p 8080:80 --name nginx  localhost/nginx

-d 标志将指示 podman 在后台运行容器并分离,-p 8080 将服务绑定在本地主机端口号 8080 上。容器将有一个名称nginx

列出系统中正在运行的 Podman 容器。

$ podman ps
CONTAINER ID  IMAGE                   COMMAND               CREATED        STATUS        PORTS                 NAMES
40c59fdad9ae  localhost/nginx:latest  /usr/sbin/nginx -...  3 seconds ago  Up 3 seconds  0.0.0.0:8080->80/tcp  nginx

通过服务器IP端口8080访问应用程序的网页。

curl 命令还可用于通过 CLI 测试应用程序功能。

$ curl http://192.168.1.201:8080/
Hello World from Podman

4 – 在 Podman 容器中安装外部存储

如果删除容器,则其中存储的所有数据都会丢失。为了持久保存数据,需要外部存储。我们可以看看一些可用的选项。

1.使用本地目录

例如,我们在 /data 下创建一个目录

mkdir -p ~/data/container
echo "Test file for container data persistence"|tee ~/data/container/test.txt

要将目录挂载到容器中,请运行:

$ podman run -it -v ~/data/container:/mnt ubuntu /bin/bash
root@ebd6efbb01bf:/# cat  /mnt/test.txt
Test file for container data persistence

2. 使用 Podman 卷

Podman 卷将数据存储在 /var/lib/containers/storage/volumes/ 目录中。让我们创建一个测试卷来测试这一点。

podman volume create testvolume

您可以检查创建的卷以查看其安装点。

jkmutai@ubuntu-2404-server:~$ podman volume ls
DRIVER      VOLUME NAME
local       testvolume

jkmutai@ubuntu-2404-server:~$ podman volume inspect testvolume
[
     {
          "Name": "testvolume",
          "Driver": "local",
          "Mountpoint": "/home/jkmutai/.local/share/containers/storage/volumes/testvolume/_data",
          "CreatedAt": "2024-04-21T13:13:47.175944787Z",
          "Labels": {},
          "Scope": "local",
          "Options": {},
          "MountCount": 0,
          "NeedsCopyUp": true,
          "NeedsChown": true,
          "LockNumber": 3
     }
]

要安装卷,请使用以下命令。

$ podman run -it -v testvolume:/mnt ubuntu /bin/bash

通过列出容器中的安装点进行验证。

root@8bf46bd77811:/# df -hT
Filesystem                        Type     Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4      15G  5.7G  8.3G  41% /mnt
tmpfs                             tmpfs    392M  184K  392M   1% /etc/hosts
shm                               tmpfs     63M     0   63M   0% /dev/shm
overlay                           overlay   15G  5.7G  8.3G  41% /
tmpfs                             tmpfs     64M     0   64M   0% /dev

要删除卷,请运行:

podman volume rm testvolume

3.NFS文件系统

创建包含 NFS 访问信息的卷。

podman volume create \
--opt type=nfs4 \
--opt o=rw \
--opt device=192.168.1.22:/nfsshare nfsvolume 

在哪里;

  • 192.168.1.22是您的 NFS 服务器的 IP 地址
  • /nfsshare 是 NFS 共享上的导出路径 - NFS 共享。

现在,像任何其他卷一样将该卷安装在容器中。

 podman run -it -v nfsvolume:/nfsshare ubuntu

5 – 如何在 Podman 中运行 pod

创建一个 pod,其服务将在端口 8085

podman pod create -p 8085:80 -n mypod

列出已创建的 Pod。

$ podman pod ls
POD ID        NAME        STATUS      CREATED        INFRA ID      # OF CONTAINERS
fd73821c2dbb  mypod       Created     5 seconds ago  aaacb992072e  1

然后,您可以在 pod 内创建一个容器。

podman run -dt --pod mypod localhost/nginx

查看正在运行的容器

$ podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED             STATUS         PORTS                 NAMES
aaacb992072e  localhost/podman-pause:4.9.3-0                        About a minute ago  Up 19 seconds  0.0.0.0:8085->80/tcp  fd73821c2dbb-infra
e3d2331926fc  localhost/nginx:latest          /usr/sbin/nginx -...  19 seconds ago      Up 19 seconds  0.0.0.0:8085->80/tcp  heuristic_tu

测试服务。

$ curl localhost:8085
Hello World from Podman

我们创建多个容器,例如运行 Nginx 和 MySQL,如下所示。

podman run -dt --pod new:mypod2 -p 8086:80 -p 3306:3306 localhost/nginx
podman run -dt --pod mypod2 -e MYSQL_ROOT_PASSWORD=DBPassword docker.io/library/mariadb

列出容器

$ podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED             STATUS             PORTS                                         NAMES
aaacb992072e  localhost/podman-pause:4.9.3-0                          7 minutes ago       Up 6 minutes       0.0.0.0:8085->80/tcp                          fd73821c2dbb-infra
e3d2331926fc  localhost/nginx:latest            /usr/sbin/nginx -...  6 minutes ago       Up 6 minutes       0.0.0.0:8085->80/tcp                          heuristic_tu
54c1f7f605af  localhost/podman-pause:4.9.3-0                          About a minute ago  Up About a minute  0.0.0.0:3306->3306/tcp, 0.0.0.0:8086->80/tcp  1f3c516682fc-infra
38aec09c76dc  localhost/nginx:latest            /usr/sbin/nginx -...  About a minute ago  Up About a minute  0.0.0.0:3306->3306/tcp, 0.0.0.0:8086->80/tcp  competent_easley
543ebb2a4874  docker.io/library/mariadb:latest  mariadbd              26 seconds ago      Up 26 seconds      0.0.0.0:3306->3306/tcp, 0.0.0.0:8086->80/tcp  lucid_nash

测试可用性。

$ curl localhost:8086
Hello World from Podman

$ mysql -u root -p'DBPassword' -h 192.168.1.201 -e "show variables like 'hostname';"
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| hostname      | mypod2 |
+---------------+--------+

6 – 创建 Podman 网络

要创建具有子网 172.20.50.0/24 的新网络,请使用:

podman network create --subnet 172.20.50.0/24 network50

将其连接到容器上。

podman run --network network50 ubuntu /bin/bash

您可以将网络连接到正在运行的容器

 podman network connect <networkname> <container>

要断开连接,请使用:

 podman network disconnect <networkname> <container>

检查容器中的路由

 podman exec <container> /bin/bash -c "apt update; apt -y install iproute2; ip route"
podman exec <container> ip route

要完全删除网络,请使用:

podman network ls
podman network rm <networkname>
podman network rm -f <networkname>

更多 Podman 实际使用示例请参考 Podman 文档。


站心网

您是否开始了学习和掌握容器化技术的旅程?您在研究“最好的容器管理引擎”时是否偶然发现了Podman? Podma..

为您推荐

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

如何让AI写出Google认可的文章?

让 AI 写出 Google 认可的文章,核心在于满足 Google 的搜索排名算法要求。这些要求通常围绕以下几个关键点展开:内容质量、用户体验 和 SEO 优化。以下是详细指导:一、内容质量确保文章原创且有价值避免抄袭:Goog..

最新CentOS7安装搭建shadowsocks服务端+客户端使用图文教程

使用的CentOS版本是7.9,其他版本也可以。超级推荐的是搭建shadowsocks服务端,安装配置都很简单,几分钟就搞定,客户端支持PC移动端,下面是安装shadowsocks的过程,只要复制粘贴命令就行了,文件夹路径都不需要改..

如何从.NET Framework迁移到.NET Core或.NET 6/7?

从 .NET Framework 迁移到 .NET Core 或 .NET 6/7 是一个提升性能和跨平台能力的关键过程。以下是迁移的主要步骤和注意事项:迁移步骤1. 评估当前项目依赖项检查:确保所有第三方库和NuGet包都有与 .NET Core/.NET 6..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

sourcetree安装跳过注册方法

SourceTree下载提取码: ni9m 需翻墙或者破解注册当前只有Win的版本,Mac自行百度很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作。然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者..

chrome 开发者工具如何查看元素:hover时的样式

在 Chrome 开发者工具中查看元素的 :hover 样式,可以通过以下步骤实现:打开开发者工具:右键点击页面中的元素,然后选择“检查(Inspect)”或按下 F12 或 Ctrl + Shift + I (Windows) / Cmd + Option +..

如何防止web应用DOS攻击?

防止web应用DOS攻击的最好的方法是什么? 如何防止web应用DOS攻击? 与所有的拒绝服务(DOS)攻击相关的一件事是他们都不可能避免。最好的方法是把重点放在减少影响DOS攻击的方法上。如果你有一个网络,黑客想要玩一玩..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

jwt是什么?.NET Core API如何使用JwtBearer验证

JWT是JSON Web Token的缩写,是一种开放标准(RFC 7519),用于在网络上以安全和可靠的方式传输信息。它是一种被广泛使用的跨域身份验证解决方案,可以将用户信息、访问权限等加密后存储在Token中,然后通过网络传输..

CentOS7部署发布.NET Core网站Ngnix安装配置图文教程

Linux服务器部署.NET Core网站运行速度更快,最近打算把原来windows server上的网站迁到linux的云服务器上。 顺便记录一下CentOS7安装.NET运行环境,安装和配置Ngnix的过程。首先安装.NET运行时sudorpm-Uvhhttps://p..

什么是微服务架构?它与单体应用程序架构有什么区别?如何在.NET中实现微服务架构?

微服务架构是一种软件架构风格,通过将应用程序拆分为一组小型、自治的服务来构建应用程序。每个服务都专注于解决特定的业务功能,并通过轻量级的通信机制进行交互。这些服务可以独立开发、部署和扩展,可以使用不同..

winform如何隐藏边框和标题栏

在WinForms中,可以通过以下步骤来隐藏窗体的边框和标题栏:打开WinForms应用程序的窗体设计器。选择窗体控件,然后在属性窗口中找到FormBorderStyle属性。将FormBorderStyle属性设置为None,以指示窗体不显示边框。..

IIS使用Certify安装Let's Encrypt免费SSL证书

域名疑似被流量劫持,不仅被腾讯网址安全中心检测成危险网站,还间歇性出现访问域名被302重定向到Localhost。于是决定响应百度站长平台的号召,进行HTTPS改造。不用担心HTTPS后的SEO问题,百度站长平台官方已经表态..

程序员如何量化炒股?原理是什么?

作为程序员,可以运用编程技能和量化分析来帮助量化炒股。量化炒股有哪些步骤和方法?收集数据:需要收集有关股票市场的数据。可以从各种来源获取这些数据,如Yahoo财经、谷歌财经、股票交易所等。可以使用Python等..

如何让Google谷歌搜索引擎找到并收录网站

Google谷歌会使用大量计算机来抓取网络上数十亿的页面, 这个名为 Googlebot 的抓取工具基本上从以前抓取生成的网页 URL 列表开始,然后使用 Google Search Console 中提供的站点地图数据扩充这些页面。 在抓取过程..

如何把网站提交到Google谷歌搜索引擎google search console收录

发布新的网站后,它并不会立即被搜索引擎收录。为了让网站出现在搜索结果中,Google 需要“抓取”您的内容并“编制索引”。 这会在数天或数周内自动发生,但如果您是网站所有者,则可以在Google search console手动..

Kubernetes(k8s) Linux安装和配置

什么是Kubernetes(k8s)?Kubernetes(通常称为"k8s")是一种用于自动部署、扩展和管理容器化应用程序的开源平台。它提供了一个容器编排和管理系统,可以自动化应用程序的部署、管理和缩放,并确保它们的高可用性。在..

百度文心一言邀请码如何获得?

3月16日下午,百度于北京总部发布了新一代大语言模型、生成式AI产品文心一言。首批用户即可通过邀请测试码,在文心一言官网体验产品,后续将陆续开放给更多用户。邀请码申请方式请往下看。百度文心官网地址:https://..

发表回复

返回顶部