Podman和Docker
Podman和Docker
概念
Podman和Docker都是管理镜像、容器的工具,可以帮我们在虚拟机中快速部署好一个项目
使用Docker,我通常会先在VMware中创建一个Centos虚拟机,然后在该虚拟机中安装好docker,再给docker配置国内镜像源后续直接拉取镜像,运行成容器即可
使用Podman,我的理解中,可以直接下载Podman Desktop,然后会指引我们安装VM环境、WSL2、Podman Machine等
WLS2在这里其实就相当于Centos,Podman运行在WLS2中,Docker运行在Centos中(当然Centos中也可以安装Podman,WLS2中也可以安装docker,只是这样更方便顺手)
Podman Machine让我们可以通过Windows控制WLS2(包括Podman Desktop关联WLS2中的Podman,直接在Windows终端控制WSL2)
使用Podman Desktop,可以帮我们快速启动镜像成容器,而不需要关心docker run后面的一大段内容
Docker环境部署
在已有linux虚拟机基础上:
安装docker
# 1.1 卸载旧版本(可选)
sudo yum remove -y docker \docker-client docker-client-latest \docker-common docker-latest \docker-latest-logrotate docker-logrotate docker-engine# 1.2 安装依赖 & 官方 yum 源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 1.3 安装并启动
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker# 1.4 验证
docker version # 能看到 Server 信息即安装成功
配置镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirrors.c.163.com","https://mirror.baidubce.com"]
}
EOFsudo systemctl daemon-reload
sudo systemctl restart docker
拉取镜像
docker pull rabbitmq:3.12-management # 标签可换成最新版本
docker images | grep rabbitmq # 确认已拉取
运行成容器
docker run -d --name rabbitmq \-p 5672:5672 -p 15672:15672 \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=123456 \--restart=always \rabbitmq:3.12-management# 查看状态
docker ps | grep rabbitmq
浏览器访问 http://<主机IP>:15672,用户名/密码即为上面设置的 admin / 123456
Podman环境部署
确保安装好了Podman Desktop,并且已经装好了Podman Machine、WSL2、Podman
在安装Podman Desktop时,按照引导逐步安装就好了
可以打开Podman Desktop来查看:

能看到Podman Machine正在运行即可
然后就已经可以尝试拉取镜像了,但因为我们的初始注册表(镜像源)都是国外的:

因此很大概率无法拉取到镜像,此时就需要配置国内镜像源
配置国内镜像源两种方法:
-
图形化界面配置
注意!!!我个人在使用图形化界面配置时,一直没用,包括在图形化界面中直接添加阿里云的国内镜像源,也都无法使用
具体原因貌似是权限的问题,总而言之下面的图形化界面的配置,请直接跳过到在WSL终端来配置
直接点击Add register,然后配置阿里云镜像源路径
但这要求一定要填写账号密码
需要到:https://cr.console.aliyun.com/

然后拿阿里云账户全名 + 密码就可以在Podman Desktop中配置好了

阿里云镜像源地址:https://registry.cn-hangzhou.aliyuncs.com
然后就配置好了:

-
第二种方法就是在WSL终端来配置
怎么打开WSL终端:
先win + x打开windows终端再打开WLS终端(或者win + r输入wsl)

需要注意:
WSL有系统级镜像源配置文件:/etc/containers/registries.conf
还有用户级镜像源配置文件:~/.config/containers/registries.conf
且优先使用用户级,最好是两个都配置国内镜像源:
[registries.search] registries = ['swr.cn-north-4.myhuaweicloud.com', 'registry.aliyuncs.com', 'hub-mirror.c.163.com', 'docker.mirrors.ustc.edu.cn', 'docker.io']但是很不可思议的是,当我这样配置后,我是可以直接找到我想要的镜像的
例如使用命令:podman pull rabbitmq:management

但是!!!如果你选择第一个,尝试拉取华为云的这个镜像,包括乃至下面阿里云的镜像等都是不行的
因为华为云实际存放镜像的位置是:swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3.12-management
所以选了第一个以后,根本就找不到
这时候你可能想,那我把配置文件改为:
[registries.search] registries = ['swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io', 'registry.aliyuncs.com', 'hub-mirror.c.163.com', 'docker.mirrors.ustc.edu.cn', 'docker.io']这样就能找到了吧,然而如果这样写,podman会直接报错,根本无法处理这个配置文件。。。
所以我很困惑,到底怎么办才能拉取到我想要的镜像呢?
如果我直接执行podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3.12-management
确实是能拉到的
我们可以执行podman search swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq --list-tags

直接就能看到有哪些版本
但下次呢?如果我要其他镜像呢?例如nacos
执行podman search swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos --list-tags

又找不到了(因为没权限),这不炸钢了吗。。。
那我就又要去找登入、注册、找密钥等等,和阿里云一样,很麻烦
但是我直接一拉,运行podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.2.3

又成功了。。。问Ai,他说是拉取要的权限比查询的要低?那我没辙了
然后我又尝试拉取seata的镜像,先试试podman search,是不行的,那我就试试直接拉,也要登入(这次直接拉也要权限了)
那我去问ai,得知和阿里云一样,登入后应该就好了,然后确定是使用华为云的账号密码
但是我登入,账号密码错误,但是ai又说就是用这个账号密码
总而言之:
当我使用podman时,遇到的问题有很多,包括镜像路径填写格式、国内一定要权限、外网连接不上等等
下面列出我能直接拉取的镜像:
podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.2.3
podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3.12-management
podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/rocketmq:5.1.4
然后就这样吧
但是当我拉取到这三个镜像后,在podman Desktop点两下,也确实就启动好容器,可以直接localhost访问了
r.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rabbitmq:3.12-management
podman pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/rocketmq:5.1.4
然后就这样吧
但是当我拉取到这三个镜像后,在podman Desktop点两下,也确实就启动好容器,可以直接localhost访问了
所以问题就是在podman拉取镜像这里,目前我没有解决。
