速卖通素材
奋斗

腾讯轻量应用服务器springboot docker容器?

服务器

在腾讯云的轻量应用服务器(Lighthouse)上部署 Spring Boot 应用并运行在 Docker 容器中,是一个非常主流且高效的做法。这不仅能实现环境隔离,还能简化部署流程。

以下是完整的操作指南,分为 准备阶段安装 Docker构建镜像部署运行最佳实践 五个部分。


📌 前提条件

  1. 一台腾讯云轻量应用服务器(建议至少 2核 4G,Spring Boot + Docker 需要一定内存)。
  2. 操作系统:推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8/Stream。
  3. 本地开发环境:已有一个可运行的 Spring Boot JAR 包(target/your-app.jar)。
  4. 网络配置:确保服务器安全组/防火墙开放了所需端口(如 8080, 80, 443 等)。

✅ 第一步:登录服务器并安装 Docker

Ubuntu 为例(CentOS 类似,使用 yumdnf):

# 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,否则容器外无法访问。

✅ 第三步:上传代码到服务器

你可以使用 scprsync 或 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-8zh_CN.UTF-8
数据库连接失败 容器内无法解析主机名 使用 docker network 或在 docker-compose 中使用服务名作为主机名

总结
在腾讯云轻量应用服务器上部署 Spring Boot + Docker 的核心步骤是:安装 Docker → 编写 Dockerfile → 构建镜像 → 运行容器。配合 docker-compose 和合理的资源配置,可以实现稳定、高效的部署。

如需进一步帮助(如 Nginx 反向X_X、HTTPS 配置等),欢迎继续提问!

未经允许不得转载:轻量云Cloud » 腾讯轻量应用服务器springboot docker容器?