本文介绍在Linux 操作系统Ubuntu 的18.04
及以上版本中,配置开源容器化平台和工具集Docker 的详细方法;其中,我们以配置Docker 平台的核心组件之一------Docker Engine为例来详细介绍。
首先,大家需要明确,我们常说的Docker ,其实就是指的Docker Desktop 或Docker Engine 这两个东西。其中,Docker Desktop 软件是适合于桌面操作系统的、完整的Docker ,而Docker Engine 则是Docker 的核心运行引擎;Docker Desktop 软件包含了Docker Engine 和其他一些附加的功能。关于下载Docker Desktop 还是Docker Engine ,简单来说,就是如果在桌面操作系统(比如Windows 电脑、Mac 电脑中),就下载Docker Desktop 软件,因为其可以通过图形化的界面来实现多种Docker 功能;若是在服务器、Linux 电脑等平台,则下载Docker Engine 即可,因为其可以通过命令行来完成各项Docker 功能。关于二者的更详细介绍与区分,大家可以参考Docker 官网给出的阐述,这里就不再赘述。
话不多说,我们开始Docker Engine的具体配置。其中,本文所涉及的全部代码,都在终端中执行即可。
1 预处理
首先,我们需要确保电脑中没有老版本的Docker 及其组件。例如,我这里的电脑虽然没有Docker 应用,但是还是能搜索到一些关于docker
的文件或文件夹;如下图所示。
因此,除非大家的电脑是刚刚买回来、什么都没有配置过的新电脑,其他情况下都建议大家首先执行如下的代码。
bash
sudo apt-get remove docker docker-engine docker.io containerd runc
上述代码使用apt-get
命令来移除Docker 相关软件包和容器运行时的命令。其中,sudo
是一个用于以超级用户(root )权限运行命令的关键词;通过使用sudo
,可以执行需要管理员权限的操作。随后的apt-get
是用于在Debian 和Ubuntu 等基于Debian 的Linux 发行版中进行软件包管理的命令行工具。remove
是apt-get
命令的一个选项,用于从系统中卸载指定的软件包。docker
、docker-engine
、docker.io
、containerd
和runc
都是要卸载的软件包的名称,指定了Docker 及其相关组件的软件包名称。通过在命令中列出这些软件包的名称,apt-get
将卸载它们及其相关的文件和配置。
运行上述代码,如下图所示。可以看到,我的电脑中其实之前也并没有什么Docker的相关文件。
此外,我们还可以用Docker官网提供的一句代码来实现上述类似的功能;它的作用和前述代码一致。
bash
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc;
do sudo apt-get remove $pkg;
done
运行上述代码,如下图所示。
接下来,我们需要更新一下系统的软件包列表;通过如下的代码即可实现这一需求。
bash
sudo apt-get update
运行上述代码,系统会连接到软件包仓库服务器,并检查是否有可用的更新版本和新的软件包。这个命令会更新本地系统中的软件包列表,以反映最新的可用软件包信息。
在运行其他apt-get
命令(如安装软件包、升级系统等)之前,通常建议先运行上述代码,确保系统获得最新的软件包列表。这样可以确保我们从最新的软件包仓库中获取软件包,并减少因为旧版本软件包而可能导致的问题。
需要注意,apt-get update
只会更新软件包列表,而不会实际下载或安装软件包。如果后面我们要安装或升级软件包,需要进一步使用apt-get install
或apt-get upgrade
才可以。
运行上述代码,如下图所示。其中紫色框内是我们输入电脑账户密码的地方。
运行上述代码,有的时候会有一些报错,如下图所示。但一般情况下,这些报错都不会影响我们后续的正常操作。
2 存储库配置
接下来,我们需要通过如下的代码,使得apt
可以通过HTTPS 来使用仓库(这个是Docker必要的条件)。
bash
sudo apt-get install ca-certificates curl gnupg
其中,ca-certificates
是一个软件包名称,它包含了一组根证书和中间证书,用于验证HTTPS 连接的安全性;安装ca-certificates
软件包可以确保系统具有最新的根证书列表。curl
是一个用于在命令行中进行网络请求的工具,它支持多种协议,如HTTP 、HTTPS 、FTP 等;安装curl
软件包可以让我们在终端中方便地进行网络请求和下载文件。gnupg
是GNU 隐私卫士(GNU Privacy Guard)的缩写,也称为GPG ;它是一个用于加密和签名数据的工具集,安装gnupg
软件包可以在系统中使用GPG密钥和加密功能。
运行上述代码,如下图所示。
接下来,我们通过如下代码,设置Docker 软件源的GPG 密钥;这个GPG是一个用于加密和签名数据的工具。
bash
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
首先,-m 0755
是设置文件或目录的权限的选项,0755
表示所有者具有读、写和执行权限,而其他用户具有读和执行权限。随后的-d /etc/apt/keyrings
指定要创建的目录路径,其创建一个名为/etc/apt/keyrings
的目录。该命令的目的是创建/etc/apt/keyrings
目录,该目录将用于存放密钥文件。
接下来,-fsSL
是curl
命令的选项,用于指定请求的方式和参数;其中,-fsSL
意味着以静默模式发送请求(不显示进度信息),并跟随重定向。其后的链接,则是要获取的GPG 密钥的URL 。再随后的|
是管道符号,用于将前一个命令的输出作为后一个命令的输入。--dearmor
用于将二进制格式的GPG 密钥转换为文本格式,并随后指定将转换后的GPG 密钥保存到/etc/apt/keyrings/docker.gpg
文件中。该命令的目的是使用curl
从指定的URL 下载Docker 软件源的GPG密钥,并将其转换为文本格式后保存。
其次,chmod
是一个用于修改文件或目录权限的命令,a+r
表示将读权限授予所有用户,最后的路径则是要修改权限的文件路径。该命令的目的是将GPG密钥文件的读权限授予所有用户,以确保所有用户都能够读取该文件中的密钥信息。
运行上述代码,如下图所示。
接下来,我们需要配置Docker存储库,代码如下。
bash
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
首先,echo
是一个用于在终端输出文本的命令,引号内的内容则是要输出的文本。这里的[arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg]
是一个APT 源的配置选项,用于指定软件体系结构和GPG 密钥的位置;其中的$(dpkg --print-architecture)
是一个子命令,用于获取当前系统的体系结构。随后的链接,则是Docker 软件源的URL。
接下来,$(. /etc/os-release && echo "$VERSION_CODENAME")
是一个子命令,用于获取当前系统的Ubuntu 版本代号(codename
),其后的/etc/os-release
文件包含有关操作系统的信息。stable
表示要使用Docker软件源的稳定版本。
随后,tee
是一个用于从标准输入读取数据并将其写入文件的命令。/etc/apt/sources.list.d/docker.list
是要写入数据的文件路径。> /dev/null
是将命令的输出重定向到空设备(null
设备),即丢弃输出。该命令的目的是使用sudo
权限将Docker 软件源的配置信息写入到/etc/apt/sources.list.d/docker.list
文件中,并将输出重定向到空设备,以避免输出到终端。
运行上述代码,如下图所示。
接下来,不知为何,按照官网的流程,我们还需要再更新一下系统的软件包列表;我们就按照官网的说法照做即可。
bash
sudo apt-get update
运行上述代码,如下图所示。
3 Docker Engine配置
接下来,我们就可以开始配置Docker Engine 自身了。配置Docker Engine的流程还是很简单的,直接执行如下的代码即可。
bash
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
其中,docker-ce
即Docker 社区版,是Docker 的核心组件;docker-ce-cli
表示Docker CLI (命令行界面),用于与Docker 进行交互和管理容器。containerd
用于管理容器的生命周期。docker-buildx-plugin
是Docker Buildx 插件,用于构建多平台的Docker 镜像;同样的,docker-compose-plugin
也是Docker Compose插件,用于定义和管理多容器应用的编排和部署。
运行上述代码,如下图所示。
4 Docker Engine配置验证
随后,我们验证一下Docker Engine的配置成功与否。通过如下的代码即可加以验证。该命令会下载一个测试映像并在容器中运行它。
bash
sudo docker run hello-world
运行上述代码,如下图所示。
出现如上图所示的字样,就说明我们的Docker Engine配置已经成功了。
需要说明的是,我们这篇文章只介绍了Docker Engine 的下载、配置方法;关于以非root 用户管理Docker 的方法,大家可以参考文章Linux系统Ubuntu以非root用户身份操作Docker的方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/132637472);关于**Docker Engine**具体的使用方法,我们将在后续的博客中加以详细的介绍。
至此,大功告成。
欢迎关注:疯狂学习GIS