# 用 Docker 部署 Java 应用

在本文中,您将学习如何构建用于运行Spring引导应用程序的Docker镜像。

参照示例:SpringBoot

# 前置要求

容器化spring boot应用所需环境:

  1. 需要使用版本控制工具,如:SVN/Git

  2. 需及时向版本库提交代码和从代码库中更新代码

  3. 准备一台服务器:

    安装SVN/Git 客户端

    安装JDK,并设置好环境变量:JAVA_HOME

    安装Maven,并设置好环境变量:MAVEN_HOME

    安装 Docker 环境

# 实现步骤

  1. 新建一个 SpringBoot 项目

  2. 打包 SpringBoot 项目成 jar 包

  3. 配置 pom 文件

<!-- 插件节点 -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.9</version>
    <configuration>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>
  1. 编写 Dockerfile 文件
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  1. 创建、执行 pipeline
var pipeline={
    stages:{         
        compile:{
            node:'uat.example.com',
            workspace:'/root/repo',
            steps:{
                svnCheckOut(){
                    $.sh('svn co svn://svn.example.com/repo/SpringBootDocker /root/repo/SpringBootDocker');
                    $.sh('svn update SpringBootDocker');
                },
                dockerBuild(){
                    ret=$.sh('cd SpringBootDocker;mvn install dockerfile:build');
                    if(ret!=0){
                        $.abort('编译失败')
                    }
                }
            },
        },
        deploy:{
                node:'uat.example.com',
                steps:{
                    stop(){
                        $.sh("docker stop `docker ps -q`")
                    },
                    start(){
                        $.sh('docker run -p 80:80 -itd springboot/springbootdocker');
                        $.print('访问地址:http://docker.uat.example.com/')
                        $.printQRCode('http://docker.uat.example.com/')
                    }
                }
        },
    }
};
  1. 访问

[完]

# Pipeline 说明:

  • stages:示例有两个stage,一个是compile,另外一个是deploy。

    • compile:编译,并创建Docker镜像
    • deploy: 运行容器
  • steps:stage里的步骤。

    • svnCheckOut:编译服务器从svn服务器拉取最新的代码用于编译。
    • dockerBuild:构建 Docker 镜像。
    • stop:删除容器。
    • start: 运行容器。
  • $表示pipeline自身,可以调用的函数列表如下: