【Docker】在Ubuntu22.04上安装Docker
目录
一.Docker版本
二.在Ubuntu22.04上安装Docker-CE
2.1.卸载旧版本(如果有的话)
2.2.配置docker下载源
2.3.安装Docker-CE
2.4.实战经验
2.4.1.Docker镜像源修改
2.4.2.Docker 目录修改
一.Docker版本
在 Docker 的发展与演进过程中,为了适应不同的技术需求和商业模式,衍生出了多个重要版本和关联项目。理解这些版本之间的关系,有助于更清晰地把握 Docker 的技术脉络。目前,我们日常学习和使用的主要是 Docker-CE。
1. LXC
LXC 是早期 Linux 容器技术的实现,为 Docker 的诞生奠定了技术基础。最初版本的 Docker 直接使用 LXC 作为其底层容器运行时来管理内核的命名空间和控制组。尽管现在直接使用 LXC 的用户相对较少,但作为一个基础项目,它仍在持续开发和维护中。
2. Libcontainer
为了掌握发展的主动权,实现更深度的优化和跨平台一致性,Docker 从 0.9 版本开始引入了自研的 libcontainer 项目,用以替代 LXC。这是一个用 Go 语言编写的库,它直接操作内核的容器化功能,不再依赖外部工具。到 1.10 版本,Docker 彻底移除了对 LXC 的依赖。在后续的 1.11 版本中,Docker 将 libcontainer 的核心功能拆分并捐赠给了开放容器倡议(OCI),从而催生了 runC。如今,libcontainer 已成为 runC 的底层核心,而 runC 则发展成了容器运行时的行业标准参考实现。
3. Moby Project
Moby 是 Docker 公司发起的一个开源项目,旨在为容器生态系统提供一个模块化的基础组件库。它可以被理解为一个“乐高套件”,开发者可以从中选取所需组件来组装自己的容器化系统。当前 Docker 引擎(即 dockerd
)的开源版本正是从 Moby 项目中的同名组件衍生而来,并使用 containerd 作为其标准的容器运行时。Moby 代表了 Docker 技术的上游开源核心。
4. Docker Community Edition (CE)
Docker-CE 是 Docker 公司提供的免费开源版本,CE 即社区版。其核心组件(如 Docker 引擎、CLI 工具)均来源于 Moby 等上游开源项目。Docker-CE 面向广大开发者和爱好者,提供了体验 Docker 全部核心功能的免费途径,是我们目前学习和使用的标准版本。
5. Docker Enterprise Edition (EE)
Docker-EE 是 Docker 的企业版,是一个需要付费的商业化产品。它在 Docker-CE 的组件基础之上,额外集成了诸如高级镜像管理、安全扫描、图形化管理界面等企业级功能,并提供了由官方保障的商业技术支持与服务,旨在满足大规模企业生产环境对安全、合规和运维的更高要求。
总而言之,从最初的 LXC 到自研的 libcontainer,再到推动行业标准的 runC 和模块化的 Moby 项目,最终衍生出面向社区的 Docker-CE 和面向企业的 Docker-EE,这一过程清晰地展现了 Docker 从依赖外部技术到实现完全自主,并最终走向全面开源和商业化的发展路径。
二.在Ubuntu22.04上安装Docker-CE
确定CPU,可以看到我们的是X86_64,是支持的,如果是arm一般会显示 aarch64,确定操作系统版本,本次我们使用的是Ubuntu 22.04.3 LTS
2.1.卸载旧版本(如果有的话)
卸载旧版本,如果是新购买的云服务器是没有的,比如输入docker并没有这个命 令,就不需要卸载
如果有的话,就需要删除
sudo apt-get remove docker docker-engine docker.io containerd runc
当然卸载历史版本
#卸载软件
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y #删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd #这个是老师修改后的目录,根据实际情况设置
sudo rm -rf /data/var/lib/docker
sudo rm -rf /etc/docker/daemon.json
1. 卸载 Docker 软件包
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
-
目的:使用
apt-get purge
命令(而不仅仅是remove
)来卸载软件包并删除它们所有的配置文件。 -
包含组件:
-
docker-ce
: Docker 社区版引擎的核心包。 -
docker-ce-cli
: Docker 命令行工具。 -
containerd.io
: 容器运行时,Docker 依赖它来管理容器生命周期。 -
docker-buildx-plugin
: 用于支持多平台镜像构建的插件。 -
docker-compose-plugin
: 官方提供的 Docker Compose 插件(通过docker compose
命令使用)。 -
docker-ce-rootless-extras
: 允许以非 root 用户身份运行 Docker 守护进程的扩展包。
-
-
-y
参数:自动确认操作,避免需要手动输入 “yes”。
2. 删除默认的 Docker 数据和运行时目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
-
目的:这是最关键的一步,用于彻底删除 Docker 和 Containerd 的所有持久化数据。
-
删除的内容包括:
-
所有下载的镜像。
-
所有创建过的容器(即使已停止,其可写层也存储在这里)。
-
所有的卷、网络配置、构建缓存等。
-
如果不删除这些目录,未来重新安装 Docker 时,可能会看到旧的数据和镜像。
-
3. 删除自定义的数据目录和配置文件(根据实际情况)
sudo rm -rf /data/var/lib/docker
sudo rm -rf /etc/docker/daemon.json
-
目的:清理非默认路径的残留文件。
-
/data/var/lib/docker
:如果您之前通过修改/etc/docker/daemon.json
中的data-root
配置项,将 Docker 的默认数据目录更改到了这个位置,那么就必须手动删除它。这是完全卸载的关键。 -
/etc/docker/daemon.json
:删除 Docker 守护进程的配置文件。如果您曾在此文件中进行过自定义配置(如设置镜像加速器、修改默认存储目录等),下次全新安装时需要重新配置。
2.2.配置docker下载源
1. 安装 curl 工具
sudo apt install curl -y
-
作用:安装一个名为
curl
的命令行工具。 -
解释:
curl
用于通过各种网络协议(如 HTTP、HTTPS)在服务器之间传输数据。后续的命令需要用它来从 Docker 官网下载加密密钥(GPG key)。-y
参数表示自动确认安装,省去手动输入 “yes”。
2. 创建gpg key目录
sudo mkdir -m 0755 -p /etc/apt/keyrings
-
作用:创建一个用于存储软件源认证密钥的目录。
-
解释:
-
sudo mkdir
:以管理员权限创建目录。 -
-p
:确保如果父目录不存在,则一并创建。 -
-m 0755
:设置新目录的权限为0755
(所有者可读可写可执行,其他用户可读可执行),这是一个存放重要密钥的标准且安全的权限。 -
/etc/apt/keyrings
:这是 Ubuntu 系统标准存放 APT 软件源 GPG 密钥的目录。
-
3. 下载并导入 Docker 的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
-
作用:从 Docker 官网下载加密密钥,并将其转换为 APT 包管理器能够识别的格式,然后保存到上一步创建的目录中。
-
解释:
-
curl -fsSL
:-
-f
: 静默失败(不输出错误页面)。 -
-s
: 静默模式(不显示进度或错误信息)。 -
-S
: 与-s
配合,在失败时显示错误。 -
-L
: 如果请求的页面发生了重定向,自动跟随重定向。
这些参数保证了下载过程安静且可靠。
-
-
https://download.docker.com/linux/ubuntu/gpg
:Docker 官方为 Ubuntu 系统提供的 GPG 公钥下载地址。 -
|
:管道符,将curl
下载的内容传递给后面的gpg
命令处理。 -
sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
:-
gpg
:用于处理加密密钥的工具。 -
--dearmor
:将可读的 ASCII 格式密钥(armored)转换为二进制格式(de-armored),这是 APT 所要求的格式。 -
--yes
:自动确认操作。 -
-o ...
:指定输出文件的位置和名称(/etc/apt/keyrings/docker.gpg
)。
-
-
为什么需要这一步?
GPG 密钥用于验证从 Docker 源下载的软件包是否确实由 Docker 官方签名发布,且未被篡改。这是系统安全的重要保障。
4. 创建 Docker 软件源列表文件
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
作用:生成一个文件,其中包含了 Docker 官方软件源的地址信息。
-
解释:
-
echo
:输出一段文本。 -
deb ...
:这是一个标准的 Debian/Ubuntu 软件源格式定义。-
[arch=$(dpkg --print-architecture)
:动态获取当前系统的架构(如amd64
,arm64
),确保源地址与您的系统架构匹配。 -
signed-by=/etc/apt/keyrings/docker.gpg
:明确指定用于验证此软件源的密钥文件位置,这是最新版本 Ubuntu 的安全要求。 -
https://download.docker.com/linux/ubuntu
:Docker 为 Ubuntu 提供的官方软件源地址。 -
$(lsb_release -cs)
:动态获取当前系统的 Ubuntu 代号(如jammy
,focal
),确保源地址与您的系统版本匹配。 -
stable
:指定使用 Docker 的稳定版发布通道。
-
-
| sudo tee /etc/apt/sources.list.d/docker.list
:将echo
输出的内容通过管道传递给tee
命令,该命令以管理员权限将内容写入到/etc/apt/sources.list.d/docker.list
文件中。 -
> /dev/null
:将tee
命令在标准输出(屏幕)上的显示重定向到“黑洞”,让命令行界面保持干净。
-
为什么单独创建 docker.list
文件?
将 Docker 的源配置放在独立的文件(/etc/apt/sources.list.d/docker.list
)中是一个非常好的实践,便于管理(启用、禁用、删除)而不会弄乱系统默认的 sources.list
文件。
5.更新本地的软件包列表
执行完以上所有命令后,您就已经成功地:
-
安装了必要的工具。
-
下载并信任了 Docker 的官方加密密钥。
-
添加了 Docker 的官方软件源地址。
要完成整个配置,您还必须执行以下命令来更新本地的软件包列表:
sudo apt-get update
这个命令会让 APT 包管理器去读取新添加的 Docker 软件源,获取可用软件包及其版本信息。之后,您就可以使用 sudo apt-get install docker-ce
来安装 Docker 了。
2.3.安装Docker-CE
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
安装时间还是有一点小长的,我们耐心等待即可。
如果这个安装过程中出现报错,我们可以去查看日志
#journalctl 是操作系统日志查看命令 #-e 表示从末尾看 #-u 表示看哪个系统组件的,我们的组件是docker journalctl -eu docker
然后可以执行下面两个命令进行修复
systemctl daemon-reload systemctl start docker
我们现在可以查看一下docker的运行状况
systemctl status docker
如果没有启动,那么就需要手动启动一下
sudo systemctl start docker
接下来我们还需要配置Docker自启动
# 设置开机⾃启动
sudo systemctl enable docker
# 查看是否开机启动
sudo systemctl list-unit-files|grep docker.service
查看版本
docker version
更详细查看docker 信息
docker info
2.4.实战经验
2.4.1.Docker镜像源修改
为什么要修改 Docker 镜像源?
默认情况下,Docker 从它的官方镜像仓库 Docker Hub 拉取镜像。对于位于中国大陆的用户来说,由于网络原因,直接从 Docker Hub 拉取镜像可能会非常慢,甚至经常失败。
为了解决这个问题,国内许多高校和云服务提供商设立了 Docker 镜像源(或称镜像加速器)。镜像源就是一个代理缓存服务,它会定期从 Docker Hub 同步常用的公共镜像。当你配置了镜像源后:
-
你的 Docker 客户端不会直接请求
docker.io
(Docker Hub)。 -
而是去请求你配置的镜像源服务器(例如
https://docker.mirrors.ustc.edu.cn/
)。 -
如果该镜像源上有你需要的镜像,它会直接返回给你,速度极快。
-
如果它没有(比如是一个很冷门的镜像),它会自动去 Docker Hub 拉取,缓存到本地,再返回给你。
这样可以极大地提升在国内拉取 Docker 镜像的速度和稳定性。
修改镜像源的过程
第 1 步:编辑配置文件 /etc/docker/daemon.json
这个文件是 Docker 守护进程(dockerd
)的主要配置文件。Docker 在启动时会读取这个文件来应用各种自定义配置。
-
命令:你需要使用文本编辑器(如
vim
,nano
)来创建或修改这个文件。通常需要使用sudo
来获得 root 权限。sudo vim /etc/docker/daemon.json
-
内容:往sudo vim /etc/docker/daemon.json里面写入下面这些内容。
{"registry-mirrors": ["https://docker.1ms.run","https://docker.mybacc.com","https://dytt.online","https://lispy.org","https://docker.xiaogenban1993.com","https://docker.yomansunter.com","https://aicarbon.xyz","https://666860.xyz","https://docker.zhai.cm","https://a.ussh.net","https://hub.littlediary.cn","https://hub.rat.dev","https://docker.m.daocloud.io"] }
-
registry-mirrors
:这是一个键,它的值是一个数组,意味着你可以配置多个镜像源,Docker 会按顺序尝试(但通常一个就足够了)。 -
这里给了大量的Docker镜像源
-
第 2 步:重新启动 Docker 守护进程
仅仅修改配置文件是不够的,需要让 Docker 守护进程重新加载这个配置文件才能生效。
sudo systemctl restart docker
重启后,所有新拉取镜像的请求都会通过你配置的镜像源进行。
如何验证配置是否成功?
运行以下命令来检查当前的 Docker 配置:
sudo docker info
在输出的信息中,你应该能找到类似下面这样子的几行:
如果看到了你配置的镜像源地址,就说明配置成功了!
2.4.2.Docker 目录修改
为什么需要修改 Docker 目录?
Docker 的所有核心数据,包括:
-
镜像(Images)
-
容器(Containers)
-
卷(Volumes)
-
网络配置(Networks)
-
容器运行时数据
默认都存储在 /var/lib/docker
目录下。随着你拉取的镜像和创建的容器越来越多,这个目录会变得非常庞大,很容易耗尽系统根分区(/
)的磁盘空间,导致系统问题。
因此,在安装 Docker 之前或之后,将其数据目录规划到一个足够大的独立分区或磁盘上,是一个非常重要的运维操作。
修改 Docker 配置文件
daemon.json
我们通过配置文件来修改Docker的数据目录
1.创建新目录:
mkdir -p /data/var/lib/docker
-
-p
:确保如果/data/var/lib
路径不存在,也会被一并创建。 -
这里你创建的新目录是
/data/var/lib/docker
,这很好,因为它保持了路径的一致性,便于管理。你也可以简单地创建为/data/docker
。
2.编辑 Docker 配置文件:
sudo vim /etc/docker/daemon.json
-
这个文件是 Docker 守护进程(
dockerd
)的核心配置文件。如果文件不存在,直接创建它。
3.添加 data-root
配置:
{"data-root": "/data/var/lib/docker"
}
非常重要:JSON 格式必须正确!键和字符串必须用双引号,末尾不能有逗号。格式错误会导致 Docker 无法启动。
-
data-root
:这个配置项明确指定了 Docker 守护进程用来存储所有数据的根目录路径。修改它就意味着告诉 Docker:“你以后别再用/var/lib/docker
了,把所有东西都放到/data/var/lib/docker
这里来。”
4.重新加载 systemd 和重启 Docker:
sudo systemctl daemon-reload # 让 systemd 重新读取某个服务的配置文件
sudo systemctl restart docker # 重启 Docker 服务以应用新的配置
-
systemctl daemon-reload
:当你修改了某个服务的配置文件(比如 Docker 的docker.service
文件)时,需要运行这个命令来重新加载。但请注意:仅仅修改/etc/docker/daemon.json
通常不需要这一步,直接restart
即可。restart
操作本身会重新加载daemon.json
。不过执行一下更保险,是一个好习惯。
5.检查 Docker 状态:
sudo systemctl status docker
-
这是至关重要的一步!你必须确保 Docker 服务成功重启。如果
daemon.json
格式有误,这里会显示失败(failed
)。如果失败,需要查看日志journalctl -xe -u docker
来排查错误。
6.修改前后的变化:
-
修改前:
docker info
命令输出中,Docker Root Dir: /var/lib/docker
-
修改后:
docker info
命令输出中,Docker Root Dir: /data/var/lib/docker
这个时候我们再去查看这个目录,发现里面多了一些东西
到这里我们的Docker就算是彻底安装完成了。