1。Linux容器简介Linux容器是一系列与系统其余部分隔离的进程。运行这些过程所需的所有文件都由另一个映像提供,这意味着Linux容器是可移植的,并且从开发到测试再到生产是一致的。因此,容器可以比依赖复制传统测试环境的开发管道运行得更快。容器无处不在且易于使用,这使它们成为IT安全的重要组成部分。容器确保您的应用程序具有所需的库、依赖项和文件,使您可以在生产中自由移动它们而不必担心副作用。其实你可以把容器镜像的内容看成是一个Linux发行版的安装实例,因为里面包含了RPM包、配置文件等。从一开始,容器就迅速成为现代数据中心的重要组成部分。当前流行的容器引擎包括Docker和下一代开放容器倡议(OCI)兼容容器。Docker是一个开源的应用容器引擎,是对Linux容器的封装。Docker提供了一个简单的容器接口,允许开发人员将他们的应用程序和依赖项打包到一个可移植的容器中,然后将它们发布到Linux机器上,但Docker也有两大缺点:Docker需要在你的系统上运行一个守护进程;Docker在您的系统上以root身份运行守护进程。这些缺点的存在可能会带来一定的安全隐患。为了解决这些问题,下一代容器化工具Podman应运而生。Podman是一个开源的容器管理工具,可以在大多数Linux平台上使用。它是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行任何开放容器倡议(OCI)标准。容器和容器镜像,提供与Docker兼容的命令行前端。Podman控制下的容器可以由root或非特权用户运行。使用Podman、Skopeo和Buildah新一代容器架构工具后,可以解决dockerdaemon带来的启动和安全问题。2、Podman和docker的主要区别在于docker需要在我们的系统上运行一个守护进程(dockerdaemon),而podman则不需要。启动容器的方式不同:dockercli命令通过API与DockerEngine(引擎)交互,告诉它我要创建一个容器,然后dockerEngine会调用OCI容器运行时(runc)来启动一个容器。这意味着容器的进程(process)不会是DockerCLI的子进程(childprocess),而是DockerEngine的子进程。Podman直接与OCI容器运行时(runc)交互创建容器,因此容器进程直接是podman的子进程。Docker需要使用root用户创建容器,而podman则不需要。三、Podman部署及常用操作Podman的安装部署非常简单,如下:(1).ArchLinux和ManjaroLinuxsudopacman-Spodman(2)。Fedora、Centos、RHELsudoyum-yinstallpodman(3)。Gentoosudoemergeapp-emulation/libpod(4)。MacOSbrewcaskinstallpodman基本常用命令:podmaninfopodmanversionpodmanimagespodmanrmipodmanpsPodmanCLI很多命令和DockerCLI一样。给出了官方示例别名docker=podman,因此经常使用DockerCLI的人可以很快上手Podman。运行一个容器,列出当前所有的容器查看一个镜像的信息查看容器的运行日志查看运行容器的资源使用情况这里我们以CentOS为例介绍Docker的部署过程。部署前需要具备以下环境:CentOS7及以上,操作系统Linux内核版本不低于3.10(CentOS7满足最低内核要求),已启用centos-extras仓库(该仓库为默认开启,使用yumRepolist可以查看是否存在,如果没有开启,可以安装yum-utils,执行yum-config-manager--enableextras开启。)如果安装了老版本的Docker相关内容,需要卸载。老版本的Docker称为docker或docker-engine,卸载命令如下:(如无说明,后续命令以root用户执行)如果服务器可以上网,可以参考到在线部署步骤安装Docker。如果不能联网,可以参考离线部署步骤Docker安装。4.2线上部署步骤安装必要的软件包首先安装以下软件包:yum-utils,方便后续配置yum仓库和docker-cestable仓库注意docker-ce.repo还包括nightly和test仓库,分别是默认不开启,可以使用sudoyum-con-fig-manager--enabledocker-ce-nightly开启,一般不需要开启。安装最新版本的docker-ce此命令默认安装最新版本的docker-ce。如果您在安装过程中需要验证GPG密钥,请输入“y”进行确认。执行完成后,Docker已经安装成功,但是还没有启动。建议先不要启动,等完成后续“部署完成后的相关设置”后再启动Docker。安装指定版本的docker-ce,首先使用如下命令查看docker-ce.repo中有哪些docker-ce版本。第二列中的部分字符串(在冒号之后的连字符之前)是版本号。例如,您可以使用以下命令来安装指定版本:该命令将安装指定版本的docker-ce。安装时要验证GPG密钥,输入“y”确认即可。执行完成后,Docker已经安装成功,但是还没有启动。建议先不要启动,等完成后续“部署完成后的相关设置”后再启动Docker。4.3离线部署步骤完成后,Docker已经安装成功,但是还没有启动。建议不要启动,在完成后续“部署完成后的相关设置”后启动Docker。官方步骤及存在的坑Installversion18.09.1:官方文档说明是从Docker官网下载指定版本的rpm包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/,然后使用yum安装。这种方法会有问题。在完全离线的环境下,直接安装docker官网下载的rpm包会缺少很多依赖。这些依赖需要手动下载升级或安装相应的rpm包,非常麻烦。因此推荐使用以下方式进行离线安装。本地下载所有rpm包(1)在可以上网的环境下(比如个人电脑),安装一个与离线环境下机器操作系统相同的虚拟机,并保证虚拟机可以上网。安装虚拟机操作系统的时候最好选择最小化安装。假设操作系统是CentOS。(2)安装完成后,配置本机yum源(建议配置阿里云镜像),先备份/etc/yum.repos.d/。(3)然后配置CentOS-Base.repo和docker-ce.repo(4)下载docker-ce相关的rpm包。创建repo仓库在上面可以联网的虚拟机上安装createrepo,创建仓库。此时会在/tmp/rpm_download下生成repodata仓库数据文件夹。离线环境安装将以上文件复制到离线环境的机器上,配置本地yum源进行安装。将以上文件夹复制到离线环境的机器中,假设目录也是/tmp/rpm_download,用于配置离线环境机器的本地yum源。至此,离线环境下docker的安装就完成了。4.4部署完成后,配置非root用户使用Docker命令的相关设置。Docker守护进程默认监听Unix套接字(/var/run/docker.sock)。这个Unix套接字默认属于用户root。如果其他用户想使用docker命令与守护进程通信,则必须使用sudo。非root用户每次都要sudo很麻烦。您可以创建一个名为“docker”的组(安装docker后默认),然后将非root用户添加到docker组中以直接访问Docker守护进程。注意,如果已经使用了sudo,再将用户添加到docker组中,可能会因为目录权限问题而报错。使用以下命令修复它。要将Docker配置为从启动时使用CentOS7中的Systemd管理服务,请执行以下命令。配置默认日志驱动程序。Dockerdaemon默认的日志驱动是json-file,可以将docker容器的标签输出和标准错误输出到json文件中,也可以通过/etc/docker支持其他的日志驱动,比如local和journald在/daemon.json中配置。还可以在创建容器时指定容器使用的日志驱动,例如:配置Docker守护进程监听TCP端口默认情况下,Docker守护进程监听本地Unix套接字,接收本地docker客户端的请求。如果要远程访问,docker-compose、docker-swarm等工具需要和Dockerdaemon通信,可以让Dockerdaemon监听本地的一个tcp端口。CentOS系统下,修改文件/usr/lib/systemd/system/docker.service,修改如下内容:然后重启docker。使用netstat-tnlp|grep2375可以看到dockerd进程监听2375端口。配置镜像下载加速Docker默认会从国外镜像仓库拉取镜像。可以使用国内仓库镜像服务器来加速拉取镜像,增加并发下载数。CentOS系统下,修改docker配置文件/etc/docker/daemon.json。然后重启docker。配置Docker的默认网桥。Docker服务启动后,默认会创建一个docker0网桥。它使用的默认网段是172.xx.xx.xx。假设部署docker的机器也使用这个网段,可能会出现冲突。可以修改docker的默认网段。CentOS系统下,修改docker配置文件/etc/docker/daemon.json,重启docker。4.5功能验证启动Docker查看docker状态信息第一次运行hello-world容器,会从远程镜像仓库下载hello-world镜像,并启动一个容器。容器运行时,会输出一条信息,然后自动退出,通过dockerps-a可以查看。Dockerdaemonlogsystemd使用journalctl命令统一管理所有Unit的启动日志。使用以下命令查看Docker守护进程日志。Docker卸载5.本章小结本文介绍了容器部署流程和简单的容器操作,并解释了Docker与下一代容器工具Podman的区别。目前Docker容器引擎仍然被很多工程师广泛使用,但是由于其自身的局限性,未来符合OCI标准的Podman会逐渐成为社区的主流,并被广大开发者所接受和运维人员。技术在不断发展,新工具层出不穷。基于相应的新容器工具链,我们可以构建一个完全兼容Docker但更加轻量、灵活和安全的容器环境。参考:Podman官网地址:https://podman.io/Podmanhttps://www.redhat.com/zh/topics/containers/whats-a-linux-containerhttps://baijiahao.baidu.com/s?id=1653853217702500436&wfr=spider&for=pchttps://www.redhat.com/zh/topics/containers/whats-a-linux-containerhttps://www.cnblogs.com/shoufu/p/11803010.html
