podman

容器软件组:一组软件

组名:container-tools

[root@pc2 ~]# yum -y module install container-tools

容器相关的所有软件

podman会赋予容器和运行容器的虚拟机IP

使用容器时需要将selinux设置成disabled

podman

安装容器软件:podman

[root@pc2 ~]# yum -y install podman
[root@pc2 ~]# rpm -q podman
podman-4.0.2-6.module+el8.6.0+785+d1251653.x86_64
[root@pc2 ~]# 

Linux容器管理

镜像、仓库

什么是镜像

镜像是启动容器的核心

在podman中容器是基于镜像启动的

容器使用镜像启动

镜像是怎么来的

镜像可以从官方镜像仓库下载,也可以自己制作

官方镜像仓库

docker.io

quay.io

查看本机镜像

podman images

镜像的名称和标签

指定镜像的方法

每一个镜像都对应唯一的镜像 id

镜像名称 + 标签 = 唯一

每一个镜像都有标签,如果没写就是默认标签 latest

我们在调用镜像的时候,如果没有指定标签也是 latest

获取镜像

查找镜像
[root@pc2 ~]# podman search 关键字
podman search httpd
下载镜像
[root@pc2 ~]# podman pull 镜像名称:标签
podman pull localhost/myos:latest
导入镜像
[root@pc2 ~]# podman load -i 备份文件.tar.gz

[root@pc2 ~]# podman load -i /root/img.tar.xz     #导入镜像
Getting image source signatures
Copying blob 7039aed436b9 done  
Copying blob 879054335f94 done  
Copying config 608968fe77 done  
Writing manifest to image destination
Storing signatures
Getting image source signatures
Copying blob 879054335f94 skipped: already exists  
Copying config 8cf70153e0 done  
Writing manifest to image destination
Storing signatures
Loaded image(s): localhost/httpd:latest,localhost/rockylinux:8.6
[root@pc2 ~]# podman images 
REPOSITORY            TAG         IMAGE ID      CREATED        SIZE
localhost/httpd       latest      608968fe7738  9 months ago   222 MB
localhost/rockylinux  8.6         8cf70153e062  16 months ago  202 MB
[root@pc2 ~]# 

运行容器

run 命令

podman run 命令

podman run -选项 镜像名称:镜像标签 启动命令

查看 run 的选项

podman help run

man podman-run

run = 创建 + 启动 + 进入

命令的参数

podman run 命令的选项

-i        交互式

-t        终端

-d        后台运行

--name        容器名字

启动容器并进入容器

podman run -it httpd:latest /bin/bash 

运行容器

使用podman命令启动容器

可以通过提示符判定自己是否进入容器了

podman命令行

podman镜像管理

镜像管理命令

查看镜像

[root@pc2 ~]# podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE

查找镜像

[root@pc2 ~]# podman search 关键字

删除镜像

#按照镜像的 名称+标签 删除镜像
[root@pc2 ~]# podman images
REPOSITORY            TAG         IMAGE ID      CREATED        SIZE
localhost/httpd       latest      608968fe7738  9 months ago   222 MB
localhost/rockylinux  8.6         8cf70153e062  16 months ago  202 MB
[root@pc2 ~]# podman rmi localhost/rockylinux:8.6 
Untagged: localhost/rockylinux:8.6
[root@pc2 ~]# podman images
REPOSITORY       TAG         IMAGE ID      CREATED       SIZE
localhost/httpd  latest      608968fe7738  9 months ago  222 MB

#按照镜像的 ID,删除镜像
[root@pc2 ~]# podman images 
REPOSITORY            TAG         IMAGE ID      CREATED        SIZE
localhost/httpd       latest      608968fe7738  9 months ago   222 MB
localhost/rockylinux  8.6         8cf70153e062  16 months ago  202 MB
[root@pc2 ~]# podman rmi 608968fe7738 
Untagged: localhost/httpd:latest
Deleted: 608968fe7738f5d640bc6c38d28a6d3955f3d1e2c9e28dbd39958847d24253f9
[root@pc2 ~]# podman images
REPOSITORY            TAG         IMAGE ID      CREATED        SIZE
localhost/rockylinux  8.6         8cf70153e062  16 months ago  202 MB
[root@pc2 ~]# 

podman容器管理

容器管理命令

启动容器

podman run –选项 镜像名称:镜像标签 启动命令

查看容器

podman ps [ -a 所有容器id ] [ -q 只显示容器 id ]

删除容器

podman rm 容器id
-f 强制

启动、停止、重启

podman start|stop|restart 容器id

进入容器

podman exec -it 容器id 启动命令

