23国赛容器化(docker、podman)

在开始之前我们需要了解一下docker与podman的基本概述和区别才行:

Docker

1、概述:

Docker 是目前最流行的开源容器平台,自 2013 年推出以来,已经成为容器技术的代名词。Docker 提供了一种简单、高效的方式来打包、分发和部署应用程序,使得开发、测试和生产环境更加一致。

2、架构:

Docker 使用客户端-服务器架构,其中包括一个守护进程(Docker Daemon)和一个命令行客户端。这种架构使得 Docker 可以方便地进行远程管理,但也带来了一定的安全隐患。

Podman

1、概述:

Podman 是 Red Hat 推出的一款容器运行时,与 Docker 类似,它也支持 OCI(Open Container Initiative)标准。Podman 的设计目标是提供一个与 Docker 相似的用户体验,同时解决一些 Docker 存在的问题,如守护进程依赖和特权安全问题。

2、架构:

与Docker不同的是Podman 采用无守护进程架构,它直接与容器运行时(如 runc )进行通信。这种设计使得 Podman 更加轻量级,同时避免了守护进程可能导致的安全问题。

总结:

总结上面的一些概述和架构就能知道他们最大的区别就是docker是拥有一个守护进程的程序,而podman则不需要守护进程就能够使用。这时候可能就有读者有疑问了,说,那啥是守护进程???到底有啥用?

守护进程简述:

守护进程:

守护进程(Daemon Process)是指在后台运行的程序,通常在系统启动时启动,负责执行各种系统服务或任务。它们通常不直接与用户交互,它们主要用于执行系统服务任务调度和提供后台功能

实际应用:

emm其实这个问题,我了解的也不是很多,不过有一个很明显的操作区别就是,你在ubuntu上使用docker的时候你会发现每次使用普通用户执行docker一些特殊的命令,你可能就会遇到权限不够的问题,需要使用sudo的权限,这就是有守护进程的程序。(你可以使用ps ajx|more来查看一下你linux系统的守护进程有哪些)

而用podman的话就不会导致这种情况出现,他是单独运行,不会过多涉及到root权限,这也是它提高了安全性的其中之一的原因。

赛题

以上的所有概述,都是为了后面的题目做准备,这个23国赛的样题等题目上出现了一些问题,就是说有两道题。

一道是叫我安装docker-ce然后使用podman,实现有守护进程的守护程序;

另一道是:安装podman,使用podman实现无守护程序的容器应用。当然这两道对比之下第二道就比较合理。

这两道呢其实在正式国赛题上是有变动的:

当然这个变动不大,其实样题部分的话我觉得那一道说:安装docker-ce使用podman的可能是出错了,因为docker是一个拥有守护进程的程序,而podman则是一个无守护进程的程序。两者基本上很难说能合在一起,硬要说和着用,那就只能安装docker跑一个docker容器(rockylinux9)之后再容器里面安装podman之后再跑rockylinux9和registry。(当然这很少见)

开始:

好了,接下来我就开始配置了。这里我就拿那一道有问题的题(docker)的题目来讲:

赛题

docker 服务
任务描述:请采用 podman,实现有守护程序的容器应用。
(1)在 linux2 上安装 docker-ce,导入 rocky 镜像。
(2)创建名称为 skills 的容器,映射本机的 8000 端口到容器的80 端口,在容器内安装apache2,默认网页内容为“HelloDocker”。
(3)配置 docker 私有仓库。

在做每一道题目之前我们都需要先理清楚题目的要求,不然做到一半又要改;

(1)第一小题就要求我们安装docker-ce,并且导入rocky镜像。

(分析:docker在rockylinux中并不自带。而导入rocky镜像这里也没有明说用什么方式导入,那么最好的方式就是load -i这样可以保留镜像的构建历史记录;这里不清楚我在说啥的可以看我的docker命令的区别的一篇博客)这里的docker-ce名称不懂的也可以去看看我的博客,有写过。

(2)创建skills容器,映射本机8000端口到容器80端口,并且在容器内安装配置apache2服务器。(yum install -y httpd)

