在 Ubuntu Server 22.04 上安装 Docker 的详细步骤

本文档详细记录了在 Ubuntu Server 22.04 上安装 Docker 的完整过程,包括解决过程中遇到的问题。希望能对读者有所帮助。

安装过程,重点需要看官方文档。https://docs.docker.com/engine/install/ubuntu/

步骤 1:卸载冲突的软件包

在安装 Docker Engine 之前,您需要卸载所有有冲突的软件包。发行版维护者在 APT 中提供了 Docker 软件包的非官方发行版。您必须先卸载这些软件包,然后才能安装 Docker Engine 的正式版本。

要卸载的非官方软件包包括:

docker.io

docker-compose

docker-compose-v2

docker-doc

podman-docker

此外,Docker Engine 依赖于 containerd 和 runc。Docker Engine 将这些依赖项捆绑为一个包:containerd.io。如果您之前安装了 containerd 或 runc,请卸载它们以避免与 Docker Engine 捆绑的版本发生冲突。

运行以下命令来卸载所有冲突的包:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

apt-get 可能会报告您没有安装这些包。

注意:卸载 Docker 时,不会自动删除存储在 /var/lib/docker/ 中的图像、容器、卷和网络。如果您想从全新安装开始,并且希望清理所有现有数据,请阅读 卸载 Docker Engine 部分。

步骤 2:更新系统软件包

首先,更新系统中的现有软件包:

sudo apt update

步骤 3:安装依赖包

安装必要的依赖包,这些包用于通过 HTTPS 获取软件仓库:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

步骤 4:添加 Docker 中科大 GPG 密钥

为了确保下载的 Docker 软件包的真实性和完整性,我们需要添加 Docker 的 GPG 密钥:

sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

可能的问题

无法下载 GPG 密钥:

错误信息:curl: (6) Could not resolve host: mirrors.ustc.edu.cn

解决方案:在网上搜索其他镜像站点。参考连接:https://blog.csdn.net/m0_46471328/article/details/138043873

背景知识:GPG 密钥用于验证软件包的完整性和真实性,确保下载的软件包没有被篡改。

镜像地址发生改变(404错误)(更新日期:2024-09-19)

如果执行 sudo curl -fsSL http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc 报以下错误:

curl: (22) The requested URL returned error: 404

这表示,镜像地址发生改变,试着通过浏览器访问,发现确实文件已经无法访问。

访问上级地址检查是否能够访问:

https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists

确认可以访问,然后给出了几个目录。这里的目录,对应的是Ubuntu的版本。

这说明,只是gpg公钥无法访问,镜像网站本身还是可以访问的。因此,我们可以手工来设置gpg公钥。请执行按照的步骤处理。

手工设置gpg公钥(更新日期:2024-09-19)

使用 vim 编辑 /etc/apt/keyrings/docker.asc 文件

sudo mkdir -p /etc/apt/keyrings (如果文件夹已经创建,这里就不需要执行了)

sudo vim  /etc/apt/keyrings/docker.asc

将 docker 的 gpg 公钥,覆盖到 docker.asc 文件中。(公钥文件来自:https://download.docker.com/linux/ubuntu/gpg)

-----BEGIN PGP PUBLIC KEY BLOCK-----

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

YT90qFF93M3v01BbxP+EIY2/9tiIPbrd

=0YYh

-----END PGP PUBLIC KEY BLOCK-----

然后再执行

sudo chmod a+r /etc/apt/keyrings/docker.asc

步骤 5:添加 Docker 中科大镜像稳定版软件源

我们使用中科大的镜像源来加快下载速度:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

查看执行结果(更新日期:2024-09-19)

查看文件

cat /etc/apt/sources.list.d/docker.list

文件内容如下,证明添加成功

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu jammy stable

可能的问题

镜像源添加失败:

错误信息:bash: /etc/apt/sources.list.d/docker.list: Permission denied

解决方案:确保使用 sudo 运行命令以获得必要的权限。

背景知识:软件源是存储软件包的服务器地址,添加 Docker 的中科大镜像源可以加快下载速度,并提高可靠性。

步骤 6:再次更新软件包

添加新的 Docker 软件源后,再次更新系统中的软件包索引:

sudo apt update

可能的问题

更新失败:

错误信息:Failed to fetch http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists/focal/stable/binary-amd64/Packages 404 Not Found

解决方案:检查 sources.list.d/docker.list 文件中的镜像源地址是否正确,并确认中科大镜像源可用。

背景知识:更新软件包索引是为了让系统知道最新的软件包信息,包括新添加的软件源中的包。

如果报错:(更新:2024-9-19)

W: GPG error: http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8

E: The repository 'http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu jammy InRelease' is not signed.

N: Updating from such a repository can't be done securely, and is therefore disabled by default.

N: See apt-secure(8) manpage for repository creation and user configuration details.

表示签名不对。请详细检查第五步的gpg公钥的处理,可以尝试手工添加密钥。

步骤 7:安装最新版本的 Docker

安装 Docker 及其依赖包:

sudo apt install docker-ce docker-ce-cli containerd.io

可能的问题

安装失败:

错误信息:E: Unable to locate package docker-ce

解决方案:确保之前步骤中的镜像源已正确添加并更新了软件包索引。

背景知识:Docker 是一个开源的平台,用于开发、交付和运行应用程序。它将应用程序及其依赖项打包到一个标准化的单元中,称为容器。

步骤 8:配置 Docker 使用镜像加速器(hub)

由于国内访问 Docker Hub 可能会有速度和连接问题,我们配置 Docker 使用腾讯云的镜像加速器:

sudo mkdir -p /etc/docker
echo '{
    "registry-mirrors": ["https://ccr.ccs.tencentyun.com"]
}' | sudo tee /etc/docker/daemon.json > /dev/null

