首页>国内 > 正文

全球视讯!Podman 和 Docker 的安装、部署和设置

2022-08-01 17:51:53来源:运维派

1、Linux 容器介绍

Linux容器是与系统其他部分隔离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供, 这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。因而,相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多。容器比较普遍也易于使用,因此也成了 IT 安全方面的重要组成部分。


(资料图)

容器可以确保您的应用拥有必需的库、依赖项和文件,让您可以在生产中自如地迁移这些应用,无需担心会出现任何负面影响。实际上,您可以将容器镜像中的内容,视为 Linux 发行版的一个安装实例,因为其中完整包含 RPM 软件包、配置文件等内容。

容器从出现开始,迅速成为现代数据中心的必要组成部分。目前流行的容器引擎包括Docker以及下一代符合Open Container Initiative(OCI)标准的容器。

Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单的容器使用接口,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到Linux 机器上,但Docker也有两个主要缺点:

Docker 需要在你的系统上运行一个守护进程;Docker 是以 root 身份在你的系统上运行该守护程序。

这些缺点的存在可能有一定的安全隐患,为了解决这些问题,下一代容器化工具Podman出现了。

Podman是一个开源的容器管理工具,其可在大多数Linux平台上使用,它是一种无守护程序的容器引擎,用于在Linux系统上开发,管理和运行任何符合Open Container Initiative(OCI)标准的容器和容器镜像, 提供了一个与Docker兼容的命令行前端。Podman控制下的容器既可以由root用户运行,也可以由非特权用户运行。

使用Podman,Skopeo和Buildah的新一代容器架构工具后,可以解决由于docker守护程序导致的启动和安全问题。

2、Podman 和docker主要不同之处

docker 需要在我们的系统上运行一个守护进程(docker daemon),而podman 不需要。

启动容器的方式不同:docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLI的child process(子进程),而是Docker Engine的child process。Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podman的child process。docker需要使用root用户来创建容器,但是podman不需要。

3、Podman部署和常见操作

Podman的安装部署非常简便,参考如下:

(1). Arch Linux & Manjaro Linux

sudo pacman -S podman

(2). Fedora,Centos,RHEL

sudo yum -y install podman

(3). Gentoo

sudo emerge app-emulation/libpod

(4). MacOS

brew cask install podman

基本常用命令:

podman infopodman versionpodman imagespodman rmipodman ps

Podman CLI 里面很多指令都和Docker CLI 相同,官方给出了这么个例子alias docker=podman,所以说经常使用Docker CLI的人使用Podman上手非常快。

运行一个容器

列出当前所有的容器

查看一个镜像信息

查看容器运行的日志

查看运行中容器资源使用情况

4、Docker部署

4.1 部署准备工作

Docker CE即社区版(Community Edition),免费使用。这里以CentOS为例来介绍Docker的部署流程。在部署前,需要具备以下环境:

CentOS 7 及以上版本的操作系统Linux内核版本不低于3.10(CentOS 7 满足最低内核的要求)已启用centos-extras仓库(默认情况此仓库是启用的,使用yum repolist可以查看是否存在。如未启用,可安装yum-utils后执行 yum-config-manager --enable extras 进行启用)若安装了旧版本Docker相关内容,需进行卸载,旧版本的Docker称为docker或者docker-engine,卸载命令如下:(若未做说明,后续命令均以root用户执行)

若服务器能够连接到互联网,可参考在线部署步骤进行Docker安装,如无法连接到互联网,可参考离线部署步骤进行Docker安装。

4.2 在线部署步骤

安装必要的软件包

先安装如下的软件包:yum-utils,方便后续配置yum仓库

配置docker-ce稳定仓库

注意,docker-ce.repo中也包含了nightly及test仓库,默认没有启用,可以使用 sudo yum-con-fig-manager --enable docker-ce-nightly 进行启用,一般无需启用。

安装最新版本的docker-ce

该命令默认安装了最新版本的docker-ce,安装过程中如需校验GPG key,输入"y"确认即可。

执行完成后,Docker已经成功安装,但是还未启动,建议先不要启动,完成后续“部署完成后相关设置”后再启动Docker。

安装指定版本的docker-ce

首先使用如下命令查看docker-ce.repo中有哪些docker-ce版本。

第二列的部分字符串(冒号之后连接号之前)是版本号,例如可以使用如下命令安装指定版本:

该命令会安装指定版本的docker-ce,安装中如需校验GPG key,输入"y"确认即可。

执行完成后,Docker已经成功安装,但是还未启动,建议先不要启动,完成后续“部署完成后相关设置”后再启动Docker。

4.3 离线部署步骤

执行完成后,Docker已经成功安装,但是还未启动,建议先不要启动,完成后续“部署完成后相关设置”后再启动Docker。

官方步骤及存在的坑

安装18.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 daemon默认监听一个Unix套接字(/var/run/docker.sock),这个Unix套接字默认属于用户root,其他用户如果要使用docker命令行与daemon通信,则必须使用sudo。

非root用户每次都使用sudo比较麻烦,可以创建一个名为“docker”的组(安装完docker后默认就有),然后把非root用户加入到docker组里面,就可以直接访问Docker daemon了。

注意,如果已经使用了sudo,然后再把该用户加入到docker组,可能会因为目录权限的问题导致报错,使用以下命令修复即可。

配置Docker开机自启动

CentOS 7中使用Systemd管理服务,执行以下命令即可。

配置默认的日志驱动

Docker daemon的默认日志驱动是json-file,可以把docker容器的标注输出、标准错误输出到json文件中,也可以支持其他日志驱动,例如local、journald,通过在/etc/docker/daemon.json中配置。

也可以在创建容器时,指定容器使用的日志驱动,例如:

配置Docker daemon监听TCP端口

默认情况下,Docker daemon监听一个本地的Unix socket,接收来自本地docker客户端的请求。如果要从远程访问,比如docker-compose、docker-swarm之类的工具需要与Docker daemon通信,可以让Docker daemon监听一个本地的tcp端口。

CentOS系统下,修改文件/usr/lib/systemd/system/docker.service,修改如下内容:

然后重启docker。

使用 netstat -tnlp | grep 2375 可以看到dockerd进程监听了2375端口。

配置镜像下载加速

默认情况下Docker会从国外的镜像仓库pull镜像,可以使用国内的仓库镜像服务器以加快pull image 的速度,同时增加下载的并发数。

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镜像,并启动一个容器,当容器运行时会输出一段信息,然后自动退出,通过 docker ps -a 可以查看。

Docker daemon的日志

systemd使用journalctl命令统一管理所有Unit的启动日志,使用以下命令可以查看Docker daemon日志。

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

关键词: 操作系统 可以使用 已经成功 守护程序 配置文件

相关新闻

Copyright 2015-2020   三好网  版权所有