Docker入门到实战:在香港VPS上容器化部署你的第一个Web应用
Docker 是近年来改变运维行业的核心技术,它让应用部署变得可重复、可移植、环境一致。对于出海建站者和独立开发者来说,掌握 Docker 意味着:不再为"在我电脑上能跑"烦恼、一条命令部署任意应用、轻松迁移服务器。本文从基础概念到实战部署,带你完成第一个容器化 Web 应用。
一、为什么用 Docker?和传统部署方式的区别
| 对比维度 | 传统部署 | Docker 部署 |
|---|---|---|
| 环境依赖 | 需要在每台服务器手动安装依赖 | 依赖打包在镜像中,环境完全一致 |
| 部署速度 | 复杂,耗时数小时 | 一条命令,秒级启动 |
| 迁移成本 | 高,需要重新配置环境 | 低,拷贝镜像即可在任何机器运行 |
| 资源隔离 | 不同应用可能冲突 | 每个容器完全隔离 |
| 版本回滚 | 繁琐 | 切换镜像 tag 即可回滚 |
二、核心概念:镜像、容器、仓库
- 镜像(Image):应用的"模板",包含代码、运行时、依赖库、配置。类比为"安装光盘"
- 容器(Container):镜像运行起来的实例,是真正在运行的进程。类比为"从光盘安装好的程序"
- 仓库(Registry):存储和分发镜像的地方。Docker Hub 是最大的公共仓库,你也可以自建私有仓库
- Dockerfile:描述如何构建镜像的文本文件,类似"安装说明书"
- Docker Compose:用 YAML 文件定义和运行多容器应用(如同时启动 Web + 数据库 + Redis)
三、在香港 VPS 上安装 Docker
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装 Docker 官方一键脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 将当前用户加入 docker 组(避免每次都要 sudo)
sudo usermod -aG docker $USER
newgrp docker
# 验证安装
docker --version
docker run hello-world看到 "Hello from Docker!" 输出说明安装成功。
安装 Docker Compose
sudo apt install docker-compose-plugin -y
docker compose version四、实战一:运行一个现成的 Nginx 容器
# 拉取 Nginx 官方镜像并运行
docker run -d \
--name my-nginx \
-p 8080:80 \
--restart unless-stopped \
nginx:latest参数说明:
-d:后台运行--name my-nginx:给容器起个名字-p 8080:80:将宿主机 8080 端口映射到容器 80 端口--restart unless-stopped:服务器重启后自动启动容器
运行后,浏览器访问 http://你的VPS_IP:8080,应该能看到 Nginx 欢迎页。
常用容器管理命令
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(包括已停止的)
docker logs my-nginx # 查看容器日志
docker stop my-nginx # 停止容器
docker start my-nginx # 启动容器
docker rm my-nginx # 删除容器(需先停止)
docker images # 查看本地镜像列表五、实战二:用 Dockerfile 构建自己的应用镜像
以一个简单的 Node.js Express 应用为例:
项目结构
myapp/
├── Dockerfile
├── package.json
└── app.jsapp.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Docker on HK VPS!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});Dockerfile
# 使用官方 Node.js 18 精简版镜像作为基础
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 先复制 package.json,利用 Docker 层缓存
COPY package*.json ./
# 安装依赖
RUN npm install --production
# 复制应用代码
COPY . .
# 声明应用监听的端口
EXPOSE 3000
# 容器启动时执行的命令
CMD ["node", "app.js"]构建并运行
# 在 myapp/ 目录下构建镜像
docker build -t myapp:v1 .
# 运行容器
docker run -d \
--name myapp \
-p 3000:3000 \
--restart unless-stopped \
myapp:v1
# 测试
curl http://localhost:3000六、实战三:用 Docker Compose 部署 WordPress + MySQL
创建 docker-compose.yml:
version: '3.8'
services:
db:
image: mysql:8.0
container_name: wp-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: your_wp_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
container_name: wp-app
restart: unless-stopped
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: your_wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
depends_on:
- db
volumes:
db_data:
wp_data:# 启动所有服务
docker compose up -d
# 查看运行状态
docker compose ps
# 查看日志
docker compose logs -f wordpress访问 http://你的VPS_IP:8080,即可看到 WordPress 安装向导,整个过程不需要手动安装 PHP、MySQL,Docker 自动处理所有依赖。
七、配合 Nginx 反向代理使用 HTTPS
通常不建议直接暴露容器端口,而是用宿主机的 Nginx 做反向代理,提供 HTTPS 支持:
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080; # 代理到 WordPress 容器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
}
}总结
Docker 让服务器运维从"手工艺"变成"工程化"。掌握本文的基础后,你可以:
- 🐳 一条命令部署任何开源应用(WordPress、Ghost、Nextcloud 等)
- 📦 打包自己的应用,在任何服务器上无缝运行
- 🔄 轻松迁移:换服务器只需导出数据卷,新机器上
docker compose up即可
后浪云香港云服务器预装了 Ubuntu 22.04,开箱即可安装 Docker,是学习和生产部署 Docker 应用的理想环境。
版权声明:
作者:后浪云
链接:https://idc.net/help/442615/
文章版权归作者所有,未经允许请勿转载。
THE END