可能的问题

无法访问镜像加速器:

错误信息:dial tcp: lookup ccr.ccs.tencentyun.com on 127.0.0.53:53: no such host

解决方案:确保配置的镜像加速器地址正确并可访问,可能需要更换其他地址。地址 127.0.0.53:53 是一个本地 DNS 缓存服务,通常是由系统的 systemd-resolved 服务提供的。

背景知识:镜像加速器可以提高从 Docker Hub 拉取镜像的速度,特别是在国内网络环境下。

步骤 9:重新启动 Docker 服务

使配置生效,重新启动 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

步骤 10:验证 Docker 安装

运行一个简单的 Docker 容器来验证安装是否成功:

sudo docker run hello-world

可能的问题

无法访问 Docker Hub:

错误信息:denied: requested access to the resource is denied unauthorized: authentication required

解决方案:通过以下命令登录 Docker Hub:

sudo docker login

按照提示输入 Docker Hub 用户名和密码即可。

网络连接问题:

错误信息:dial tcp: lookup registry-1.docker.io on 127.0.0.53:53: no such host

解决方案:配置镜像加速器并重启 Docker 服务后,再次尝试拉取镜像。

背景知识:hello-world 镜像是一个非常小的镜像,用于验证 Docker 是否正常工作。

实时查看 Docker 服务日志

你可以使用以下命令实时查看 Docker 服务的日志:

sudo journalctl -u docker.service -f

这个命令的作用是:

sudo:以超级用户权限运行命令。

journalctl:查看系统日志的命令。

-u docker.service:指定查看 Docker 服务的日志。

-f:实时查看日志输出,类似于 tail -f。

附加资源

Docker 官方文档

Docker Hub

Docker 入门指南

Docker 社区支持

总结

通过上述步骤,我成功在 Ubuntu Server 22.04 上安装并配置了 Docker。主要就是镜像地址问题,通过调整配置文件和更换镜像源,我顺利解决了这些问题。希望你也一样。

相关推荐
●VON12 分钟前
go语言的成神之路-标准库篇-os标准库
linux·运维·服务器·开发语言·后端·学习·golang
TracyGC19 分钟前
ubuntu 新建脚本shell并增加图标 双击应用实现python运行
linux·运维·ubuntu
怡雪~19 分钟前
k8s的Pod亲和性
linux·容器·kubernetes
白白白白白kkk22 分钟前
【Ubuntu】脚本自动化控制终端填充
linux·ubuntu·自动化
星河梦瑾26 分钟前
【2025最新版】搭建个人博客教程
linux·经验分享·笔记·python·安全
LCL_181 小时前
ansible 自动化运维工具(三)playbook剧本
linux·运维·自动化·ansible
IOT.FIVE.NO.11 小时前
Linux学习笔记15 何为HDD,SSD?sata?PCIE?分区,MBR,GPT分区的理解
linux·笔记·学习
Suckerbin1 小时前
linux部署ansible自动化运维
linux·运维·ansible
A5rZ1 小时前
CTF: 在本地虚拟机内部署CTF题目docker
运维·网络安全·docker·容器
码上无bug1 小时前
centos上配置yum源
linux·运维·centos·yum