Docker 系统性入门+进阶实践-09Docker-Podman
作者:互联网
podman是什么?
- podman是一个基于Linux系统的daemon-less容器引擎,可以用来开发、管理、运行OCI标准的容器,
podman可以运行在root或者非root用户模式,podman是red hat在2018年推出的,源代码开放 - podman和docker的区别?
- 最主要的区别就是podman是daemon less无守护进程的,而docker在执行任务的时候,必须依赖于后台的docker daemon
- podman不需要使用root用户或者root权限,所以更安全
- podman可以创建pod, pod概念和kubernetes中的pod类似
- podman运行镜像和容器存储在不同的地方,而docker必须存储在docker engineer本地
- podman是传统的fork-exec模式,而docker是client-server架构
docker架构
podman架构
podman的安装和快速上手
- podman对版本要求非常高,Debian>=11, Ubuntu>=20.10版本才可以直接安装
sudo apt update
sudo apt install -y podman
- 拉取nginx镜像
注意:podman拉取镜像和docker有点区别,需要写完整路径才可以
sudo podman pull docker.io/library/nginx
查看镜像
sudo podman image ls
查看镜像详情
sudo podman image inspect image_id
- 创建一个容器并启动
sudo podman run -d -p 80:80 docker.io/library/nginx
查看启动的容器
sudo podman ps
- 停止容器、删除容器
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实际操作看不同
- docker是client-server架构,有一个后台守护进程docker daemon,而podman是daemon-less非后台守护
- podman中不同的用户有不同的配置,也就是说各自能看到各自的镜像、容器等, 不同的用户环境是完全隔离的
- 拉取docker上的镜像
podman pull docker.io/1341935532/net-box
podman中pod的基本操作
- podman中除了能创建容器外,还能创建pod,pod和kubernets中的pod的概念基本类似
- pod: pod是一组共享相同网络、pid、ipc命名空间的一个或多个容器
- 创建一个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
- 查看pod
podman pod ps
- 查看pod以及它里面的容器:
podman ps --pod
podman ps -a --pod
- 创建pod的时候会默认帮我们创建一个容器:pod_id + "-" + infra
这个默认创建的容器是负责pod的基础设施相关的内容,比如说网络命名空间、资源管理之类的内容 - 删除Pod
podman pod rm test
- 创建两个容器,指定为同一个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,sudo,Podman,09Docker,镜像,Docker,docker,pod 来源: https://www.cnblogs.com/mayanan/p/16338840.html