大家好!今天这篇教程会兼顾 CentOS 7 和 Ubuntu 系统,教你用 Docker、Kubernetes(K8s)和 Jenkins 搭建 Java 服务的自动化部署流程。这两套系统操作略有差异,但核心逻辑一致,跟着步骤走,无论用哪种 Linux 都能顺利上手~

为什么选择这三个工具?

  • Docker:把 Java 服务打包成标准化容器,彻底解决"在我这能跑,到你那就崩"的环境问题
  • Kubernetes:自动化管理容器集群,自动扩缩容、故障恢复、滚动更新全搞定
  • Jenkins:构建自动化流水线,代码提交后自动完成"构建→测试→打包→部署"全流程

三者结合,就是一套企业级的 Java 服务部署解决方案。话不多说,开始实操!

准备工作

通用环境要求

  • 一台 Linux 服务器(CentOS 7 或 Ubuntu 20.04/22.04,内存至少 2GB,K8s 对内存有要求)
  • 服务器已关闭 SELinux(否则可能影响容器运行)
  • 已安装 Java 8+(Jenkins 依赖 Java 环境)
  • 已安装 Git(用于拉取代码)

第一步:基础环境配置(分系统操作)

CentOS 7 基础配置

# 关闭防火墙(生产环境可按需配置规则,测试环境简化操作)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 关闭 SELinux(否则可能影响容器运行)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 安装基础工具
sudo yum install -y curl wget vim net-tools

Ubuntu 基础配置

# 更新系统
sudo apt update && sudo apt upgrade -y

# 关闭防火墙(测试环境简化,生产环境需配置规则)
sudo ufw disable

# 安装基础工具
sudo apt install -y curl wget vim net-tools apt-transport-https ca-certificates

第二步:安装 Docker(分系统操作)

CentOS 7 安装 Docker

# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加 Docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

Ubuntu 安装 Docker

# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加 Docker 源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

验证 Docker 安装(通用)

docker --version  # 显示版本信息即成功

第三步:安装 Kubernetes(单节点,通用操作)

我们用 Minikube 搭建单节点 K8s 集群,适合入门:

  1. 安装 Minikube:

    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
  2. 安装 kubectl(K8s 命令行工具):

    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  3. 启动 Minikube 集群:

    minikube start --driver=docker  # 用 Docker 作为驱动

注意:如果 CentOS 7 启动失败,可能是内核版本问题,可尝试指定低版本 K8s:

minikube start --driver=docker --force --kubernetes-version=v1.23.0
  1. 验证 K8s 集群(通用):

    kubectl get nodes  # 看到 STATUS 为 Ready 即成功

第四步:安装 Jenkins(分系统操作)

先安装 Java(通用,若已安装可跳过)

# CentOS 7 安装 Java
sudo yum install -y java-1.8.0-openjdk-devel

# Ubuntu 安装 Java
sudo apt install -y openjdk-8-jdk

# 验证 Java 安装
java -version  # 显示 1.8.x 版本即成功

CentOS 7 安装 Jenkins

# 添加 Jenkins 源
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 安装 Jenkins
sudo yum install -y jenkins

# 启动并设置开机自启
sudo systemctl start jenkins
sudo systemctl enable jenkins

Ubuntu 安装 Jenkins

# 添加 Jenkins 源
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

# 安装 Jenkins
sudo apt update
sudo apt install -y jenkins

# 启动并设置开机自启
sudo systemctl start jenkins
sudo systemctl enable jenkins

初始化 Jenkins(通用)

  1. 获取初始密码:

    sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  2. 访问 Jenkins:浏览器输入 http://服务器IP:8080,输入初始密码,安装推荐插件。

第五步:准备 Java 服务(通用)

用一个简单的 Spring Boot 项目演示,你也可以用自己的项目:

  1. 创建 Spring Boot 项目(通过 Spring Initializr 生成),添加一个 REST 接口:

    @RestController
    public class DemoController {
     @GetMapping("/")
     public String hello() {
         return "Hello, Docker + K8s + Jenkins on Linux!";
     }
    }
  2. 在项目根目录创建 Dockerfile

    # 基础镜像
    FROM openjdk:8-jdk-alpine
    
    # 工作目录
    WORKDIR /app
    
    # 复制 jar 包到容器
    COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
    
    # 暴露端口(与 Spring Boot 端口一致)
    EXPOSE 8080
    
    # 启动命令
    ENTRYPOINT ["java", "-jar", "app.jar"]
  3. 提交代码到 Git 仓库(GitHub/GitLab/Gitee 均可)。