(3)配置私有仓库(这里的配置可以去看看Podman 部署私有镜像仓库_podman配置私有仓库-CSDN博客这一篇博客,我个人觉得还不错,挺详细)

配置

我这里的主机名linux7代替一下

环境准备

在开始之前我们需要准备一下环境,不然后面你们可能因为某些原因导致访问不了容器内的容器或者登陆不了私有库;

1、首先第一个环境就是selinux这个东西能关闭尽量关闭,不然会有很多麻烦

2、私有仓库的证书颁发。这一部分呢你们可以去网上查一查,找找如何颁发证书,如何信任证书?如何才能让颁发的证书不会报错?(当然也可以等我出一篇博客,给你们讲讲)展示一下容错:

#登陆时出现报错:
Error: authenticating creds for "linux3.skills.lan:5000": pinging container registry linux3.skills.lan:5000: Get "https://linux3.skills.lan:5000/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

以上的报错就是所谓的根证书没有被信任所导致,验证https的时候不通过导致。

当然在排错的时候你可以使用"podman logs [container]/docker logs [container]"来查看容器的日志。

3、私有仓库的用户文件存放,这个也很重要,如果用户的用户文件不在容器映射的本地目录中也会导致登陆不了私有仓库。

安装docker(分享软件包网盘(提取码oo8z):docker.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘当然你们也可以去官网下载自己想要的版本)

启动docker

导入镜像
[root@linux7 ~]# docker load -i rockylinux9.tar && docker load -i registry.tar 

[root@linux7 ~]# docker images
REPOSITORY                           TAG       IMAGE ID       CREATED        SIZE
registry                             latest    909c3ff012b7   5 months ago   25.4MB
rockylinux/rockylinux                9         da830f5e2510   5 months ago   176MB
#使用rocky镜像创建容器
docker run -d --name skills -p 8000:80 -v /media:/media -v /etc/yum.repos.d:/etc/yum.repos.d/ rockylinux9:9

setenforce 0
[root@linux7 ~]# docker exec -it skills sh
sh-5.1# ls
afs  dev  home    lib64        media  opt     root  sbin  sys  usr
bin  etc  lib    lost+found  mnt    proc  run   srv   tmp  var
sh-5.1# /usr/sbin/httpd -k restart
httpd not running, trying to start
sh-5.1# /usr/sbin/httpd -k start  
httpd (pid 26) already running
sh-5.1# exit
exit
[root@linux7 ~]# curl linux7.skills.lan:8000
HelloDocker
[root@linux7 ~]# 
#搭建私有仓库
mkdir /registry/{auth,cert,registry} -p
dnf install -y httpd-tools
htpasswd -Bbn admin admin >> /registry/auth/htpasswd
#创建容器
cp -a /etc/ssl/skills.* /registry/cert/
docker run -d --name registry -p 5000:5000 \
-v /registry/registry:/var/lib/registry \
-v /registry/auth:/auth \
-v /registry/cert/:/cert \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_HTTP_ADDR=0.0.0.0:5000" \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/cert/skills.crt" \
-e "REGISTRY_HTTP_TLS_KEY=/cert/skills.key" registry:latest

[root@linux7 ~]# docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED             STATUS          PORTS                                       NAMES
4581a477eee0   registry:latest           "/entrypoint.sh /etc…"   54 minutes ago      Up 16 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry
978cb32ea8b2   rockylinux/rockylinux:9   "/bin/bash"              About an hour ago   Up 7 minutes    0.0.0.0:8000->80/tcp, :::8000->80/tcp       skills
#访问私有库
docker login linux7.skills.lan:5000
#标签
docker tag rockylinux9:9 linux7.skills.lan:5000/rockylinux9:9
#推送
docker push linux7.skills.lan:5000/rockylinux9:9
#验证
curl https://linux7.skills.lan:5000/v2/_catalog -u "admin:admin"
[root@linux7 ~]# curl https://linux7.skills.lan:5000/v2/_catalog -u admin:admin
{"repositories":["rockylinux9"]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值