本指南旨在为一台全新的 Ubuntu 服务器提供一套完整、高效的标准化初始配置流程。流程涵盖了从系统基础设定、防火墙配置到 Docker 环境安装与优化的所有关键步骤。您可以按照本指南的顺序逐一执行命令,以快速搭建一个安全、稳定且高效的服务器环境。
第一步:基础系统设定
此步骤将完成系统更新、更换为国内高速软件源以及安装常用的基础工具。
-
更新并升级系统
确保系统所有软件包都处于最新的安全状态。
sudo apt-get update sudo apt-get upgrade -y
-
更换系统软件源为阿里云镜像
大幅提升后续软件的安装与更新速度。
-
备份原始文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
-
编辑源文件:
sudo nano /etc/apt/sources.list
-
删除文件内所有旧内容,然后完整复制并粘贴以下适用于 Ubuntu 24.04 的阿里云源内容:
deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
-
保存并退出 (在
nano
编辑器中,按Ctrl+X
,然后按Y
,最后按Enter
)。 -
刷新软件包列表以使新源生效:
sudo apt-get update
-
-
安装常用工具集
sudo apt-get install -y curl wget git vim htop net-tools
第二步:防火墙 (UFW) 设定
建立基础的网络安全防护,仅开放必要的服务端口。
-
设定防火墙规则(先放行再启用)
# 允许 SSH (端口 22),这是最重要的,防止您被锁在外面 sudo ufw allow ssh # 允许 HTTP (端口 80),用于 Web 服务 sudo ufw allow 80 # 允许 HTTPS (端口 443),用于安全的 Web 服务 sudo ufw allow 443
-
启用防火墙
sudo ufw enable
(当系统提示
Command may disrupt existing ssh connections
时,输入y
并按 Enter) -
检查防火墙状态,确认规则已生效
sudo ufw status verbose
第三步:Docker 安装与配置 (已整合国内镜像)
此流程将直接使用国内镜像完成 Docker 的安装与配置,确保安装和后续使用过程中的速度。
-
安装 Docker 的前置作业
sudo apt-get install -y ca-certificates curl gnupg
-
添加 Docker 官方 GPG 安全密钥
sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
-
创建 Docker 的 APT 软件源文件 (直接使用阿里云镜像)
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
安装 Docker 引擎
sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
创建 Docker 镜像加速器配置文件 (使用2025年7月实测可用镜像)
根据最新测试,多个旧的公共镜像站已失效。以下是当前实测可用且稳定性较高的公共镜像源。
-
执行以下命令,配置 Docker 使用一组可靠的国内镜像:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.xuanyuan.me", "https://docker.1ms.run", "https://docker.m.daocloud.io" ] } EOF
-
-
重启 Docker 服务使所有配置生效
sudo systemctl restart docker
-
将您当前的用户加入 docker 用户组(免去
sudo
)sudo usermod -aG docker $USER
第四步:最终验证
-
登出并重新登入
请立即断开您当前的 SSH 连接,然后重新登入一次您的服务器。 这样用户组权限的变更才会完全生效。
-
验证配置与运行状态
在您重新登入服务器之后,执行以下命令:
-
验证镜像加速器是否生效:
docker info | grep -A 3 -i "Registry Mirrors"
(您应该能看到已配置的镜像地址列表)
-
验证 Docker 是否能正常运行:
docker run hello-world
(您应该能看到 "Hello from Docker!" 的成功信息)
-
-
验证镜像是从哪个加速器拉取的 (可选的高级技巧)
docker inspect 命令通常只会显示镜像的官方来源 (docker.io),而不会显示它是从哪个镜像加速器下载的。要查看详细的拉取过程,最可靠的方法是监控 Docker 服务的实时日志。
-
第一步:删除本地已有的镜像 (以便重新拉取)
docker rmi hello-world
-
第二步:在一个终端窗口中,开始监控 Docker 日志
sudo journalctl -fu docker.service
(这个命令会持续打印新的日志,请保持这个终端窗口打开)
-
第三步:打开另一个新的终端窗口,执行拉取命令
docker pull hello-world
-
第四步:观察第一个窗口的日志输出
在日志中,你会看到 Docker 按顺序尝试连接你在 daemon.json 中配置的镜像站。如果第一个失败,它会尝试第二个,以此类推。通过观察日志中的网络请求地址,您就可以判断出最终是从哪个镜像站成功拉取了镜像。
-
⚠️ 特别提醒:关于本地机房的DNS问题
请注意,以上是一套在正常网络环境下的标准配置流程。
根据我们之前的排错经验,如果您的服务器处于有严格网络策略的本地机房,可能会遇到 DNS 限制问题。如果您在执行 docker run hello-world
时再次遇到 Name or service not known
或网络超时错误,这意味着这台新服务器也受到了同样的网络策略限制。
届时,您需要优先联系您的网络管理员,请求他们为您的服务器IP放行对以下域名的解析和访问:
-
docker.xuanyuan.me
-
docker.1ms.run
-
docker.m.daocloud.io
附录:深度疑难排解 (当所有方法都失效时)
如果您严格执行了以上所有步骤,包括重启服务器,但 docker info
中的 Registry Mirrors
依然为空,这表明您的系统环境存在非常特殊且顽固的配置问题,导致 Docker 服务无法加载自定义配置。
请按照以下步骤进行最终诊断和修复。
1. 强制 Docker 服务加载配置文件
此方法将修改 Docker 的系统服务单元,强制其在启动时必须读取我们的配置文件。
-
第一步:创建 systemd 覆盖文件
这个命令会打开一个空的编辑器,用于安全地修改 Docker 的启动行为。
sudo systemctl edit docker.service
-
第二步:粘贴以下内容
请将下面的所有内容,完整地复制并粘贴到刚刚打开的编辑器中。
[Service] ExecStart= ExecStart=/usr/bin/dockerd --config-file /etc/docker/daemon.json -H fd:// --containerd=/run/containerd/containerd.sock
-
第三步:保存并退出 (
Ctrl+X
,Y
,Enter
)。 -
第四步:用最彻底的方式重启服务
这个顺序将确保所有旧的配置和状态被清除。
sudo systemctl stop docker.socket sudo systemctl stop docker.service sudo systemctl daemon-reload sudo systemctl start docker.service
-
第五步:再次验证
docker info | grep -A 3 -i "Registry Mirrors"
执行完此步骤后,镜像加速器理应生效。如果依然无效,请继续下一步。
2. 终极诊断:查看 systemd 加载的最终配置
让我们看看 systemd
最终“学习”到的 Docker 启动命令到底是什么。
-
运行以下命令:
systemctl cat docker.service
-
分析输出:
请检查输出内容。在 # /etc/systemd/system/docker.service.d/override.conf 这一行下面,您必须看到我们添加的 ExecStart=/usr/bin/dockerd --config-file /etc/docker/daemon.json ... 这一行。
-
如果能看到,但
docker info
依然无效,说明 Docker 程序本身可能存在问题。 -
如果看不到,说明
systemd
由于某种原因忽略了我们的修改,这可能是系统权限或安全模块(如 AppArmor)的深层问题。
-
如果问题依然存在,请考虑联系专业的系统管理员或服务器提供商以获得进一步支持。