第六步:配置 Jenkins 流水线(通用)

  1. 在 Jenkins 新建"流水线"项目,选择"从 SCM 获取",填写你的 Git 仓库地址。
  2. 在仓库根目录创建 Jenkinsfile

    pipeline {
     agent any
     
     tools {
         maven 'Maven'  // 需在 Jenkins 全局工具配置中添加 Maven(名称保持一致)
     }
     
     stages {
         stage('Build') {
             steps {
                 sh 'mvn clean package -DskipTests'  // 构建 Java 项目
             }
         }
         
         stage('Build Docker Image') {
             steps {
                 sh 'docker build -t demo-app:${BUILD_NUMBER} .'  // 打包镜像
                 sh 'docker tag demo-app:${BUILD_NUMBER} demo-app:latest'
             }
         }
         
         stage('Push to Minikube Docker') {
             steps {
                 sh 'eval $(minikube docker-env)'  // 连接 Minikube 内置 Docker
                 sh 'docker push demo-app:${BUILD_NUMBER}'
             }
         }
         
         stage('Deploy to K8s') {
             steps {
                 sh 'kubectl apply -f k8s/deployment.yaml'  // 部署到 K8s
                 sh 'kubectl apply -f k8s/service.yaml'
             }
         }
     }
    }
  3. 在 Jenkins 中配置 Maven:
    进入"系统管理→全局工具配置→Maven",添加 Maven 安装(命名为 Maven,与 Jenkinsfile 一致)。

第七步:创建 K8s 部署配置(通用)

在项目根目录创建 k8s 文件夹,添加两个配置文件:

  1. deployment.yaml(部署规则):

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-app
    spec:
      replicas: 2  # 运行 2 个副本
      selector:
     matchLabels:
       app: demo-app
      template:
     metadata:
       labels:
         app: demo-app
     spec:
       containers:
       - name: demo-app
         image: demo-app:latest  # 使用我们构建的镜像
         ports:
         - containerPort: 8080
         imagePullPolicy: Never  # 本地镜像不远程拉取
  2. service.yaml(访问规则):

    apiVersion: v1
    kind: Service
    metadata:
      name: demo-app-service
    spec:
      selector:
     app: demo-app
      ports:
      - port: 80
     targetPort: 8080
      type: NodePort  # 暴露端口到节点

第八步:运行部署流水线(通用)

  1. 在 Jenkins 中点击项目"立即构建",查看日志确保各阶段成功。
  2. 验证部署结果:

    # 查看运行的容器(pod)
    kubectl get pods  # 应有 2 个 Running 状态的 pod
    
    # 查看服务信息
    kubectl get svc demo-app-service  # 找到 NodePort(30000-32767 之间)
  3. 访问服务:

    minikube service demo-app-service --url  # 获取访问地址
    curl $(minikube service demo-app-service --url)  # 测试访问,应返回 Hello 消息

常见问题解决(通用)

  1. Jenkins 无权限执行 docker 命令

    sudo usermod -aG docker jenkins  # 把 jenkins 用户加入 docker 组
    sudo systemctl restart jenkins
  2. K8s 拉取镜像失败
    检查 deployment.yamlimagePullPolicy: Never 是否配置(本地镜像无需拉取)。
  3. Minikube 启动失败

    minikube delete  # 删除集群
    minikube start --driver=docker --force  # 强制重新启动
  4. Jenkins 找不到 maven
    确保"全局工具配置"中 Maven 名称为 Maven,与 Jenkinsfile 一致。

总结

无论你用 CentOS 7 还是 Ubuntu,核心流程都是:
代码提交→Jenkins 自动构建→打包 Docker 镜像→K8s 部署运行

这套流程看似复杂,但一旦搭建完成,后续部署 Java 服务只需提交代码,剩下的全自动化完成,大大提高开发效率。

如果操作中遇到问题,欢迎留言交流~ 祝大家部署顺利!


本文作者:
文章标签:程序猿Linux服务器指南运维DockerJenkinsK8s
文章标题:跨系统通用:在 Linux 上用 Docker + K8s + Jenkins 部署 Java 服务
本文地址:https://www.ducky.vip/archives/87.html
版权说明:若无注明,本文皆 iDuckie's Blog 原创,转载请保留文章出处。
最后修改:2025 年 11 月 01 日
如果觉得我的文章对你有用,请随意赞赏