在腾讯云的轻量应用服务器(Lighthouse)上部署 Spring Boot 应用并运行在 Docker 容器中,是一个非常主流且高效的做法。这不仅能实现环境隔离,还能简化部署流程。
以下是完整的操作指南,分为 准备阶段、安装 Docker、构建镜像、部署运行 和 最佳实践 五个部分。
📌 前提条件
- 一台腾讯云轻量应用服务器(建议至少 2核 4G,Spring Boot + Docker 需要一定内存)。
- 操作系统:推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8/Stream。
- 本地开发环境:已有一个可运行的 Spring Boot JAR 包(
target/your-app.jar)。 - 网络配置:确保服务器安全组/防火墙开放了所需端口(如 8080, 80, 443 等)。
✅ 第一步:登录服务器并安装 Docker
以 Ubuntu 为例(CentOS 类似,使用 yum 或 dnf):
# 1. 更新系统包
sudo apt update && sudo apt upgrade -y
# 2. 安装必要依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 3. 添加 Docker GPG key 和仓库
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
# 4. 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 5. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 6. 验证安装
docker --version
docker run hello-world
💡 提示:如果不想手动安装,可以在腾讯云控制台直接选择“Docker”镜像创建服务器,会预装好 Docker。
✅ 第二步:编写 Dockerfile
在你的 Spring Boot 项目根目录下(与 pom.xml 同级),创建一个名为 Dockerfile 的文件。
📄 Dockerfile 示例(多阶段构建,推荐)
# 第一阶段:构建阶段
FROM maven:3.8-openjdk-11 AS builder
# 设置工作目录
WORKDIR /app
# 复制 pom.xml 和源代码
COPY pom.xml .
COPY src ./src
# 构建应用(跳过测试以加快构建速度,生产环境建议取消注释测试行)
RUN mvn clean package -DskipTests
# 第二阶段:运行阶段
FROM openjdk:11-jre-slim
# 设置时区(可选,根据需求调整)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 创建非 root 用户以提高安全性
RUN groupadd -r springboot && useradd -r -g springboot springboot
# 设置工作目录
WORKDIR /app
# 从构建阶段复制 jar 包
COPY --from=builder /app/target/*.jar app.jar
# 修改文件所有者
RUN chown springboot:springboot /app/app.jar
# 切换到非 root 用户
USER springboot
# 暴露端口(根据你的 application.yml 配置)
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
⚠️ 注意:
- 如果你使用的是 JDK 17,请将
openjdk-11替换为openjdk-17。- 确保你的 Spring Boot 应用监听的是
0.0.0.0:8080,而不是localhost:8080,否则容器外无法访问。
✅ 第三步:上传代码到服务器
你可以使用 scp、rsync 或 Git 将项目上传到服务器。
# 在本地终端执行(假设服务器 IP 为 1.2.3.4,用户名是 root)
scp -r /path/to/your/springboot-project root@1.2.3.4:/opt/myapp
然后在服务器上进入项目目录:
ssh root@1.2.3.4
cd /opt/myapp
✅ 第四步:构建 Docker 镜像
# 构建镜像,标签命名为 my-springboot-app
docker build -t my-springboot-app .
构建成功后,查看镜像:
docker images
✅ 第五步:运行 Docker 容器
# 基本运行命令
docker run -d
--name my-springboot-container
-p 8080:8080
--restart unless-stopped
my-springboot-app
🔍 参数说明:
-d:后台运行。--name:容器名称。-p 8080:8080:将宿主机的 8080 端口映射到容器的 8080 端口。--restart unless-stopped:容器崩溃或服务器重启后自动重启(重要!)。
✅ 第六步:验证与应用配置
1. 检查容器状态
docker ps
docker logs -f my-springboot-container
2. 外部访问测试
在浏览器中访问:
http://<你的服务器公网IP>:8080
如果看到 Spring Boot 欢迎页或 API 响应,说明部署成功!
🚀 进阶优化建议
1. 使用 .dockerignore 文件
避免将不必要的文件(如 .git, target 中的临时文件)复制到镜像中,减小镜像体积。
.git
.gitignore
target/
.idea/
*.iml
.DS_Store
2. 挂载配置文件(外部化配置)
不要将 application.yml 打包进镜像,而是通过挂载方式传入,便于修改配置无需重新构建镜像。
docker run -d
--name my-springboot-container
-p 8080:8080
-v /opt/myapp/config/application.yml:/app/application.yml
--restart unless-stopped
my-springboot-app
并在 Dockerfile 中修改启动命令:
ENTRYPOINT ["java", "-jar", "/app/app.jar", "--spring.config.location=/app/application.yml"]
3. 使用 Docker Compose(管理更复杂的服务)
如果你有 MySQL、Redis 等依赖服务,建议使用 docker-compose.yml 统一管理。
# docker-compose.yml
version: '3.8'
services:
app:
image: my-springboot-app
ports:
- "8080:8080"
depends_on:
- mysql
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: password
restart: unless-stopped
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
然后运行:
docker-compose up -d
❗ 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 容器启动后立即退出 | JVM 内存不足或配置错误 | 检查 docker logs <container_name>;增加服务器内存或调整 JVM 参数(如 -Xmx512m) |
| 外部无法访问 | 安全组未放行端口 | 登录腾讯云控制台 → 轻量应用服务器 → 防火墙 → 添加入方向规则,开放 8080 端口 |
| 中文乱码 | 容器内缺少中文字体或编码设置 | 在 Dockerfile 中安装字体,并确保 LANG=en_US.UTF-8 或 zh_CN.UTF-8 |
| 数据库连接失败 | 容器内无法解析主机名 | 使用 docker network 或在 docker-compose 中使用服务名作为主机名 |
✅ 总结:
在腾讯云轻量应用服务器上部署 Spring Boot + Docker 的核心步骤是:安装 Docker → 编写 Dockerfile → 构建镜像 → 运行容器。配合 docker-compose 和合理的资源配置,可以实现稳定、高效的部署。
如需进一步帮助(如 Nginx 反向X_X、HTTPS 配置等),欢迎继续提问!
轻量云Cloud