PodMan笔记教程LinuxServer虚拟化

印迹发布于:2021-9-29 1037

安装

什么是Podman?Podman是无守护程序容器引擎,用于在Linux系统上开发,管理和运行OCI容器。容器可以以root用户或无根模式运行。简而言之:`alias docker = podman`。

Podman(Pod Manager)是一个功能齐全的容器引擎,它是一个简单的无守护工具。 Podman提供了一个类似Docker-CLI的命令行,可以简化从其他容器引擎的转换,并允许管理pod,容器和图像。

Libpod 是一个创建容器 pod 的工具和库,它包含 pod 管理工具 Podman,Podman 管理 pod、容器、容器镜像和容器卷。

为什么说比Docker好?

因为Docker总是会遇到一个反复出现且令人头痛的问题:“Docker 守护程序在多个核心上占用 100% CPU 资源,并导致主机无法正常使用。” 

而Podman不需要守护程序,也不需要访问 root 权限组。Podman 能够替代大部分子命令(run, push, pull 等等)。由于不需要守护程序,而且会利用用户命名空间模拟容器中的 root,所以 Podman 不需要接入具有 root 权限的 socket——这就解决了 Docker 长期以来一直面临的老大难问题。

2、开始搭建

我们都需要哪些依赖才能正常使用Podman?

Podman  —— Podman 能够替代大部分子命令(run, push, pull 等等)。由于不需要守护程序,而且会利用用户命名空间模拟容器中的 root,所以 Podman 不需要接入具有 root 权限的 socket,这就解决了 Docker 长期以来一直面临的老大难问题。

Buildah —— Buildah 负责构建 OCI 镜像。令人困惑的是,podman build 也能够用于构建 Docker 镜像,但其速度太慢而且默认使用 vfs 存储驱动的设置会占用大量磁盘空间。相比之下,buildah bud(「利用 Dockerfile 构建」)对我来说速度更快,而且能够自动覆盖存储驱动。

Skopeo —— Skopeo 工具允许我们对 Docker 与 OCI 镜像执行 psuh、pull 以及 copy 等操作。

podman安装使用

使用centos官方yum源进行安装

$ yum install -y podman
$ podman -v
$ podman version 3.3.11

配置镜像加速

这里使用阿里云镜像加速器

cp /etc/containers/registries.conf{,.bak}
cat > /etc/containers/registries.conf << EOF
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "uyah70su.mirror.aliyuncs.com"
EOF

拉取镜像

$ podman pull centos
Trying to pull docker.io/library/centos...Getting image source signatures
Copying blob 8ba884070f61 done
Copying config 9f38484d22 done
Writing manifest to image destination
Storing signatures
9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1

运行容器

$ podman images
REPOSITORY                 TAG      IMAGE ID       CREATED        SIZE
docker.io/library/centos   latest   9f38484d220f   4 months ago   209 MB
$ podman run -itd --name test centos sleep 3600
1fc033bb22096008049709d70869d54e3fa9e4d72c6d098f4b5601fd6747a9b9
$ podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS            PORTS  NAMES
1fc033bb2209  docker.io/library/centos:latest  sleep 3600  7 seconds ago  Up 6 seconds ago         test

配置为别名

$ echo "alias docker=podman" >> .bashrc
$ source .bashrc
$ docker ps -a
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS            PORTS  NAMES
1fc033bb2209  docker.io/library/centos:latest  sleep 3600  7 minutes ago  Up 7 minutes ago         test

Podman 外网

如果以普通用户运行容器,此容器默认无法被外网访问,为了避免不必要的麻烦,建议以root用户创建并运行容器。

另外,run 容器的时候,请勿使用 -p 0.0.0.0:9090:80 这种端口映射方式,它会导致容器无法被外网访问。如果采用正常的端口映射方式 -p :9090:80,就没有任何问题。

#无法被外网访问
sudo podman run --name phpmyadmin  --restart=always  -itd  -p 0.0.0.0:9090:80  -e PMA_HOST=10.88.0.1  phpmyadmin/phpmyadmin
#可以被外网访问
sudo podman run --name phpmyadmin  --restart=always  -itd  -p 9090:80  -e PMA_HOST=10.88.0.1  phpmyadmin/phpmyadmin
Debian10安装podman
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/Release.key | apt-key add -
apt-get update
apt-get -y -t buster-backports install libseccomp2
apt-get -y install podman
安装Nginx

