其他分享
首页 > 其他分享> > Docker 系统性入门+进阶实践-09Docker-Podman

Docker 系统性入门+进阶实践-09Docker-Podman

作者:互联网

podman是什么?

  1. podman是一个基于Linux系统的daemon-less容器引擎,可以用来开发、管理、运行OCI标准的容器,
    podman可以运行在root或者非root用户模式,podman是red hat在2018年推出的,源代码开放
  2. podman和docker的区别?

podman的安装和快速上手

  1. podman对版本要求非常高,Debian>=11, Ubuntu>=20.10版本才可以直接安装
sudo apt update
sudo apt install -y podman
  1. 拉取nginx镜像
    注意:podman拉取镜像和docker有点区别,需要写完整路径才可以
    sudo podman pull docker.io/library/nginx
    查看镜像
    sudo podman image ls
    查看镜像详情
    sudo podman image inspect image_id
  2. 创建一个容器并启动
    sudo podman run -d -p 80:80 docker.io/library/nginx
    查看启动的容器
    sudo podman ps
  3. 停止容器、删除容器
sudo podman container stop container_id  // 停止容器
sudo podman container rm container_id  // 删除容器

注意:默认如果不使用sudo 的话,每次会有警告WARN[0000] The cgroupv2 manager is set to systemd but there is no systemd user session available, 为了解决这个问题,我们需要在家目录下的.config目录下新建目录containers,在containers目录新建文件containers.conf文件,
文件内容如下:

[engine]
events_logger = "file"
cgroup_manager = "cgroupfs"

此时在执行命令,不加sudo,也不会WAARN警告了。
参考文档

docker vs podman实际操作看不同

  1. docker是client-server架构,有一个后台守护进程docker daemon,而podman是daemon-less非后台守护
  2. podman中不同的用户有不同的配置,也就是说各自能看到各自的镜像、容器等, 不同的用户环境是完全隔离的
  3. 拉取docker上的镜像
    podman pull docker.io/1341935532/net-box

podman中pod的基本操作

  1. podman中除了能创建容器外,还能创建pod,pod和kubernets中的pod的概念基本类似
  2. pod: pod是一组共享相同网络、pid、ipc命名空间的一个或多个容器
  3. 创建一个pod
    podman pod create --name demo
    有可能会报错:
ERRO[0060] Error freeing pod lock after failed creation: no such file or directory
Error: error adding Infra Container: Error initializing source docker://k8s.gcr.io/pause:3.2: error pinging docker registry k8s.gcr.io: Get "https://k8s.gcr.io/v2/": dial tcp 74.125.23.82:443: i/o timeout

解决办法,先从国内镜像拉取,然后给拉取的镜像打一个标签,然后再创建pod

podman pull registry.aliyuncs.com/google_containers/pause:3.2  // 阿里镜像拉取
podman image tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2  // 将拉取的镜像打标签为国外镜像
podman pod create --name demo  // 创建pod
  1. 查看pod
    podman pod ps
  2. 查看pod以及它里面的容器:
    podman ps --pod
    podman ps -a --pod
  3. 创建pod的时候会默认帮我们创建一个容器:pod_id + "-" + infra
    这个默认创建的容器是负责pod的基础设施相关的内容,比如说网络命名空间、资源管理之类的内容
  4. 删除Pod
    podman pod rm test
  5. 创建两个容器,指定为同一个pod
podman container run -d --pod demo --name mybox docker.io/1341935532/net-box ping 8.8.8.8
podman container run -d --pod demo --name mybox2 docker.io/1341935532/net-box ping 8.8.8.8

我们查看同一个pod的两个容器的ip发现是相同的,也就印证了上面所说的pod是一组共享同一网络、pid和ipc命名空间的一个或多个容器。
9. 一个pod实际上就是一个命名空间,那么在这一个命名空间的所有容器处在同一个网络命名空间里面,
这样的好处就是,同一个pod里面的容器相互访问时,只需要通过127.0.0.1+port就可以访问了,相当于同一台机器上的不同端口
podman中的pod和kubernetes中的pod基本一致,也可以和docker-compose去比较,compose可以部署多个服务,pod也可以部署多个服务,
只不过在podman里面无法使用docker-compose的yml文件,
10. 基于podman play文件创建pod及其容器
podman play --help

podman后续学习

podman 官方文档

标签:容器,podman,sudo,Podman,09Docker,镜像,Docker,docker,pod
来源: https://www.cnblogs.com/mayanan/p/16338840.html