前言
前面的文章里,我们算过怎么按需求挑一台能跑Docker的VPS《如何计算自己的Docker需求,从而挑选合适的VPS?》,现在就来具体讲一讲Docker在VPS上应该怎么安装,以及为什么值得安装,装完后的验证和国内拉镜像慢的解法也一并给大家附上。
Docker解决的是什么问题
很多部署上的糟心事,根源都是环境不一致:本地开发一切正常,传到服务器就报错;服务器重装一次系统,照着记忆装环境,装完应用行为又和之前对不上。差别就藏在运行时版本、系统库、各种配置里,这些碎片单靠人脑记、手工装,很难保证两台机器完全一样。
Docker的思路是把应用连同它需要的运行时、依赖、配置一起打包成镜像,拿到任何一台装了Docker的机器上,跑出来的结果都一样。环境从"逐台手工复刻"变成"一个镜像到处运行",上面那些糟心事就没有生存空间了。
隔离性是附带的好处。容器之间、容器和宿主机之间存在边界,一个应用被拖垮或者出安全问题,不容易波及同一台机器上的其他服务——特别是在VPS这种一机多用的场景里,这条边界很有价值。
省资源
想在VPS上同时跑多个互不干扰的服务,传统做法是开虚拟机。但每台虚拟机都要装一整套操作系统,内存和磁盘的开销以GB计,2GB内存的VPS开一个虚拟机就所剩无几。
容器共享宿主机的内核,每个容器只需要带上应用自己依赖的那一小部分,开销通常以MB计。同样一台2GB的小机器,开虚拟机捉襟见肘,跑网站、数据库、缓存这几样容器却绰绰有余。对按内存定价的VPS来说,这部分差价是实打实省下来的。
一行命令起一个服务
Docker化之后的部署体验也很不一样。传统部署要装运行时、配环境变量、解决依赖冲突,换台机器全部重来;容器化之后,一行命令就能把服务跑起来:
docker run -d -p 80:80 nginx 这条命令让Docker拉取nginx镜像并在后台启动一个容器:-d 表示在后台运行,-p 80:80 是把主机的80端口映射到容器的80端口,外面访问主机IP就能直接摸到这个nginx。
版本管理也很省心。镜像是不可变的,每个版本都有自己的标签,升级出问题时,把容器退回上一个标签的镜像重新启动就行,不用在一堆系统改动里翻找原因。

在Ubuntu上安装Docker
Ubuntu用户注意一点:系统自带源里有个 docker.io 包,能装但版本更新滞后,建议按下面的官方源方式安装。
先更新软件包列表:
sudo apt update
sudo apt upgrade -y 安装依赖包,作用是让apt支持HTTPS方式的软件源:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common 添加Docker官方的GPG密钥(curl是常用的命令行下载工具,GPG密钥用来验证后续下载的软件包确实来自官方、没有被篡改):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 把官方软件源写进apt的源列表:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list 安装Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io 在CentOS上安装Docker
注意:CentOS 7和8已经先后停止维护,新开的机器建议直接选Ubuntu 22.04/24.04,或者Rocky Linux、AlmaLinux这类仍在维护期的发行版,我现在使用的 VMRack 的洛杉矶VPS,就可以一键部署/重装这些系统,很方便。下面的操作步骤在Rocky和Alma上同样适用。
安装依赖包:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker官方软件源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 安装Docker:
sudo yum install -y docker-ce docker-ce-cli containerd.io 装完之后:启动、验证、免sudo
启动Docker并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker 确认版本并跑一个最小容器验证——能看到hello-world的欢迎信息,才算真正装好:
docker --version
docker run hello-world 日常操作每次都带sudo很麻烦,把当前用户加进docker用户组:
sudo usermod -aG docker $USER 配置完成后要重新登录SSH才会生效,验证方法很简单:不带sudo执行 docker ps 能正常输出,就说明配置成功了。
国内拉镜像慢怎么办
镜像仓库的服务器在国外,直连拉取的速度全看运气,经常卡在半天拉不下来。解法是配置镜像加速器,等于给拉取动作换一条近路。
两条路任选:
1.用1Panel面板的话最省事,安装时,也能顺便把Docker也安装了,它还内置了许多镜像加速配置,可视化管理容器、看日志都方便。
2.手动配置的话,编辑 /etc/docker/daemon.json文件,把加速服务的地址填进去:
{ "registry-mirrors": ["https://<你的加速地址>"]} 保存后执行 sudo systemctl restart docker 重启服务生效。加速地址从你选定的加速服务页面获取即可,各家地址会调整,以服务方公告为准。
常用的几个地址:
https://docker.m.daocloud.io(DaoCloud)https://docker.1ms.run(毫秒镜像)https://docker.xuanyuan.me(轩辕镜像)
注意:
旧地址可能已失效:一些老旧的公共加速源(如网易
hub-mirror.c.163.com、中科大源等)可能已无法使用,配置时建议避开。云厂商内网加速:如果你使用的是阿里云、腾讯云或华为云的服务器,可以优先在对应云厂商的控制台获取专属的内网加速地址,通常比公共源更稳定、速度更快。
仅对 Docker Hub 生效:
registry-mirrors主要加速的是docker.io(Docker Hub)的镜像,对于其他仓库(如ghcr.io)不一定生效。JSON 格式严格:编辑
daemon.json时注意格式,多一个逗号都可能导致 Docker 启动失败。改完后建议先用docker info验证,如果报错,再检查文件格式。
总结
Docker值不值得装,看两件事:
环境一致性和资源开销——镜像把"换个地方就跑不起来"的问题连根拔掉
容器把小内存VPS的每一MB都用在了刀刃上。
安装的套路也简单:配置官方源、装docker-ce、启动后用hello-world验证,Ubuntu和CentOS系只是包管理器的差别。
装好之后第一件事,建议看看本站的文章《Docker容器把磁盘吃满了怎么办?》,把日志轮转和清理规则配好,让容器使用的更加稳定长久。