然后我在下载镜像的时候指定源地址加速常用镜像的下载

$ podman pull daocloud.io/library/nginx

启动Nginx容器

$ podman run --name nginx -p 8080:80 -d nginx
简介

介绍一下再linux系统下的安装:

1、podman 终端执行,检测是否有此命令

2、如果没有,执行:

yum install podman

3、查看podman容器运行状态列表:

podman ps -a  (加上a会显示pause)

4、查看podman镜像列表:

podman images

5、拉取一个镜像

podman pull centos

6、运行一个容器:

podman run -i -d -p 80:80 -v /data/:/data/ --privileged --name mytest centos:7.3.1611 /usr/sbin/init
-i: 允许你对容器进行交互
-d: 后台运行 不会进入容器
-p 端口号,左侧服务器指向:右侧容器内端口号,服务器端口不能重复,如果多个容器多个应用,需要nginx反响代理
-v 文件存储,左侧为映射到本地:右侧为容器内文件夹,防止镜像过大,迁移困难
--privileged: 和最后的参数/usr/sbin/init共同使用 才会有更高的权限控制
--name: 自定义容器启动的名称
centos:7.3.1611: 镜像名称 如果本地没有 会从网络上下载
也可以加入其它的参数 如-m 8G --cpus="4"
-m 8G :内存分配为8G
--cpus="4": 分配cpu核心总数为4

常用1:

mkdir /data
podman run -i -d -p 20:20 -p 21:21 -p 8080:8080 -p 9090:9090 -p 9091:9091 -p 80:80 -p 81:81 -p 3306:3306 -p 443:443 -p 8888:8888 -p 888:888 -v /data/:/data/ --privileged --name vpos centos /usr/sbin/init

