Docker 部署实战 (2025) - VPS 容器化应用的终极指南

在 2025 年,Docker 早就不是什么新鲜事,而是 VPS 玩家和开发者的生存必备技能。无论你是想 1 分钟拉起一个 WordPress 博客,还是 5 分钟部署一套包含监控、日志、数据库的复杂系统,Docker 都能让这些操作变得像“搭积木”一样简单。
本文将摒弃过时的旧知识(如 docker-compose),手把手教你在 Linux VPS (CentOS/Ubuntu/Debian) 上,用最现代、最标准的方式安装 Docker 及 Docker Compose V2。
传统部署软件(比如安装 MySQL):你需要下载源码或 rpm 包,手动配置 /etc/my.cnf,处理 lib 库依赖,甚至还要担心会不会把系统自带的 Python 环境搞坏……
Docker 的方式:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0
一行命令,服务即刻上线。
核心优势:
- 环境一致性:在我电脑上能跑,在你服务器上绝对也能跑。
- 隔离性:软件之间互不干扰,不想用了
docker rm直接删掉,系统干干净净,不留任何垃圾文件。 - 秒级启动:比传统虚拟机轻量得多,一台 1核 1G 的 VPS 也能跑好几个服务。
目前最推荐的安装方式是使用官方的一键脚本。它会自动识别你的系统(Ubuntu/Debian/CentOS),并安装最新的 Docker Engine 和 Docker Compose V2 插件。
连接 SSH 后,复制以下命令执行:
curl -fsSL https://get.docker.com | bash
安装完成后,执行以下命令确保 Docker 守护进程已运行:
systemctl start docker
systemctl enable docker
检查 Docker 和 Compose 的版本,确保安装成功:
docker --version
# 输出应类似:Docker version 27.x.x, build ...
docker compose version
# 输出应类似:Docker Compose version v2.x.x
# 注意:现在是 'docker compose' (中间有空格),不是老的 'docker-compose'
为了安全,建议将当前用户加入 docker 组,这样以后执行命令就不需要每次都输 sudo 了。
sudo usermod -aG docker $USER
newgrp docker
如果你使用的是海外 VPS(如 RackNerd, Vultr, AWS, GCP 等),请直接跳过此步。
在 2024-2025 年,国内访问 Docker Hub 变得异常困难,公共镜像源(如网易、中科大)经常处于不可用状态。
最佳解决方案:
- 首选:云厂商内网镜像(最稳)。
- 腾讯云 VPS:使用
https://mirror.ccs.tencentyun.com - 阿里云 VPS:登录容器镜像服务控制台,获取你的“专属加速器地址”。
- 备选:第三方代理(由于监管原因,这些地址可能随时失效,建议搜索“Docker 镜像加速 2025”获取最新列表)。
https://docker.m.daocloud.iohttps://docker.1ms.run
配置方法:
编辑 /etc/docker/daemon.json 文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io"
]
}
EOF
(注意:请根据 your 实际情况替换上面的 URL)
重启生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
光说不练假把式,我们来跑两个实际的应用。
我们运行一个 Nginx 网页服务器来测试。
docker run -d --name my-nginx -p 8080:80 nginx
-d: 后台运行 (Detached mode)。--name: 给容器起个名字,方便管理.-p 8080:80: 端口映射. 把 VPS 的 8080 端口映射到容器内部的 80 端口。
现在,在浏览器访问 http://你的IP:8080,你应该能看到 "Welcome to nginx!" 的页面。
命令行太枯燥?Portainer 是目前最流行的 Docker 网页管理后台。
# 创建数据卷(持久化保存数据)
docker volume create portainer_data
# 启动 Portainer
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
访问方式:
浏览器打开 https://你的IP:9443(注意是 HTTPS)。
首次登录设置管理员密码,选择 "Get Started",你就能通过网页直观地看到刚才运行的 Nginx 容器了!
docker run 适合跑单个临时容器。如果你要部署一个博客(WordPress + MySQL 数据库),需要两个容器配合,这时候必须用 Compose。
注意:在 2025 年,我们不再需要在文件开头写 version: '3',这是过时的写法。
创建一个目录并进入:
mkdir my-blog && cd my-blog
创建 docker-compose.yml:
services:
web:
image: nginx
ports:
- "8081:80"
restart: always
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: examplepass
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
一键启动所有服务:
docker compose up -d
(注意命令是 docker compose,中间没有连字符)
| 任务 | 旧命令 (不推荐) | 新命令 (2025 标准) |
|---|---|---|
| 启动编排 | docker-compose up -d | docker compose up -d |
| 查看容器 | docker ps | docker ps |
| 查看所有容器 | docker ps -a | docker ps -a |
| 停止容器 | docker stop <ID> | docker stop <ID> |
| 查看日志 | docker logs -f <ID> | docker logs -f <ID> |
| 清理垃圾 | - | docker system prune -a (神器,慎用) |
新手最容易忽略的一点:Docker 会修改 iptables 规则。
这意味着,即使你在 Ubuntu 上用 ufw 开启了防火墙,只要你在 Docker 里映射了端口(比如 -p 8080:80),外部依然可以直接访问该端口!
建议: 如果你的 VPS 处于公网,建议在云服务商的“安全组”或“防火墙”面板中控制端口开放,那是独立于系统之外的最安全防线。
掌握了 Docker,你就掌握了现代运维的“通关秘籍”。接下来,你可以去 Docker Hub 探索成千上万的开源软件,一键部署属于你的 RSS 阅读器、密码管理器或私人云盘。
Happy Docking!
这里是一个关于 Docker Compose 在 2025 年是否值得使用的讨论视频,可以帮助你理解技术趋势: Docker Compose 2025 年价值分析
这个视频解释了为什么即使在 Kubernetes 盛行的今天,Docker Compose 依然是中小型项目和开发环境的首选工具。