QxMO的空间

Ubuntu/Debian 下 Docker 安装与使用指南

写在前面:

容器这期视频发了很久了已经,大概过去了几个月吧,没什么人看,我也不明白是我做的不太好还是太难了或没这个需求量少什么的,我已经经历做到最详细了,希望能帮到有需要的人吧

先解释一下docker和容器吧,你可以把容器理解为一个虚拟机,它和虚拟机一样,完全的隔离开来所有东西,但和虚拟机不同的是,容器是直接基于内核运行的,他的损耗几乎可以忽略不计!!!

如果你正在为项目配置环境,或者想在一台 Linux 服务器上轻松运行 Minecraft 服务器,Docker 几乎是当下最省心的方案。它用容器技术把应用和依赖打包在一起,避免了“在我机器上能跑”的经典噩梦。

这篇教程基于 Ubuntu/Debian 系列系统,Ubuntu22.04 64位,不仅提供了一步到位的安装命令,还会逐行解释这些命令背后的逻辑,帮你真正理解自己在做什么。即使你是个 Linux 新手,跟着走也能顺利完成部署——当然我更希望你能去把前面的学一学

这篇文章来自这期视频

第一步:更新与清理系统环境

在执行任何安装前,先确保系统软件包索引是最新的,同时清理可能存在的旧版 Docker,避免端口、配置文件或依赖冲突。

首先的第一步就是先对系统的包管理和软件进行一次更新

sudo apt update
sudo apt upgrade

然后就是用这条指令,彻查系统中是否已安装过 docker.iodocker-composepodman-dockercontainerdrunc 等与 Docker 相关的旧包,如果有就全部卸载。dpkg --get-selections 负责列出已安装软件,cut -f1 只截取包名,apt remove 负责移除。

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

Tips:如果你的系统从未装过 Docker,执行后可能会提示找不到这些包,这是正常现象,无需担心。


第二步:安装前置依赖

Docker 官方仓库使用 HTTPS,因此系统必须具备验证 SSL 证书的能力,以及命令行下载工具。

所以这里我们安装两个程序

sudo apt install ca-certificates curl

  • ca-certificates:包含根证书,让系统能够信任 HTTPS 网站的身份,防止后续下载密钥时报证书错误。

  • curl:命令行下载工具,用于从 Docker 官网获取 GPG 公钥。(可以用wget替代如果你会的话)


第三步:添加 Docker 官方 GPG 密钥

Linux 软件包管理器需要验证软件来源的可靠性,因此我们要先把 Docker 官方的“数字签名公钥”导入系统。

GPG密钥来自docker官方,当我们后面下载了docker时候,他会将下载下来的东西和密钥进行校验,防止下载了错误的文件或有毒的文件

sudo install -m 0755 -d /etc/apt/keyrings

这条指令意思是在 /etc/apt/ 下创建一个名为 keyrings 的目录,专门用于存放第三方软件源的 GPG 密钥。-m 0755 表示设置目录权限为 rwxr-xr-x(所有者可读写执行,其他用户可读可执行)。

然后执行这个任务——使用 curl 从 Docker 官方下载 GPG 公钥,并保存到刚才创建的目录中。

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

  • -f:如果服务器返回错误(如 404/500),直接静默失败,不显示 HTML 错误页;

  • -s:静默模式,隐藏下载进度条;

  • -S:配合 -s 使用,遇到错误时仍然显示错误信息;

  • -L:如果地址发生了 301/302 跳转,自动跟随到最终地址;

  • -o:指定保存路径。

如果上一句 curl 因为网络或证书问题下载失败,这是备用方案,使用 wget 重新下载同一份密钥。-O(大写)表示将下载内容保存到指定文件。

sudo wget -O /etc/apt/keyrings/docker.asc https://download.docker.com/linux/ubuntu/gpg

修改密钥文件的权限,给 a(所有用户)添加 r(读取)权限。这一步很重要,因为 APT 在更新源时需要读取该密钥来校验软件包签名。

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

第四步:将 Docker 仓库添加到 APT 源

我们为系统的包管理添加一下docker的官方源,告诉系统:以后可以从 Docker 官网下载 .deb 软件包。

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF

Types: deb

URIs: https://download.docker.com/linux/ubuntu

Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")

Components: stable

Signed-By: /etc/apt/keyrings/docker.asc

EOF

我们来对这又长又臭的一段东西解读一下

/etc/apt/sources.list.d/ 下新建一个名为 docker.sources 的源配置文件。这是 Ubuntu 22.04+ 等系统支持的标准 DEB822 格式。

  • tee:将左侧输入的内容同时写入文件并在屏幕回显,方便你核对;

  • <<EOF ... EOF:Here Document 语法,将多行文本整体传入 tee

  • Types:意思是告诉系统我们添加的源是.deb格式的软件包;

  • $(. /etc/os-release && echo "..."):动态读取当前系统的版本代号(如 jammynoble),确保软件源与你的系统版本严格匹配,避免跨版本安装导致依赖错误;写成这个是因为是教程方便大家直接复制使用,你也可以直接把版本号写明上去;

  • Signed-By:指向刚才下载的 GPG 密钥文件,保证后续从此源下载的软件包都经过 Docker 官方签名验证。


第五步:安装 Docker 引擎

源配置完成后,重新刷新索引,然后安装 Docker 本体及配套组件。

sudo apt update

然后我们就可以用这一条指令一键安装 Docker 全家桶

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

前面的sudo apt install 我们应该都明白是什么意思,重点是我们需要知道后面我们安装的是什么东西:

  • docker-ce:Docker 社区版(Community Edition)核心引擎,负责创建和管理容器;

  • docker-ce-cli:Docker 命令行客户端,提供我们日常使用的 docker 命令;

  • containerd.io:底层容器运行时,管理容器的生命周期(创建、启停、销毁);

  • docker-buildx-plugin:构建插件,支持多平台镜像构建(例如同时编译 x86 和 ARM 版本);

  • docker-compose-plugin:Compose 插件,让你可以使用 docker compose 命令来编排多容器应用。


第六步:启动服务并验证安装

sudo systemctl start docker

这条就是启动 Docker 守护进程(dockerd)。这是 Docker 的后台主服务,所有容器操作都由它接管。

sudo systemctl status docker

这条指令就是查看 Docker 服务的当前运行状态。如果看到绿色的 active (running)(如下图所示),说明服务已正常启动;按键盘上的 q 可退出状态查看界面。

sudo docker run hello-world

拉取并运行 Docker 官方提供的测试镜像。如果安装正确,终端会打印出一段带有 “Hello from Docker!” 的欢迎信息,证明你的 Docker 环境已经能够正常拉取镜像并运行容器。

不过很有可能你是无法运行成功的,因为docker的镜像源大多都在海外,拉取是十分艰难的,你可能需要魔法,当然,我们也可以使用国内的镜像源,但在之前的大清洗后,国内留下的镜像源也就寥寥几个,想知道还有什么可以用的可以看这个网站,我们这里以毫秒镜像站举例docker.1ms.run

镜像源的使用方法,我们可以直接在运行的时候把镜像站加在镜像名称前面,这样拉取镜像就会直接去该镜像站拉取

sudo docker run docker.1ms.run/hello-world

出现这么一段话就代表拉取成功,容器也没问题了


第七步:配置镜像加速器

当你用上面的方法拉取docker.1ms.run/hello-world 镜像后,如果你sudo docker run hello-world 你会发现它会重新拉取一个新的镜像,因为这两个镜像名字已经不一样了,系统不会认他们两个是同一个镜像

所以,我们不如把镜像源列出一个列表,让docker以后拉取镜像就去这些地方拉取

sudo mkdir -p /etc/docker

先创建 Docker 配置文件目录。-p 表示如果目录已存在则不报错,同时自动创建所需的父级目录。

然后向 Docker 守护进程写入配置文件 daemon.json,在其中填入多个镜像加速站地址。当执行 docker pull 时,Docker 会优先尝试从这些镜像站获取镜像层,从而提升下载速度。

sudo tee /etc/docker/daemon.json <<EOF

{

  "registry-mirrors": [

    "https://docker.1ms.run",

    "https://hub.rat.dev",

    "https://dockerproxy.net",

    "https://proxy.vvvv.ee"

  ]

}

EOF

最后重载daemon,让docker知道什么守护进程的变化,然后重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

现在你可以尝试去直接拉取镜像,而且你发现这会非常流畅


补充:Docker 日常操作速查

以下是使用 Docker 时最常用到的几条命令,建议熟悉。

docker pull <镜像名称>

作用:从镜像仓库(默认 Docker Hub)下载指定的镜像到本地。例如 docker pull nginx 会下载 Nginx 的最新官方镜像。

docker attach <镜像名称>

作用:依附到一个正在运行的容器的主进程上。适合查看容器的实时交互输出,但需要注意:如果你在这个窗口按 Ctrl+C,很可能会直接终止容器主进程,ctrl+p+q退出

docker logs <镜像名称>

作用:一次性打印出指定容器的历史日志输出,适合快速排查刚刚发生的错误。

docker logs -f <镜像名称>

作用:持续跟踪(follow)容器的日志输出,类似于 tail -f。你会看到一个实时滚动的日志窗口;按 Ctrl+P 然后按 Ctrl+Q 可以安全退出该跟踪模式,而不会停止容器。

docker ps

作用:列出当前正在运行中的容器,显示容器 ID、镜像名、创建时间、状态、端口映射等信息。

docker ps -a

作用:列出所有容器,包括正在运行的和已经停止的(Exited 状态)。适合查找之前创建但忘记删除的容器。

docker compose up -d

作用:在当前目录下寻找 docker-compose.ymlcompose.yml 文件,并根据其中的定义启动整个多容器应用。-d 表示在后台(detached 模式)运行。

docker rm -f <镜像名称>

作用:强制删除一个容器,无论它当前是运行中还是已停止。-f--force

docker rm <镜像名称>

作用:删除一个已经停止的容器。如果容器还在运行,不使用 -f 的话命令会报错,这是一种防止误删的安全机制。

如果你在执行过程中遇到权限问题,记得检查是否在命令前加了 sudo,或者考虑将当前用户加入 docker 用户组(执行 sudo usermod -aG docker $USER 后重新登录)。


总结

通过以上步骤,你已经完成了:

  1. 旧环境清理与系统更新;

  2. Docker 官方源的添加与可信密钥配置;

  3. Docker CE、Containerd、Buildx、Compose 等全套组件的安装;

  4. 国内镜像加速的配置;

  5. 基础容器生命周期管理命令的掌握;

  6. Minecraft 服务器镜像的拉取与运行思路。

Docker 的本质是“一次构建,到处运行”。当你习惯用容器的视角看待服务部署后,会发现无论是开 Web 服务、跑数据库,还是和朋友们联机 Minecraft,都变成了一件异常干净、可复现的事情。

祝你玩得开心,感谢观看