奋斗
努力

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

云计算

在腾讯轻量应用服务器(Lighthouse)上部署 Spring Boot 应用并使用 Docker 容器化,是一个非常标准且高效的做法。这种方式不仅能简化环境依赖管理,还能实现快速迁移和弹性扩展。

以下是完整的操作指南,涵盖了从购买服务器到最终运行容器的全过程:

1. 准备工作

  • 购买/创建实例:登录腾讯云控制台,创建一台“轻量应用服务器”。
    • 镜像选择:建议选择 Ubuntu 20.04/22.04 LTS 或 Debian 11/12。这些系统对 Docker 支持良好。
    • 配置:根据应用需求选择 CPU 和内存(Spring Boot 建议至少 1GB 内存)。
    • 网络:确保开通了对应的端口(如 8080),或者后续通过安全组放行。
  • 本地打包:在你的开发电脑上将 Spring Boot 项目打包成独立的 JAR 包(使用 mvn clean package 或 gradle build)。
    • 确保项目是“可执行 jar"(即包含内嵌 Tomcat),通常不需要额外配置 spring-boot-maven-plugin 的 executable 属性,默认即可。

2. 连接服务器并安装 Docker

通过 SSH 工具(如 Xshell、FinalShell、Terminal)登录到你的轻量应用服务器。

2.1 更新系统

sudo apt update && sudo apt upgrade -y

2.2 安装 Docker

腾讯云镜像源通常已经优化过,可以直接安装:

# 安装依赖
sudo apt 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 update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

2.3 验证安装并赋予权限

docker --version
sudo usermod -aG docker $USER
newgrp docker  # 刷新用户组,无需重启服务器

3. 构建与上传镜像方案

这里推荐两种主流方案:方案 A(直接上传 Jar 构建) 适合简单场景;方案 B(本地构建后推送) 适合生产环境规范。

方案 A:直接在服务器上构建镜像(适合测试/小型项目)

如果你不想在本地写复杂的 Dockerfile,可以直接把 JAR 包传上去构建。

  1. 上传 JAR 包:

    scp your-app.jar root@your-server-ip:/root/
  2. 编写 Dockerfile:
    在 /root 目录下创建文件 Dockerfile:

    # 基于官方 OpenJDK 镜像 (版本需与编译时一致,如 17)
    FROM openjdk:17-jdk-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制 jar 包
    COPY your-app.jar app.jar
    
    # 暴露端口 (根据你的 application.yml 配置)
    EXPOSE 8080
    
    # 启动命令
    ENTRYPOINT ["java", "-jar", "app.jar"]
  3. 构建镜像:

    cd /root
    docker build -t my-springboot-app .

方案 B:本地构建并推送到私有仓库(推荐生产使用)

  1. 编写本地 Dockerfile(逻辑同上)。
  2. 构建镜像:docker build -t my-springboot-app .
  3. 登录腾讯云镜像仓库(如果要用 TCR)或直接打标签:
    # 假设没有私有仓库,仅作为本地标签
    docker tag my-springboot-app latest
  4. 传输镜像:
    由于 Docker 镜像较大,直接 scp 二进制数据不现实。建议使用 docker save 导出 tar 包再传输,或者使用 docker push/pull(需配置 TCR 私有仓库)。

    • 导出:docker save -o app.tar my-springboot-app
    • 上传:scp app.tar root@server_ip:/tmp/
    • 导入:在服务器上 docker load -i /tmp/app.tar

4. 运行容器

假设你已经有了名为 my-springboot-app 的镜像。

4.1 基础运行命令

docker run -d 
  --name springboot-container 
  -p 8080:8080 
  --restart always 
  my-springboot-app
  • -d: 后台运行。
  • -p 8080:8080: 将宿主机的 8080 映射到容器内的 8080。
  • --restart always: 容器崩溃或重启后自动恢复。

4.2 处理数据库连接(重要)

如果你的 Spring Boot 需要连接 MySQL 等数据库,有两种方式:

  1. 连接公网 IP 的数据库:在云数据库控制台中配置白名单,允许轻量服务器的公网 IP 访问。
  2. 连接宿主机内部数据库:使用 --network=host 模式(慎用,端口冲突风险)或配置 Docker 网络。

进阶:同时启动 MySQL 和 Spring Boot
推荐使用 docker-compose 编排,方便管理多个服务。

在项目根目录创建 docker-compose.yml:

version: '3'
services:
  app:
    image: my-springboot-app
    container_name: springboot-app
    ports:
      - "8080:8080"
    restart: always
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db-host:3306/mydb?useSSL=false
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=yourpassword
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: yourpassword
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - ./mysql-data:/var/lib/mysql
    restart: always

启动命令:

docker-compose up -d

5. 安全组配置(关键步骤)

仅仅在容器里开了端口是不够的,必须放行腾讯云防火墙。

  1. 登录腾讯云控制台 -> 轻量应用服务器。
  2. 点击你的实例 ID,进入详情页。
  3. 找到 安全组 标签页,点击 修改规则。
  4. 添加一条 入方向 规则:
    • 协议端口:TCP
    • 端口范围:8080 (或者你自定义的端口)
    • 授权对象:0.0.0.0/0 (允许所有 IP,生产环境建议限制为特定 IP)
  5. 保存规则。

6. 常见问题排查

  • 无法访问应用:
    • 检查安全组是否放行了端口。
    • 检查 Spring Boot 配置文件 (application.yml) 中 server.address 是否为 0.0.0.0(Docker 默认监听所有网卡,但显式指定更安全)。
    • 查看日志:docker logs springboot-container。
  • 内存不足:
    • Spring Boot 启动报错 OutOfMemoryError?在启动命令中增加 JVM 参数:
      docker run ... -e JAVA_OPTS="-Xms512m -Xmx512m" my-springboot-app

      或者修改 Dockerfile 中的 ENTRYPOINT 加入该参数。

  • 时间不同步:
    • 容器内时间可能与服务器不一致,导致 JWT 过期等问题。建议在 Dockerfile 中安装 NTP 或同步时间。

通过以上步骤,你就可以在腾讯轻量应用服务器上成功运行一个基于 Docker 的 Spring Boot 应用了。

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