Podman 介绍,安装,基本操作

Podman 介绍

Podman 介绍,安装,基本操作_第1张图片

What is Podman?

Podman 是一个基于 Linux 系统的 daemon-less 的容器引擎。 可以用来开发,管理和运行 OCI 标准的容器. podman可以运行在root或者非root用户模式。

Podman 是 Red Hat 在2018年推出的,源代码开放。

官方网站 https://podman.io/

OCI https://opencontainers.org/

和 docker 的区别

  • 最主要的区别是podman是Daemonless的,而Docker在执行任务的时候,必须依赖于后台的docker daemon(最主要的区别
  • podman不需要使用root用户或者root权限,所以更安全。(最主要的区别
  • podman可以创建pod,pod的概念和Kubernetes 里定义的pod类似
  • podman运行把镜像和容器存储在不同的地方,但是docker必须存储在docker engineer所在的本地
  • podman是传统的fork-exec 模式,而docker是 client-server 架构

框架区别

Docker架构
Podman 介绍,安装,基本操作_第2张图片

Podman架构
Podman 介绍,安装,基本操作_第3张图片

Podman 的安装

安装文档地址:https://podman.io/getting-started/installation

Podman是个Linux程序,不能在Windows上运行,但是可以运行客户端,发送到Linux服务端操作。

Windows 使用

‎Podman是一个运行Linux容器的工具。您可以从 Windows 桌面执行此操作,只要您有权访问在主机上的 VM 内运行或通过网络可用的 linux 机箱即可。您需要安装远程客户端,然后在 podman-remote.conf 文件中设置 ssh 连接信息。Podman也可以在Windows子系统Linux系统上运行,请查看下面的链接以查看如何完成此操作的说明。‎

远程客户端

  • 适用于 Windows 的最新远程客户端

Windows Subsystem for Linux (WSL) 2.0

  • 如何使用WSL2在Windows上运行Podman

Linux 发行版

Arch Linux & Manjaro Linux

sudo pacman -S podman

CentOS

‎Podman 在 CentOS 7 的默认 Extras 存储库中可用,在 CentOS 8 和 Stream 的 AppStream 存储库中可用。‎

sudo yum -y install podman

Debian

‎podman 软件包在 Debian 11 (Bullseye) 存储库及更高版本中可用。‎

sudo apt-get -y install podman

Ubuntu

podman 包在 Ubuntu 20.10 及更高版本的官方存储库中可用。

# Ubuntu 20.10 and newer
sudo apt-get -y update
sudo apt-get -y install podman

源码安装

仔细检查golang版本是否足够新(即2022年1月版本1.16)。需要x或更高。当前的最低要求版本总是可以在go中找到。mod文件。如果需要,golang套件可在https://golang.org/dl/.或者,go也可以从源代码构建,如下所示(保留系统go安装会很有帮助,以避免必须引导go:go版本)

export GOPATH=~/go
git clone https://go.googlesource.com/go $GOPATH
cd $GOPATH
cd src
./all.bash
export PATH=$GOPATH/bin:$PATH

首先,确保在$PATH上首先找到的值高于1.12.x。如果需要,上面的说明将帮助您编译更新版本的Go。然后我们就可以构建Podman:go版本了

git clone https://github.com/containers/podman/
cd podman
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr

构建标签
除此以外,如果您不想使用seccompselinux支持构建Podman,可以在运行make时添加。BUILDTAGS=“”

make BUILDTAGS=""
sudo make install

快速上手

安装一个Nginx

docker的命令一样

甚至可以把podman的关键词,改成docker

启动Nginx容器

$ podman image pull docker.io/library/nginx 
Trying to pull docker.io/library/nginx...
Getting image source signatures
Copying blob 091c283c6a66 skipped: already exists  
Copying blob 55de5851019b skipped: already exists  
Copying blob 5eb5b503b376 skipped: already exists  
Copying blob 1ae07ab881bd skipped: already exists  
Copying blob 78091884b7be skipped: already exists  
Copying blob b559bad762be [--------------------------------------] 0.0b / 0.0b
Copying config c316d5a335 done  
Writing manifest to image destination
Storing signatures
c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a
$ podman image ls
REPOSITORY                TAG      IMAGE ID       CREATED        SIZE
docker.io/library/nginx   latest   c316d5a335a5   32 hours ago   146 MB
$ podman container run docker.io/library/nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/01/27 18:04:36 [notice] 1#1: using the "epoll" event method
2022/01/27 18:04:36 [notice] 1#1: nginx/1.21.6
2022/01/27 18:04:36 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/01/27 18:04:36 [notice] 1#1: OS: Linux 3.10.0-693.11.1.el7.x86_64
2022/01/27 18:04:36 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/01/27 18:04:36 [notice] 1#1: start worker processes
2022/01/27 18:04:36 [notice] 1#1: start worker process 30

pod 基本操作

‎podman pod 是一组用于管理 pod 或容器组的子命令。‎

[root@python ~]$ podman pod --help
Manage pods

Description:
  Pods are a group of one or more containers sharing the same network, pid and ipc namespaces.

Usage:
  podman pod [command]

Available Commands:
  create      Create a new empty pod
  exists      Check if a pod exists in local storage
  inspect     Displays a pod configuration
  kill        Send the specified signal or SIGKILL to containers in pod
  pause       Pause one or more pods
  prune       Remove all stopped pods
  ps          List pods
  restart     Restart one or more pods
  rm          Remove one or more pods
  start       Start one or more pods
  stats       Display a live stream of resource usage statistics for the containers in one or more pods
  stop        Stop one or more pods
  top         Display the running processes of containers in a pod
  unpause     Unpause one or more pods

创建pod异常

遇到问题了!!!!解决了一下!

问题:创建pod的提示Error initializing source docker://k8s.gcr.io/pause:3.1: error pinging docker registry k8s.gcr.io: Get https://k8s.gcr.io/v2/: dial tcp 142.251.8.82:443: i/o timeout

$ podman pod create --name demo

ERRO[0060] Error freeing pod lock after failed creation: no such file or directory 
Error: unable to create pod: error adding Infra Container: unable to pull k8s.gcr.io/pause:3.1: unable to pull image: Error initializing source docker://k8s.gcr.io/pause:3.1: error pinging docker registry k8s.gcr.io: Get https://k8s.gcr.io/v2/: dial tcp 142.251.8.82:443: i/o timeout

解决方案:

$podman pull mirrorgcrio/pause:3.1 --log-level info
$podman images
REPOSITORY                        TAG     IMAGE ID      CREATED        SIZE
docker.io/mirrorgcrio/pause       3.2     80d28bedfe5d  7 months ago   686 kB

$podman tag docker.io/mirrorgcrio/pause:3.1 k8s.gcr.io/pause:3.1

$podman images
REPOSITORY                        TAG     IMAGE ID      CREATED        SIZE
docker.io/mirrorgcrio/pause       3.2     80d28bedfe5d  7 months ago   686 kB
k8s.gcr.io/pause                  3.2     80d28bedfe5d  7 months ago   686 kB

注意版本,提示错误是k8s.gcr.io/pause:3.1版本,下载的时候选择3.1版本,你可能遇到3.2就要下载3.2版本,不要搞错了!!!

创建pod

$ podman pod create --name demo
39cc7cb7b3383ad1b43a0b5ea06f753aac93f5f2be7e0e25ad5e516356c8a1a3

查看pod

$ podman pod ps
POD ID         NAME   STATUS    CREATED         # OF CONTAINERS   INFRA ID
39cc7cb7b338   demo   Created   2 minutes ago   1                 9a81250ff761
$ podman ps -a --pod
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS                     PORTS  NAMES               POD
9a81250ff761  docker.io/mirrorgcrio/pause:3.1                        3 minutes ago   Created                           39cc7cb7b338-infra  39cc7cb7b338

删除pod

$ podman pod rm test
29a584b91e21585c6620b2dad9dfc72f6aa2e23bdfd0729f8bc17a7b10508942

使用pod创建容器

$ podman container run -d --name test1 --pod demo nginx
9268ed827f529c0aa7f39f6e841f5675687709ea8f30011f648f4438ce165a4d
$ podman ps -a --pod
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS                     PORTS  NAMES               POD
9268ed827f52  docker.io/library/nginx:latest   nginx -g daemon o...  32 seconds ago  Up 32 seconds ago                 test1               39cc7cb7b338 
$ 

pod 网络

创建两容器,都使用同一个pod,进入容器之后,查看ip a

一个pod就是一个spacename命名空间。处于一个pod里面的容器,网络相同命名空间里面。
Podman 介绍,安装,基本操作_第4张图片

优势,处于同一个pod里面,可以通过本地网络地址通讯。
例如,test1是服务,test2是数据库,直接可以访问。

pod 启动与停止

停止

$ podman pod stop demo
39cc7cb7b3383ad1b43a0b5ea06f753aac93f5f2be7e0e25ad5e516356c8a1a3
$ podman ps -a
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS                     PORTS  NAMES
9268ed827f52  docker.io/library/nginx:latest   nginx -g daemon o...  11 minutes ago  Exited (0) 5 seconds ago          test1

启动

$ podman pod start demo
39cc7cb7b3383ad1b43a0b5ea06f753aac93f5f2be7e0e25ad5e516356c8a1a3
$ podman ps 
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS  NAMES
9268ed827f52  docker.io/library/nginx:latest  nginx -g daemon o...  12 minutes ago  Up 13 seconds ago         test1

可以看出来,pod停止后里面的容器也会随之停止,pod启动后里面的容器也会跟着启动!

你可能感兴趣的:(Docker系列,kubernetes,docker,容器,podman)