2026/4/6 6:40:47
网站建设
项目流程
目录一.Docker版本二.在Ubuntu22.04上安装Docker-CE2.1.卸载旧版本如果有的话2.2.配置docker下载源2.3.安装Docker-CE2.4.实战经验2.4.1.Docker镜像源修改2.4.2.Docker 目录修改一.Docker版本在 Docker 的发展与演进过程中为了适应不同的技术需求和商业模式衍生出了多个重要版本和关联项目。理解这些版本之间的关系有助于更清晰地把握 Docker 的技术脉络。目前我们日常学习和使用的主要是Docker-CE。1. LXCLXC 是早期 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 ProjectMoby是 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 LTS2.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.json1. 卸载 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/gpgDocker 官方为 Ubuntu 系统提供的 GPG 公钥下载地址。|管道符将curl下载的内容传递给后面的gpg命令处理。sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpggpg用于处理加密密钥的工具。--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/ubuntuDocker 为 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-CEsudo 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用户组配置当前用户不在 docker 用户组中只需要将用户加入 docker 组即可。sudo usermod -aG docker $USER newgrp docker2.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://do.nark.eu.org, https://dc.j8.work, https://docker.m.daocloud.io, https://dockerproxy.com, https://docker.mirrors.ustc.edu.cn, https://docker.nju.edu.cn ] }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 和重启 Dockersudo 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就算是彻底安装完成了。