常用2:(--cpu=2  //限制使用2个核心,-m 6G     //限制使用6G内存,--cpu-shares=2000,默认值1024,数字越高优先级越高。 )

podman run -i -d -p 20:20 -p 21:21 -p 8080:8080 -p 9090:9090 -p 9091:9091 -p 80:80 -p 81:81 -p 3306:3306 -p 443:443 -p 8888:8888 -p 888:888 -m 6G -v /data/:/data/ --cpus=2 --privileged --name baota centos:7 /usr/sbin/init

常用3(宝塔):

podman run -i -t -d --name baota -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 873:873 -p 8888:8888 -p 9000:9000 -p 9001:9001 --privileged=true -v /home/www:/www centos:7

7、进入容器:

podman exec -i -t 7f5d968e2cf2 /bin/bash
-i: 允许你对容器进行交互
-t: 在新容器内指定一个伪终端或终端
243c32535da7:容器id可以用podman ps -a查看 也可以用名称代替

8、容器如果是挺值得,开启命令

podman start mytest  (容器名称)

9、停止运行中的容器,

podman stop mytest  (容器名称)

10、修改运行的参数 直接是不能修改运行的参数的 所以启动前要想好加入什么样的参数 如果一定要修改 可以先提交出一个容器为一个镜像

podman commit A B

注释:A为容器名称 B为生成的镜像名称 然后重新执行第5步骤 注意如果容器过大这步会导致所有podman命令不能执行 不能进入其他容器 但容器内部运行正常 

建议没有其他人操作时这样处理 如果着急执行那就先导出容器 再导入 这个过程前期只会导致podman ps不能执行 最后Storing signatures的过程会和commit效果一样 但时间相较短 10几分钟左右 建议项目目录映射出来 这样容器不会过大

11.删除一个容器 

podman rm mytest

最后的参数为容器名称也可以容器id 加 -f 参数为强制执行 加-f之前一定要观察好正常不能删除报的是什么错

11.1删除所有容器:

podman rm  -f  $(podman ps -qa)

12.删除一个镜像 

podman rmi 7f5d968e2cf2

最后的参数为镜像id号 可以用podman images查看

12.1 删除所有镜像

podman rmi -f  $(podman images -qa)

13.导出一个压缩镜像 

podman save mytest | gzip > mytest.tar.gz

14.导入一个压缩镜像 

gunzip -c mytest.tar.gz | podman load

15.导出一个容器

podman export mytest > mytest.tar

压缩导出 

podman export mytest | gzip> mytest.tar.gz

16.导入一个容器

cat mytest.tar | podman import - mytest

备份,将当前容器制作为镜像

podman commit -p (容器ID) container-backup

导出镜像(导出至根据):

podman save -o ~/container-backup.tar container-backup
podman save b46b0aba406c | gzip>container.tar.gz

恢复本地备份至镜像

podman load -i ~/container-backup.tar
卸载podman
rpm -qa | grep podman
yum remove podman
安装Kangle

支持:centos

podman run -i -t -d --name xiaoyingkangle -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 3311:3311 -p 873:873 -p 3312:3312 -p 3313:3313 --privileged=true centos:7

安装命令:

wget http://github.itzmx.com/1265578519/kangle/master/ent/e.sh -O e.sh;sh e.sh /vhs/kangle


更多:Kangle

本帖有隐藏内容,请您登录后查看。

其它

容器备份相关资料

Docker笔记

Docker/Podman容器自动备份镜像文件脚本


http://www.virplus.com/thread-1423.htm
转载请注明:2021-9-29 于 VirPlus 发表

推荐阅读
最新回复 (2)
  • 印迹2021-11-29
    2
    Podman搜索无结果的解决方法
    # 配置podman国内镜像 /etc/containers/registries.conf
    unqualified-search-registries = ['docker.io', 'k8s.gcr.io', 'quay.io']
    [[registry]]
    prefix = "docker.io"
    location = "docker.mirrors.ustc.edu.cn"
    [[registry.mirror]]
    prefix = "docker.io"
    location = "reg-mirror.qiniu.com"
    [[registry.mirror]]
    prefix = "docker.io"
    location = "hub-mirror.c.163.com"
    [[registry]]
    prefix = "k8s.gcr.io"
    location = "registry.aliyuncs.com/google_containers"
    [[registry]]
    prefix = "quay.io"
    location = "quay-mirror.qiniu.com"


  • 印迹2021-11-29
    3
    Podman搭建Zabbix

    1、

    podman pod create --name zabbix -p 8080:8080 -p 10051:10051 -p 10052:10052 -p 3306:3306 -p 3000:3000

    2、

    podman run --pod=zabbix --name zabbix-mysql -t 
    -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="abcd1234" -e MYSQL_ROOT_PASSWORD="abcd1234" 
    -v /data/zabbix/mysql:/var/lib/mysql 
    --restart unless-stopped 
    -d mysql:latest 
    --character-set-server=utf8 --collation-server=utf8_bin --default-authentication-plugin=mysql_native_password

    3、

    podman run --pod=zabbix --name zabbix-server -t 
    -e DB_SERVER_HOST="127.0.0.1" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="abcd1234" -e MYSQL_ROOT_PASSWORD="abcd1234" 
    --restart unless-stopped 
    -d zabbix/zabbix-server-mysql:latest

    4、

    podman run --pod=zabbix --name zabbix-web -t 
    -e DB_SERVER_HOST="127.0.0.1" -e DB_SERVER_PORT=3306 -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="abcd1234" -e MYSQL_ROOT_PASSWORD="abcd1234" 
    -e ZBX_SERVER_HOST="127.0.0.1" -e ZBX_SERVER_PORT=10051 -e PHP_TZ="Asia/Shanghai" 
    --restart unless-stopped 
    -d zabbix/zabbix-web-nginx-mysql:latest

    5、

    podman run --pod=zabbix --name zabbix-agent 
    -e ZBX_SERVER_HOST="127.0.0.1,localhost" 
    --restart=always 
    -d zabbix/zabbix-agent:latest

    6、

    podman run --pod=zabbix --name zabbix-grafana 
    --restart unless-stopped 
    -d grafana/grafana

    7、

    grafana-cli plugins install alexanderzobnin-zabbix-app
    http://127.0.0.1:8080/api_jsonrpc.php  Admin/zabbix


( 登录 ) 后,可以发表评论!

返回