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.js

app.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 应用的理想环境。

THE END