一、环境说明

虚拟机:VMware Workstation Pro 17.6.4
系统:Ubuntu 24.04.4 LTS
SSH:Tabby Terminal

因为当前使用的是 VMware,考虑到安装过程可能出现意外,建议对当前系统环境拍摄快照,以便后期恢复。

拍摄快照:VMware 选中当前计算机 - 右键选中「快照」 - 「拍摄快照」。

官方安装教程参考:Install Docker Engine on Ubuntu

二、安装 Docker

2.1 验证当前系统是否安装 Docker

docker -v

docker-v
可以看到当前系统并没有安装 Docker 引擎,同时系统给出了安装语句,但我们通常建议使用 Docker 官方源安装最新版本,而不是使用 Ubuntu 自带的 docker.io(可能较旧)

如果你已经安装了docker,或者有残留以前不小心装过老版本的 Docker,官方建议先清理干净,以免冲突。
运行以下命令卸载所有冲突的软件包:

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

2.2 更新软件包索引

sudo apt update

在安装软件前推荐先执行此命令,用于刷新本地的软件包索引,这样可以确保后续安装或升级时获取的是最新版本信息。

2.3 安装依赖包

sudo apt install ca-certificates curl
  • ca-certificates:允许系统信任 HTTPS 证书,用于安全地访问网络源。
  • curl:命令行工具,用于从网络下载文件(如 Docker 的 GPG 密钥)。

install

2.4 创建用于存储 GPG 密钥的目录

sudo install -m 0755 -d /etc/apt/keyrings
  • install:一个用于复制文件和创建目录的命令,比 mkdir 和 chmod 的组合更简洁。
  • -m 0755:设置目录的权限为 0755(所有者可读、写、执行,其他用户可读和执行)。这是存储密钥目录的标准权限。
  • -d:指定要创建的是目录而不是文件。
  • /etc/apt/keyrings:APT 包管理器推荐的用于存储第三方软件仓库密钥的目录。

下载并添加 Docker 的官方 GPG 密钥

下载 Docker 官方的 GPG 密钥,并将其保存到上一步创建的目录中。

GPG 密钥用于验证 Docker 软件包的“身份”和“完整性”,这个密钥就像是 Docker 的“身份证”,Ubuntu 下载软件时会检查这个身份证,确保你下载的 Docker 软件包来自可信的源头,并且在传输过程中没有被任何人篡改或植入恶意代码。

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  • -faSL:主要作用是静默下载(不显示进度条),遇到错误时能正常报错,并且会自动跟随网址的重定向。
  • -o /etc/apt/keyrings/docker.asc:将下载的内容输出到指定文件。文件扩展名 .asc 表明这是一个 ASCII 格式的 GPG 密钥。

2.6 更改密钥文件的权限

sudo chmod a+r /etc/apt/keyrings/docker.asc
  • chmod a+r:a 代表所有用户 (all),+r 代表添加读取 (read) 权限。

2.7 把 Docker 的仓库地址添加到系统配置里

用于告诉 Ubuntu 系统,以后获取 Docker 软件包不要从 Ubuntu 自己的仓库找,而要从 Docker 官方的这个特定地址获取,并且使用指定的 GPG 密钥来验证这些软件包的真伪。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. echo "deb [arch=...] ..."
    • 用于生成一个标准的 Debian/Ubuntu 软件源条目(sources.list entry)。
  2. [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc]
    • arch=$(dpkg --print-architecture):这是一个命令替换。它会先执行 dpkg --print-architecture 命令(该命令会输出您系统的架构,如 amd64arm64),然后用输出结果替换这部分内容。这确保了软件源地址与您的系统架构匹配。
    • signed-by=/etc/apt/keyrings/docker.asc:极其重要。它明确指定了用于验证此软件源中所有软件包的 GPG 密钥的路径。这是确保软件包来自 Docker 官方而非恶意镜像的安全关键步骤。
  3. https://download.docker.com/linux/ubuntu:
    • Docker 官方软件源的地址。
  4. $(. /etc/os-release && echo "$VERSION_CODENAME")
    • 这是一处命令替换。
    • . /etc/os-release:这会执行(source)一个系统文件,读取当前 Ubuntu 版本的详细信息(例如其中包含 VERSION_CODENAME=noble)。
    • && echo "$VERSION_CODENAME":如果前一个命令成功,则输出系统代号(比如 Ubuntu 24.04 会输出 noble)。这确保了添加的软件源与你的系统版本完全匹配。
  5. stable
    • 指定要使用 Docker 的稳定版(stable)发布通道。而不是测试版(test)或夜间构建版(nightly)。
  6. | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    • |:管道符,将 echo 命令的输出传递给 tee 命令。
    • tee:一个同时输出到屏幕和文件的命令。这里与 sudo 一起使用,以便拥有向受保护目录写入的权限。
    • /etc/apt/sources.list.d/docker.list:将软件源条目写入到 /etc/apt/sources.list.d/ 目录下的一个新文件 docker.list 中。
    • > /dev/null:将 tee 命令输出到标准输出(屏幕) 的内容重定向到“空设备”,从而抑制任何输出,保持终端整洁。

查看结果:

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

link

  • 查看目标:/etc/apt/sources.list.d/docker.list
    • /etc/apt/:这是 Ubuntu 的“应用商店”(APT 包管理器)存放配置文件的核心目录。
    • sources.list.d/:这个文件夹专门用来存放第三方软件(比如 Docker、Chrome 等)的下载源地址。
    • docker.list:这是通过上面那串很长的组合命令(echo ... | sudo tee ...)刚刚自动创建出来的一个文本文件。里面记录的,正是系统去哪里下载 Docker 的具体网址。

2.8 再次更新软件包索引

因为刚添加了 Docker 的官方仓库,必须刷新一下,让系统读取到里面有哪些新软件。

sudo apt update

2.9 安装 Docker

这会安装 Docker 引擎(docker-ce)、命令行工具(docker-ce-cli)、容器运行环境(containerd.io)以及非常常用的 docker-compose-plugin 插件。

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

(安装过程中如果提示 Do you want to continue? Y/n,输入 Y 并回车确认即可。)

2.10 验证是否安装成功

docker -v

继续运行下面这个官方提供的测试镜像:

sudo docker run hello-world

至此,docker成功安装并成功运行了

2.11 开机自启

执行该命令:

sudo systemctl enable docker

再次验证:

systemctl is-enabled docker


可以看到输出是 enabled,说明 Docker 已经设置为开机自动启动了

第四步:配置免 sudo 运行

默认情况下,Docker 需要管理员权限。这就导致你每次敲命令都得带上 sudo(比如 sudo docker ps),非常繁琐。

我们可以把当前用户加入到 Docker 的专属权限组里:

  1. 将当前用户加入 docker 组:
sudo usermod -aG docker $USER
  1. 让权限配置立即生效:
newgrp docker
  1. 验证一下:
docker run hello-world

成功输出Hello from Docker! 免 sudo 成功