当前位置: 首页 > news >正文

【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):动态获取当前系统的架构(如 amd64arm64),确保源地址与您的系统架构匹配。

      • signed-by=/etc/apt/keyrings/docker.gpg:明确指定用于验证此软件源的密钥文件位置,这是最新版本 Ubuntu 的安全要求。

      • https://download.docker.com/linux/ubuntu:Docker 为 Ubuntu 提供的官方软件源地址。

      • $(lsb_release -cs):动态获取当前系统的 Ubuntu 代号(如 jammyfocal),确保源地址与您的系统版本匹配。

      • 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.更新本地的软件包列表

执行完以上所有命令后,您就已经成功地:

  1. 安装了必要的工具。

  2. 下载并信任了 Docker 的官方加密密钥。

  3. 添加了 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 同步常用的公共镜像。当你配置了镜像源后:

  1. 你的 Docker 客户端不会直接请求 docker.io (Docker Hub)。

  2. 而是去请求你配置的镜像源服务器(例如 https://docker.mirrors.ustc.edu.cn/)。

  3. 如果该镜像源上有你需要的镜像,它会直接返回给你,速度极快。

  4. 如果它没有(比如是一个很冷门的镜像),它会自动去 Docker Hub 拉取,缓存到本地,再返回给你。

这样可以极大地提升在国内拉取 Docker 镜像的速度和稳定性。

修改镜像源的过程

第 1 步:编辑配置文件 /etc/docker/daemon.json

这个文件是 Docker 守护进程(dockerd)的主要配置文件。Docker 在启动时会读取这个文件来应用各种自定义配置。

  • 命令:你需要使用文本编辑器(如 vimnano)来创建或修改这个文件。通常需要使用 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就算是彻底安装完成了。

http://www.dtcms.com/a/342937.html

相关文章:

  • 漫谈《数字图像处理》之平滑
  • 智能编码工具:GitHub Copilot 的深度应用与集成
  • 用OpencvSharp编写视频录制工具
  • HTTP/2 性能提升的核心原因
  • Vue2 ElementUI Upload组件http-request用法
  • (二十一)深入了解AVFoundation-编辑:导出视频与格式转换的全流程
  • 全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions
  • DeepSeek-V3.1 发布,迈向 Agent 时代的第一步
  • 0821 sqlite3_get_table函数(数据库函数的补充)
  • Nacos-9--认识Nacos中的Distro协议(Nacos高可用的实现原理)
  • visual studio编译的软件查找所依赖的运行库方法
  • 基于单片机智能路灯控制
  • 学习嵌入式第三十四天
  • 杂记 07
  • BGP高级特性
  • AI论文速读 | 多模态能否助力时间序列预测?时序预测中融合文本的边界与条件
  • Oracle CLOB类型转换
  • 数据分析三剑客
  • 如何解读京东按图搜索(拍立淘)API(jd.item_search_img)的返回值
  • AI大模型支持下的:CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
  • JVM-(7)堆内存逻辑分区
  • 3个脱节,5大特征,1套方法:破解AI落地难题
  • 37、需求预测与库存优化 (快消品) - /供应链管理组件/fmcg-inventory-optimization
  • 【互动屏幕】大屏拼接在数字展厅展示上有哪些优势?
  • (CVPR-2025)通过频率分解实现身份保持的文本到视频生成
  • 【音视频】闭合GOP和开放GOP
  • 旅游小程序开发指南
  • 第三阶段数据库-5:数据库的主键,索引,约束,表间关系的图形化操作
  • 8.Shell脚本修炼手册---sed工具的基本使用
  • HarmonyOS 实战:6 种实现实时数据更新的方案全解析(含完整 Demo)