Docker在Ubuntu中的部署流程

本文介绍在Linux 操作系统Ubuntu18.04及以上版本中,配置开源容器化平台和工具集Docker 的详细方法;其中,我们以配置Docker 平台的核心组件之一------Docker Engine为例来详细介绍。

首先,大家需要明确,我们常说的Docker ,其实就是指的Docker DesktopDocker 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是用于在DebianUbuntu 等基于DebianLinux 发行版中进行软件包管理的命令行工具。removeapt-get命令的一个选项,用于从系统中卸载指定的软件包。dockerdocker-enginedocker.iocontainerdrunc都是要卸载的软件包的名称,指定了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 installapt-get upgrade才可以。

运行上述代码,如下图所示。其中紫色框内是我们输入电脑账户密码的地方。

运行上述代码,有的时候会有一些报错,如下图所示。但一般情况下,这些报错都不会影响我们后续的正常操作。

2 存储库配置

接下来,我们需要通过如下的代码,使得apt可以通过HTTPS 来使用仓库(这个是Docker必要的条件)。

bash 复制代码
sudo apt-get install ca-certificates curl gnupg

其中,ca-certificates是一个软件包名称,它包含了一组根证书和中间证书,用于验证HTTPS 连接的安全性;安装ca-certificates软件包可以确保系统具有最新的根证书列表。curl是一个用于在命令行中进行网络请求的工具,它支持多种协议,如HTTPHTTPSFTP 等;安装curl软件包可以让我们在终端中方便地进行网络请求和下载文件。gnupgGNU 隐私卫士(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目录,该目录将用于存放密钥文件。

接下来,-fsSLcurl命令的选项,用于指定请求的方式和参数;其中,-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-ceDocker 社区版,是Docker 的核心组件;docker-ce-cli表示Docker CLI (命令行界面),用于与Docker 进行交互和管理容器。containerd用于管理容器的生命周期。docker-buildx-pluginDocker Buildx 插件,用于构建多平台的Docker 镜像;同样的,docker-compose-plugin也是Docker Compose插件,用于定义和管理多容器应用的编排和部署。

运行上述代码,如下图所示。

4 Docker Engine配置验证

随后,我们验证一下Docker Engine的配置成功与否。通过如下的代码即可加以验证。该命令会下载一个测试映像并在容器中运行它。

bash 复制代码
sudo docker run hello-world

运行上述代码,如下图所示。

出现如上图所示的字样,就说明我们的Docker Engine配置已经成功了。

需要说明的是,我们这篇文章只介绍了Docker Engine 的下载、配置方法;关于以非root 用户管理Docker 的方法,以及Docker Engine具体的使用方法,我们将在后续的博客中加以详细的介绍。

至此,大功告成。

相关推荐
胖毁青春,瘦解百病40 分钟前
Docker镜像源设置不生效问题排查
docker·容器
hunandede1 小时前
Ubuntu网络配置(桥接模式, nat模式, host主机模式)
网络·ubuntu·桥接模式
嘤嘤怪呆呆狗2 小时前
【开发问题记录】使用 Docker+Jenkins+Jenkins + gitee 实现自动化部署前端项目 CI/CD(centos7为例)
前端·vue.js·ci/cd·docker·gitee·自动化·jenkins
Carry_NJ3 小时前
docker-compose样例
运维·docker·容器
勇-子3 小时前
K8s 常用资源介绍
云原生·容器·kubernetes
大G哥3 小时前
k8s创建单例redis设置密码
数据库·redis·云原生·容器·kubernetes
SUNX-T3 小时前
【conda】Ubuntu 24.04 安装CUDA 12.04
linux·ubuntu·conda
勇-子5 小时前
K8s DaemonSet的介绍
云原生·容器·kubernetes
孟里啥都有.5 小时前
12.24 k8s yaml文件类型和介绍
云原生·容器·kubernetes
花晓木5 小时前
最新版本 - 二进制安装k8s1.29.2 集群
云原生·容器·kubernetes