在京东云轻量应用服务器(Lighthouse)上部署多个 Docker 容器,整体流程与标准 Linux 服务器类似,但需注意轻量服务器的资源限制(如 CPU、内存、磁盘)和京东云控制台的特性。以下是清晰、安全、可维护的完整部署指南:
✅ 一、前提准备
-
已开通京东云轻量应用服务器
- 推荐选择 Ubuntu 22.04/20.04 或 CentOS 7.9+(推荐 Ubuntu,Docker 官方支持更佳)
- 规格建议:≥2 核 4GB 内存(多容器需预留资源,避免 OOM)
- 确保安全组放行所需端口(如 80/443/3000/8080 等)
-
SSH 登录服务器
ssh -i your-key.pem root@your-server-ip
✅ 二、安装 Docker & Docker Compose(推荐方式)
⚠️ 轻量服务器默认无 Docker,需手动安装(避免使用 snap/apt 旧版本)
▶ 方法 1:官方一键脚本(推荐)
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y curl gnupg2 software-properties-common ca-certificates
# 添加 Docker 官方 GPG 密钥和仓库(Ubuntu)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) 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 > /dev/null
# 安装 Docker Engine + CLI + Containerd
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动并设为开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 验证
sudo docker --version # 应输出 v24.x+
sudo docker run hello-world # 测试运行
▶ 安装 Docker Compose(v2.x,作为插件)
# 下载最新稳定版(自动适配架构)
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d '"' -f 4)
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version # 或 docker compose version(v2 默认命令)
✅ 提示:
docker compose(空格)是 v2 的新命令,功能等同于旧docker-compose(横杠),两者兼容。
✅ 三、部署多个容器(推荐:Docker Compose 方式)
🌟 最佳实践:用
docker-compose.yml统一管理多容器(Nginx + WebApp + Redis + MySQL 等)
▶ 示例:部署一个博客(Nginx + Ghost + MySQL)
# 创建项目目录
mkdir -p ~/blog && cd ~/blog
# 编写 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: myrootpass
MYSQL_DATABASE: ghostdb
MYSQL_USER: ghost
MYSQL_PASSWORD: ghostpass
volumes:
- ./mysql-data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
networks:
- blog-net
ghost:
image: ghost:5-alpine
restart: unless-stopped
depends_on:
- db
environment:
database__client: mysql
database__connection__host: db
database__connection__user: ghost
database__connection__password: ghostpass
database__connection__database: ghostdb
url: http://localhost:2368 # 后续由 Nginx 反向X_X
volumes:
- ./ghost-content:/var/lib/ghost/content
networks:
- blog-net
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443" # 如需 HTTPS,挂载证书后配置
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ghost-content:/usr/share/nginx/html/content:ro
depends_on:
- ghost
networks:
- blog-net
networks:
blog-net:
driver: bridge
EOF
# 编写 Nginx 配置(反向X_X Ghost)
cat > nginx.conf << 'EOF'
events { worker_connections 1024; }
http {
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://ghost:2368;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
EOF
# 启动全部服务(后台运行)
docker compose up -d
# 查看状态
docker compose ps
docker compose logs -f # 实时查看日志
✅ 成功后访问 http://你的服务器公网IP 即可看到 Ghost 博客。
✅ 四、关键运维技巧(轻量服务器特别注意)
| 场景 | 命令/建议 | 说明 |
|---|---|---|
| 资源监控 | docker stats 或 htop |
轻量服务器内存紧张,避免容器内存超限 |
| 日志查看 | docker compose logs -t --tail 100 service-name |
避免日志占满磁盘(可配置 log rotation) |
| 自动清理 | docker system prune -a --volumes -f |
定期清理停止容器、悬空镜像、构建缓存(谨慎执行) |
| 数据持久化 | ✅ 务必用 volumes 或 bind mounts |
轻量服务器系统盘小,避免容器内写入大量数据 |
| HTTPS 支持 | 使用 Nginx Proxy Manager 或 Certbot + Nginx | 京东云未提供负载均衡 SSL 卸载,需自行配置 |
| 备份策略 | 定时 tar -czf backup-$(date +%F).tar.gz ./mysql-data ./ghost-content |
存至京东云对象存储(JSO)或本地快照 |
✅ 五、进阶建议(生产就绪)
-
🔐 安全加固
- 创建非 root 用户运行容器(
user: "1001:1001") - 禁用
--privileged,限制 capabilities(如--cap-drop=ALL) - 使用
.env文件管理敏感变量(避免硬编码密码)
- 创建非 root 用户运行容器(
-
📦 镜像优化
- 使用
alpine基础镜像减小体积 - 多阶段构建(Multi-stage build)减少最终镜像层数
- 使用
-
🔄 持续部署(简易版)
# 拉取新镜像 + 重启(无需停服) docker compose pull && docker compose up -d --force-recreate -
🌐 域名绑定
在京东云控制台 → 域名解析 添加 A 记录指向服务器 IP,Nginx 中将server_name your-domain.com;替换即可。
❌ 常见避坑指南
| 问题 | 原因 | 解决方案 |
|---|---|---|
Cannot connect to the Docker daemon |
Docker 未启动或用户无权限 | sudo systemctl start docker + sudo usermod -aG docker $USER(登出重登) |
| 容器启动后立即退出 | 环境变量缺失/配置错误/端口冲突 | docker compose logs service-name 查错;检查 depends_on 是否覆盖实际依赖(它不等待服务就绪!) |
| Nginx 无法X_X到容器 | 网络不通或 DNS 解析失败 | docker exec -it nginx sh -c "ping ghost" 测试连通性;确认 networks 同属一个自定义网络 |
| 磁盘空间不足 | 日志/镜像/构建缓存堆积 | docker system df 查看占用;配置 /etc/docker/daemon.json 设置日志大小限制 |
✅ 六、一键脚本(可选,快速初始化)
将以下保存为 setup-docker.sh 并运行:
#!/bin/bash
sudo apt update && sudo apt install -y curl gnupg2
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable docker && sudo systemctl start docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
echo "✅ Docker & Compose installed!"
如需我帮你:
- ✨ 生成特定应用(如 WordPress、Node.js + MongoDB、Java Spring Boot)的
docker-compose.yml - 🛡️ 配置 Nginx + Let’s Encrypt HTTPS 自动续签
- 📊 搭建 Prometheus + Grafana 监控多容器
- 🧩 集成京东云 JSO(对象存储)作为静态资源 CDN
欢迎随时告诉我你的具体需求,我可以为你定制完整 YAML 和部署脚本!
祝你部署顺利,轻量不“轻”性能!🚀
云知识