项目结构如下:
1
2
3
4
|
└── src
└── main
└── java
└── 应用包名
|
1
2
3
4
5
|
FROM
openjdk:
8
-jdk-alpine
VOLUME
/tmp
ADD target/gs-spring-boot-docker-0.1.0.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar
|
我们增加了一个 VOLUME 指向”/tmp”,因为那是Spring Boot应用程序为Tomcat创建的默认工作目录。作用是在你的主机”/var/lib/docker”目录下创建一个临时的文件,并且链接到容器中的”/tmp”目录。对于简单程序这一步是可选的,但是对于其他想要真实写入文件系统的Spring Boot应用程序又是必选的。我们增加了一个指向”/dev/urandom”的Tomcat系统属性来缩小Tomcat的启动时间。如果你使用的是boot2docker,在你使用Docker命令或者使用构建工具构建(它运行在守护进程,在虚拟机上为你工作)之前,你必须先启动它。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
properties
>
<
docker.image.prefix
>
springio
docker.image.prefix
>
properties
>
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>
com.spotify
groupId
>
<
artifactId
>
dockerfile-maven-plugin
artifactId
>
<
version
>
1.3.4
version
>
<
configuration
>
<
repository
>
${docker.image.prefix}/${project.artifactId}
repository
>
configuration
>
plugin
>
plugins
>
build
>
|
继续下面的步骤之前(使用Docker CLI工具),输入 docker ps 确保正常运行,如果有错误信息,大概因为没有设置其他什么信息。如果使用的Mac,在 .bash_profile (或者是类似env-setting配置文件)最后增加 $(boot2docker shellinit 2> /dev/null) 并刷新你的shell,确保更改生效。
1
|
$ ./mvnw install dockerfile:build
|
你不用着急发布你刚刚制作的镜像,如果你不是”springio”组织的成员 push 命令会失败。改变构建的配置和命令行中的用户名为自己的而不是”springio”就可以正常工作。你可以让 dockerfile:push 自动运行在安装或部署生命周期阶段,通过将其添加到插件配置中。
1
2
3
4
5
6
7
8
9
10
|
<
executions
>
<
execution
>
<
id
>
default
id
>
<
phase
>
install
phase
>
<
goals
>
<
goal
>
build
goal
>
<
goal
>
push
goal
>
goals
>
execution
>
executions
>
|
如果你没有注册docker,或者没有发布任何docker镜像。但是你有一个本地的镜像,你可以像这样让它运行起来:
1234 $ docker run -p 8080:8080 -t springio/gs-spring-boot-docker....2015-03-31 13:25:48.035 INFO 1 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2015-03-31 13:25:48.037 INFO 1 --- [ main] hello.Application : Started Application in 5.613 seconds (JVM running for 7.293)
如果你使用mac的boot2docker,你通常在启动时可以看到这样的事情:
1234 Docker client to the Docker daemon, please set :export DOCKER_CERT_PATH=/Users/gturnquist/.boot2docker/certs/boot2docker-vmexport DOCKER_TLS_VERIFY=1export DOCKER_HOST=tcp://192.168.59.103:2376查看应用程序,你必须访问Docker主机而不是本地主机的ip(localhost),在这种情况下, http://192.168.59.103:8080/ ,对于VM来说就是开发的ip。
1
2
3
|
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
81c723d22865 springio/gs-spring-boot-docker:latest
"java -jar /app.jar"
34 seconds ago Up 33 seconds 0.0.0.0:8080->8080/tcp goofy_brown
|
1
2
|
$ docker stop 81c723d22865
81c723d22865
|
1
|
$ docker rm 81c723d22865
|
1
|
$ docker run -e
"SPRING_PROFILES_ACTIVE=prod"
-p 8080:8080 -t springio/gs-spring-boot-docker
|
1
|
$ docker run -e
"SPRING_PROFILES_ACTIVE=dev"
-p 8080:8080 -t springio/gs-spring-boot-docker
|
1
|
$ docker run -e
"JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n"
-p 8080:8080 -p 5005:5005 -t springio/gs-spring-boot-docker
|
项目结构如下:
本文由spring4all.com翻译小分队创作,采用知识共享-署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
原文作者: spring4all翻译小分队
原文链接: http://www.spring4all.com/spring-guildes/spring-boot-with-docker.html
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议