在腾讯云轻量应用服务器(Lighthouse)上通过 Docker 部署 Spring Boot 应用,流程相对标准化。以下是完整的操作步骤,涵盖从环境准备到容器运行的全过程。
1. 前置准备
在开始之前,请确保你已完成以下准备工作:
- 购买并登录:已购买腾讯云轻量应用服务器,并获取了 IP 地址、用户名(通常为
root)和密码/SSH 密钥。 - 安装 Docker:轻量应用服务器默认通常未预装 Docker,需要先安装。
- 构建镜像:本地或 CI/CD 流水线中已将 Spring Boot 项目打包成 JAR 包,并编写好
Dockerfile。
2. 安装 Docker 环境
登录到轻量服务器后,执行以下命令安装 Docker 和 Docker Compose(推荐组合使用):
# 更新软件源
sudo apt-get update
# 安装 Docker 依赖包
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker 服务并设置为开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
docker compose version
注意:如果使用的是 CentOS 系统,请将上述
apt-get相关命令替换为yum命令,或使用 Docker 官方的一键安装脚本。
3. 上传代码与构建镜像
你有两种主要方式将应用放入服务器:
方案 A:本地构建后上传镜像(推荐用于生产环境)
-
在本地电脑(开发机)上构建镜像:
# 假设你的 Dockerfile 在当前目录 docker build -t my-spring-boot-app:latest . # 查看镜像 ID docker images - 导出镜像为 tar 文件:
docker save -o app.tar my-spring-boot-app:latest - 使用
scp或 SFTP 工具将app.tar传输到轻量服务器:scp app.tar root@<服务器IP>:/tmp/ - 在服务器上加载镜像:
cd /tmp docker load -i app.tar
方案 B:直接在服务器上构建(适合测试或小项目)
- 将源码上传至服务器:
scp -r ./project root@<服务器IP>:/opt/myapp - 进入目录并构建:
cd /opt/myapp docker build -t my-spring-boot-app:latest .
4. 编写 Dockerfile (参考模板)
如果你的项目还没有 Dockerfile,请在项目根目录下创建它:
# 使用 OpenJDK 基础镜像
FROM openjdk:17-jdk-slim
# 设置工作目录
WORKDIR /app
# 复制 jar 包
COPY target/my-spring-boot-app.jar app.jar
# 暴露端口 (根据 application.yml 配置修改)
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
提示:Spring Boot 的
application.yml或application.properties中,建议将server.port设为8080(或其他非特权端口),避免直接使用 80 或 443 端口。
5. 运行容器
方式一:使用 docker run 命令
这是最简单的方式,适合快速验证:
docker run -d
--name spring-boot-app
-p 8080:8080
-e SPRING_PROFILES_ACTIVE=prod
my-spring-boot-app:latest
参数说明:
-d: 后台运行。--name: 容器名称。-p: 映射宿主机端口 8080 到容器内部 8080。-e: 设置环境变量(如数据库连接串、环境配置等)。
方式二:使用 Docker Compose (推荐管理多容器)
创建 docker-compose.yml 文件:
version: '3'
services:
app:
image: my-spring-boot-app:latest
container_name: spring-boot-app
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
- DB_HOST=mysql-container
restart: always
networks:
- app-net
networks:
app-net:
driver: bridge
启动命令:
docker compose up -d
6. 配置腾讯云防火墙与安全组
Docker 容器内的端口必须对公网开放才能被访问。
- 登录 腾讯云控制台。
- 进入 轻量应用服务器 页面,点击你的实例。
- 找到 防火墙 或 安全组 标签页。
- 添加入方向规则:
- 协议类型:TCP
- 端口范围:8080 (或你配置的端口)
- 授权对象:0.0.0.0/0 (允许所有 IP,生产环境建议限制特定 IP)
- 保存规则。
重要:轻量服务器的“防火墙”设置是独立于操作系统的。即使 Docker 运行正常,如果云控制台的安全组没放行,外部也无法访问。
7. 验证与监控
- 查看日志:
docker logs -f spring-boot-app - 查看容器状态:
docker ps - 访问应用:
在浏览器输入http://<服务器公网IP>:8080,检查是否返回预期的接口或页面。
常见问题排查
-
无法访问端口:
- 检查云服务器控制台的安全组规则。
- 检查 Linux 内部防火墙(如有):
sudo ufw status或sudo firewall-cmd --list-all。 - 确认
application.yml中的server.address是否为0.0.0.0(默认通常是,但需留意)。
-
内存不足:
- 轻量服务器配置较低时,Spring Boot 可能因 OOM 崩溃。可以在启动命令中增加 JVM 参数:
docker run ... -e JAVA_OPTS="-Xms256m -Xmx512m" ...
- 轻量服务器配置较低时,Spring Boot 可能因 OOM 崩溃。可以在启动命令中增加 JVM 参数:
-
中文乱码:
- 确保 Dockerfile 中设置了 UTF-8 编码,或在
JAVA_OPTS中添加-Dfile.encoding=UTF-8。
- 确保 Dockerfile 中设置了 UTF-8 编码,或在
通过以上步骤,你就可以成功在腾讯云轻量应用服务器上通过 Docker 部署并运行 Spring Boot 应用了。
CLOUD云枢