管理容器进阶

对外发布容器服务

怎么访问podman服务

默认容器可以访问外网

但外部网络的主机不可以访问容器内的资源

容器每次创建IP地址都会改变

解决这个问题的最佳方法是端口绑定

容器可以与宿主机的端口进行绑定

从而把宿主机变成对应的服务,不用关心容器的IP地址

发布podman服务

使用 -p 参数把容器端口和宿主机端口绑定

同一宿主机端口只能绑定一个容器服务

-p [可选IP]:宿主机端口:容器端口

例如:把宿主机变成 apache

podman run -d -p 80:80 httpd:latest

例如:把宿主机变成 nginx

podman run -d -p 80:80 nginx:8.6

端口绑定

[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                   COMMAND               CREATED         STATUS             PORTS       NAMES
efb2c993fa57  localhost/httpd:latest  /usr/sbin/httpd -...  18 minutes ago  Up 18 minutes ago              myweb
[root@pc2 ~]# podman rm -f myweb 
efb2c993fa57d5bde9dc318892196b1a09fdea05254cba5da871e96cfe099112
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@pc2 ~]# 
[root@pc2 ~]# podman images
REPOSITORY            TAG         IMAGE ID      CREATED            SIZE
localhost/myos        1.0         eb23d4bbb032  About an hour ago  222 MB
localhost/httpd       latest      608968fe7738  9 months ago       222 MB
localhost/rockylinux  8.6         8cf70153e062  16 months ago      202 MB
[root@pc2 ~]# podman run --name myweb -p 80:80 -itd localhost/httpd:latest 
19a7ff90b7ea2799a11209ac942fb1bc26772c6428c830ec993ed56fc4701a47
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                   COMMAND               CREATED        STATUS            PORTS               NAMES
19a7ff90b7ea  localhost/httpd:latest  /usr/sbin/httpd -...  4 seconds ago  Up 4 seconds ago  0.0.0.0:80->80/tcp  myweb
[root@pc2 ~]# 
[root@pc2 ~]# podman exec -it  myweb /bin/bash
[root@19a7ff90b7ea html]# exit   
exit
[root@pc2 ~]# podman inspect myweb| grep -i ipaddr
               "IPAddress": "10.88.0.10",
                         "IPAddress": "10.88.0.10",
[root@pc2 ~]# rpm -q httpd
未安装软件包 httpd 
[root@pc2 ~]# curl 192.168.88.2
Welcome to The Apache.
[root@pc2 ~]# 

容器共享卷

卷的用途

podman容器不适合保存任何数据

数据文件与配置文件频繁更改

修改多个容器中的数据非常困难

多容器之间有数据共享、同步需求

重要数据在容器内不方便管理易丢失

解决这些问题请使用主机卷映射功能

主机卷的映射

podman可以映射宿主机文件或目录到容器中

---目标对象不存在就自动创建

---目标对象存在就直接覆盖掉

---多个容器可以映射同一个目标对象来达到数据共享的目的

---目标对象指的是容器中的文件或目录

启动容器时,使用 -v 映射参数

podman run -d -v 宿主机目录:容器内对象 镜像名称:标签

卷映射案例

在宿主机上修改httpd网站的主页文件,把网站的主页文件,通过卷映射到容器内

[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                   COMMAND               CREATED         STATUS             PORTS               NAMES
19a7ff90b7ea  localhost/httpd:latest  /usr/sbin/httpd -...  16 minutes ago  Up 16 minutes ago  0.0.0.0:80->80/tcp  myweb
[root@pc2 ~]# podman rm -f myweb 
19a7ff90b7ea2799a11209ac942fb1bc26772c6428c830ec993ed56fc4701a47
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@pc2 ~]# mkdir /webroot
[root@pc2 ~]# echo wo shi webroot > /webroot/index.html
[root@pc2 ~]# cat /webroot/index.html 
wo shi webroot
[root@pc2 ~]# podman run --name myweb -itd -p 80:80 -v /webroot:/var/www/html localhost/httpd:latest 
6ed132cbe7f18643a434a76a6f46e1ab866aa56590d1d83880135da73c70e043
[root@pc2 ~]# podman exec -it myweb /bin/bash
[root@6ed132cbe7f1 html]# cat index.html 
wo shi webroot
[root@6ed132cbe7f1 html]# exit
exit
[root@pc2 ~]# curl 192.168.88.2
wo shi webroot
[root@pc2 ~]# 

管理系统服务

systemd

一个更高级的系统&服务管理器

---开机服务并行启动,各系统服务间的精确依赖

---服务目录:/usr/lib/systemd/system/

