当前位置:   article > 正文

Docker 大势已去,Podman 万岁;再见Docker,是时候拥抱下一代容器工具了_docker大势已去

docker大势已去

1、podman介绍

在这里插入图片描述

Podman是一个开源项目,可在大多数Linux平台上使用并开源在GitHub上。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发,管理和运行Open Container Initiative(OCI)容器和容器镜像。Podman提供了一个与Docker兼容的命令行前端,它可以简单地作为Docker cli,简单地说你可以直接添加别名:alias docker = podman来使用podman。
在这里插入图片描述

Podman控制下的容器可以由root用户运行,也可以由非特权用户运行。Podman管理整个容器的生态系统,其包括pod,容器,容器镜像,和使用libpod library的容器卷。Podman专注于帮助您维护和修改OCI容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建,运行和维护从这些映像创建的容器。

2、podman部署

安装

[root@JLIN ~]# yum install -y podman
[root@JLIN ~]# podman version
Version:            1.4.4
RemoteAPI Version:  1
Go Version:         go1.10.3
OS/Arch:            linux/amd64

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

配置镜像加速(阿里云加速器)

// 把源文件备份一份再修改
[root@JLIN ~]# cp /etc/containers/registries.conf{,.bak}

[root@JLIN ~]# cat > /etc/containers/registries.conf << EOF
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "uyah70su.mirror.aliyuncs.com"
EOF

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

podman的常用命令类似于docker
拉取镜像

[root@JLIN ~]# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行容器

[root@JLIN ~]# podman images
REPOSITORY                 TAG      IMAGE ID       CREATED        SIZE
docker.io/library/centos   latest   9f38484d220f   4 months ago   209 MB
[root@JLIN ~]# podman run -itd --name test centos sleep 3600   //运行centos镜像并且设置休眠3600秒 这样才能保证正常运行
1fc033bb22096008049709d70869d54e3fa9e4d72c6d098f4b5601fd6747a9b9
[root@JLIN ~]# podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS            PORTS  NAMES
1fc033bb2209  docker.io/library/centos:latest  sleep 3600  7 seconds ago  Up 6 seconds 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

查看一个运行中的容器的日志文件

[root@JLIN ~]# podman logs --latest
  • 1

查看一个运行容器中的进程资源使用情况

[root@JLIN ~]# podman top httpd
USER       PID   PPID   %CPU    ELAPSED           TTY   TIME   COMMAND
root       1     0      0.000   2m50.646462258s   ?     0s     httpd -DFOREGROUND 
www-data   7     1      0.000   2m50.64668171s    ?     0s     httpd -DFOREGROUND 
www-data   8     1      0.000   2m50.64672122s    ?     0s     httpd -DFOREGROUND 
www-data   9     1      0.000   2m50.646755346s   ?     0s     httpd -DFOREGROUND 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

删除一个容器

[root@JLIN ~]# podman rm --latest   //删除最近在运行的容器
[root@JLIN ~]# podman ps -a
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES

//以上这些特性基本上都和 Docker 一样,Podman 除了兼容这些特性外,还支持了一些新的特性。
  • 1
  • 2
  • 3
  • 4
  • 5

迁移容器
Podman 支持将容器从一台机器迁移到另一台机器。
首先,在源机器上对容器设置检查点,并将容器打包到指定位置

[root@JLIN ~]# podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz
[root@JLIN ~]# scp /tmp/checkpoint.tar.gz <destination_system>:/tmp

//其次,在目标机器上使用源机器上传输过来的打包文件对容器进行恢复。
[root@JLIN ~]# podman container restore -i /tmp/checkpoint.tar.gz
  • 1
  • 2
  • 3
  • 4
  • 5

先关工具

Buildah Buildah专注于构建OCI镜像。 Buildah的命令复制了Dockerfile中的所有命令。可以使用Dockerfiles构建镜像,并且不需要任何root权限。 Buildah的最终目标是提供更低级别的coreutils界面来构建图像。Buildah也支持非Dockerfiles构建镜像,可以允许将其他脚本语言集成到构建过程中。 Buildah遵循一个简单的fork-exec模型,不以守护进程运行,但它基于golang中的综合API,可以存储到其他工具中。虽然Podman也可以用户构建Docker镜像,单构建速度较慢。

3、用户操作

在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置
cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使用cgroupV2启用了运行Podman的Linux发行版,则可能需要更改默认的OCI运行时。某些较旧的版本runc不适用于cgroupV2,必须切换到备用OCI运行时crun。

[root@JLIN ~]# yum  -y install crun

或用于通过改变用于在“默认OCI运行时”的值的所有的命令containers.conf在系统级或在任一文件的用户级别从runtime = "runc"到runtime = "crun"
  • 1
  • 2
  • 3

可以修改containers.conf文件runtime = "runc"到runtime = “crun”

安装slirp4netns和fuse-overlayfs
slirp4nets包为普通用户提供一种网络模式
在普通用户环境中使用Podman时,建议使用fuse-overlayfs而不是VFS文件系统

[root@JLIN ~]# yum -y install slirp4netns
[root@JLIN ~]# yum -y install fuse-overlayfs
  • 1
  • 2

配置storage.conf文件

将to driver下的选项[storage]改为"overlay"并将mount_program选项指向可执行文件[storage.options]的路径fuse-overlayfs:

[root@JLIN ~]#  vi /etc/containers/storage.conf
[storage]
  driver = "overlay"		#此处改为overlay

  (...)

[storage.options]

  (...)

  mount_program = "/usr/bin/fuse-overlayfs"		#取消注释
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

/ etc / subuid和/ etc / subgid配置
Podman要求运行它的用户在/ etc / subuid和/ etc / subgid文件中列出一系列UID,shadow-utils或newuid包提供这些文件

[root@JLIN ~]# yum -y install shadow-utils

//可以在/ etc / subuid和/ etc / subgid查看,每个用户的值必须唯一且没有任何重叠
[root@JLIN ~]# cat /etc/subuid
tt:100000:65536
  • 1
  • 2
  • 3
  • 4
  • 5

这个文件的格式是 USERNAME:UID:RANGE

  • 中/etc/passwd或输出中列出的用户名getpwent。
  • 为用户分配的初始 UID。
  • 为用户分配的 UID 范围的大小。
    该usermod程序可用于为用户分配 UID 和 GID,而不是直接更新文件。
[root@JLIN ~]# usermod --add-subuids 200000-201000 --add-subgids 200000-201000 tt
[root@JLIN ~]# grep tt /etc/subuid /etc/subgid
/etc/subuid:tt:100000:65536
/etc/subuid:tt:200000:1001
/etc/subgid:tt:100000:65536
/etc/subgid:tt:200000:1001
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

用户配置文件
根驻留在Podman配置文件/usr/share/containers与覆盖/etc/containers。在无根环境中,它们驻留在${XDG_CONFIG_HOME}/containers(通常~/.config/containers)中并由每个单独的用户拥有。

三个主要的配置文件是container.conf、storage.conf和registries.conf。用户可以根据需要修改这些文件。

容器配置文件
配置文件优先级:家目录>/etc/

Podman reads

/etc/share/containers/containers.conf
/etc/containers/containers.conf
$HOME/.config/containers/containers.conf
  • 1
  • 2
  • 3

普通用户是无法看见root用户的镜像的,并且每个用户的镜像只有自己可以看见,除了root用户

[root@JLIN ~]# podman images
REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
docker.io/library/httpd   latest   ea28e1b82f31   11 days ago   148 MB


[root@JLIN ~]# su - tt
[tt@localhost ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/904057
推荐阅读
相关标签
  

闽ICP备14008679号