1.在pom.xml中增加使用docker-maven-plugin,Spring Boot Maven plugin 提供了很多方便的功能,包括:
收集的类路径上所有 jar 文件,并构建成一个单一的、可运行的jar。
搜索 public static void main() 方法来标记为可运行的类。
<properties>
<docker.image.prefix>wwk</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
imageName指定镜像的名字。
dockerDirectory指定 Dockerfile文件 的位置。
resources是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件。
构建镜像有两种方式,第一种是将构建信息指定到 POM 中,第二种是使用 Dockerfile 配置构建信息。
2.编写Dockerfile
Docker 使用 Dockerfile 文件格式来指定 image 层。
创建文件 src/main/docker/Dockerfile:
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD test-docker-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.执行构建和运行镜像
mvn package docker:build
docker run -p 8080:8080 -t wwk/test-docker
[INFO] Copying /Users/hycx/i_workspace/test/test-docker/target/test-docker-0.0.1-SNAPSHOT.jar -> /Users/hycx/i_workspace/test/test-docker/target/docker/test-docker-0.0.1-SNAPSHOT.jar
[INFO] Copying src/main/docker/Dockerfile -> /Users/hycx/i_workspace/test/test-docker/target/docker/Dockerfile
[INFO] Building image wwk/test-docker
4.
手动上传Dockerfile和jar文件到服务器,到同目录下,运行下面的命令,生成镜像。
docker build -t wwk/test-docker .
docker images
用 Docker 构建、运行、发布来一个 Spring Boot 应用
https://blog.csdn.net/kkkloveyou/article/details/50942275
Alpine Linux
frolvlad/alpine-oraclejdk8:slim 镜像的基础镜像是 Alpine Linux 3.7。
Alpine Linux 是一个社区开发的面向安全应用的轻量级 Linux 发行版。Alpine采用了musl libc和busybox以减小系统的体积和运行时资源消耗,在保持瘦身的同时,Alpine Linux还提供了自己的包管理工具apk,可以在其网站上查询,或者直接通过apk命令查询和安装。
Alpine Linux作为基础镜像只有5MB。
Spring boot 与 docker
Springboot服务本质上是一个java服务,它也可以同时在jar中打包一个Web服务器例如tomcat。java服务运行所依赖的就是java虚拟机,java虚拟机在大多数操作系统上都会安装。而spring boot服务可以打包为一个可执行的jar,可以很简单的运行管理。这样,一般地在已经安装了java运行环境的服务器上,把spring boot服务运行于docker内的必要性就不大了。