---主要管理工具:systemctl

管理员管理容器服务

管理员服务文件默认路径

---/usr/lib/systemd/system/

生成服务启动配置文件

---  --files 生成文件类型

---  podman generate systemd --name 容器名 --files

重新加载服务启动配置文件

---  systemctl daemon-reload

在容器内制作镜像

构建FTP服务,提供光盘内容

[root@pc2 ~]# yum -y install vsftpd
root@pc2 ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES   #开启匿名用户访问功能
[root@pc2 ~]# systemctl restart vsftpd
[root@pc2 ~]# systemctl enable vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@pc2 ~]# mkdir /var/ftp/dvd
[root@pc2 ~]# mount /dev/cdrom  /var/ftp/dvd
mount: /var/ftp/dvd: WARNING: device write-protected, mounted read-only.
[root@pc2 ~]# ls /var/ftp/dvd/
AppStream  BaseOS  EFI  images  isolinux  LICENSE  media.repo  TRANS.TBL
[root@pc2~]#
[root@pc2 ~]# curl ftp://10.88.0.1/dvd/      #必须有/结尾
dr-xr-xr-x    4 0        0            2048 May 15  2022 AppStream
dr-xr-xr-x    4 0        0            2048 May 15  2022 BaseOS
dr-xr-xr-x    3 0        0            2048 May 15  2022 EFI
-r--r--r--    1 0        0            2204 Mar 30  2022 LICENSE
-r--r--r--    1 0        0             883 May 15  2022 TRANS.TBL
dr-xr-xr-x    3 0        0            2048 May 15  2022 images
dr-xr-xr-x    2 0        0            2048 May 15  2022 isolinux
-r--r--r--    1 0        0              86 May 15  2022 media.repo
[root@pc2 ~]#
[root@pc2 ~]# ifconfig | head -2
cni-podman0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.88.0.1  netmask 255.255.0.0  broadcast 10.88.255.255
[root@pc2 ~]# podman run -itd --name haha localhost/rockylinux:8.6 /bin/bash
523d8b5e0a0856b3b56c445d51d928c42c4dd516fa08d8daed83fab0404b0b35
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                     COMMAND     CREATED        STATUS            PORTS       NAMES
9074081dd922  localhost/rockylinux:8.6  /bin/bash   3 hours ago    Up 3 hours ago                abc01
523d8b5e0a08  localhost/rockylinux:8.6  /bin/bash   5 seconds ago  Up 5 seconds ago              haha
[root@pc2 ~]# podman exec -it haha /bin/bash
[root@523d8b5e0a08 /]# ls /etc/yum.repos.d/
Rocky-AppStream.repo         Rocky-NFV.repo
Rocky-BaseOS.repo            Rocky-Plus.repo
Rocky-Debuginfo.repo         Rocky-PowerTools.repo
Rocky-Devel.repo             Rocky-RT.repo
Rocky-Extras.repo            Rocky-ResilientStorage.repo
Rocky-HighAvailability.repo  Rocky-Sources.repo
Rocky-Media.repo
[root@523d8b5e0a08 /]# rm -rf /etc/yum.repos.d/*
[root@523d8b5e0a08 /]# ls /etc/yum.repos.d/
[root@523d8b5e0a08 /]# exit
exit
[root@pc2 ~]# ifconfig | head -2
cni-podman0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.1  netmask 255.255.0.0  broadcast 10.88.255.255
[root@pc2 ~]# podman exec -it haha /bin/bash
[root@523d8b5e0a08 /]# ping -c 2 10.88.0.1
PING 10.88.0.1 (10.88.0.1) 56(84) bytes of data.
64 bytes from 10.88.0.1: icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from 10.88.0.1: icmp_seq=2 ttl=64 time=0.050 ms

--- 10.88.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1056ms
rtt min/avg/max/mdev = 0.050/0.062/0.075/0.014 ms
[root@523d8b5e0a08 /]# vi /etc/yum.repos.d/dvd.repo
[app]
baseurl=ftp://10.88.0.1/dvd/AppStream
gpgcheck=0
[app]
baseurl=ftp://10.88.0.1/dvd/BaseOS
gpgcheck=0
[root@523d8b5e0a08 /]# yum -y install net-tools
[root@523d8b5e0a08 /]# ifconfig | head -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.5  netmask 255.255.0.0  broadcast 10.88.255.255
[root@523d8b5e0a08 /]# exit
exit
[root@pc2 ~]# podman inspect haha | grep -i ipadd
               "IPAddress": "10.88.0.5",
                         "IPAddress": "10.88.0.5",
[root@pc2 ~]# 

查看容器详细信息:过滤查看容器IP地址

---podman inspect 容器

cni-podman0 这个IP地址是固定不变的

容器的IP地址是变化的(不固定)

将容器封装成镜像

[root@pc2 ~]# podman stop haha 
haha
[root@pc2 ~]# podman commit haha myos:1.0    #将容器封装成镜像
Getting image source signatures
Copying blob 879054335f94 skipped: already exists  
Copying blob 7da1886ad5fb done  
Copying config eb23d4bbb0 done  
Writing manifest to image destination
Storing signatures
eb23d4bbb032f0a18ab59225c1123e1ee53fa7b97b22625a0daff6088a2e4063
[root@pc2 ~]# podman images 
REPOSITORY            TAG         IMAGE ID      CREATED         SIZE
localhost/myos        1.0         eb23d4bbb032  11 seconds ago  222 MB
localhost/httpd       latest      608968fe7738  9 months ago    222 MB
localhost/rockylinux  8.6         8cf70153e062  16 months ago   202 MB
[root@pc2 ~]# podman run --name test -it localhost/myos:1.0 /bin/bash
[root@dda43fe8a8c6 /]# ifconfig | head -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.88.0.7  netmask 255.255.0.0  broadcast 10.88.255.255
[root@dda43fe8a8c6 /]# exit
exit

端口绑定

[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                   COMMAND               CREATED         STATUS             PORTS       NAMES
efb2c993fa57  localhost/httpd:latest  /usr/sbin/httpd -...  18 minutes ago  Up 18 minutes ago              myweb
[root@pc2 ~]# podman rm -f myweb 
efb2c993fa57d5bde9dc318892196b1a09fdea05254cba5da871e96cfe099112
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@pc2 ~]# 
[root@pc2 ~]# podman images
REPOSITORY            TAG         IMAGE ID      CREATED            SIZE
localhost/myos        1.0         eb23d4bbb032  About an hour ago  222 MB
localhost/httpd       latest      608968fe7738  9 months ago       222 MB
localhost/rockylinux  8.6         8cf70153e062  16 months ago      202 MB
[root@pc2 ~]# podman run --name myweb -p 80:80 -itd localhost/httpd:latest 
19a7ff90b7ea2799a11209ac942fb1bc26772c6428c830ec993ed56fc4701a47
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                   COMMAND               CREATED        STATUS            PORTS               NAMES
19a7ff90b7ea  localhost/httpd:latest  /usr/sbin/httpd -...  4 seconds ago  Up 4 seconds ago  0.0.0.0:80->80/tcp  myweb
[root@pc2 ~]# 
[root@pc2 ~]# podman exec -it  myweb /bin/bash
[root@19a7ff90b7ea html]# exit   
exit
[root@pc2 ~]# podman inspect myweb| grep -i ipaddr
               "IPAddress": "10.88.0.10",
                         "IPAddress": "10.88.0.10",
[root@pc2 ~]# rpm -q httpd
未安装软件包 httpd 
[root@pc2 ~]# curl 192.168.88.2
Welcome to The Apache.
[root@pc2 ~]# 

目录绑定(容器共享卷)

podman容器不适合保存任何数据

podman可以映射宿主主机文件或目录到容器中

---目标对象不存在就自动创建

---目标对象存在就直接覆盖掉

---多个容器可以映射同一个目标对象来达到数据共享的目的

[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE                   COMMAND               CREATED         STATUS             PORTS               NAMES
19a7ff90b7ea  localhost/httpd:latest  /usr/sbin/httpd -...  16 minutes ago  Up 16 minutes ago  0.0.0.0:80->80/tcp  myweb
[root@pc2 ~]# podman rm -f myweb 
19a7ff90b7ea2799a11209ac942fb1bc26772c6428c830ec993ed56fc4701a47
[root@pc2 ~]# podman ps -a
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
[root@pc2 ~]# mkdir /webroot
[root@pc2 ~]# echo wo shi webroot > /webroot/index.html
[root@pc2 ~]# cat /webroot/index.html 
wo shi webroot
[root@pc2 ~]# podman run --name myweb -itd -p 80:80 -v /webroot:/var/www/html localhost/httpd:latest 
6ed132cbe7f18643a434a76a6f46e1ab866aa56590d1d83880135da73c70e043
[root@pc2 ~]# podman exec -it myweb /bin/bash
[root@6ed132cbe7f1 html]# cat index.html 
wo shi webroot
[root@6ed132cbe7f1 html]# exit
exit
[root@pc2 ~]# curl 192.168.88.2
wo shi webroot
[root@pc2 ~]# 

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值