您的位置:首页 > 运维架构 > Docker

springboot in docker

2017-07-14 13:55 246 查看
文章转自http://xiaoqiangge.com/aritcle/1500011474745.html

现在docker越来越流行,似乎不管什么东西都想往docker里面放,像kafka in docker,mysql in docker,nginx in docker,这篇文章记录下springboot in docker。

文章内容需要你对docker容器技术有一定的了解,如docker pull、docker registry、docker build、docker run。

假设有那么一个场景,我在本地开发一个springboot程序,然后将代码提交到了git上,通过docker做将springboot程序成一个image,然后可以在任何一个带有docker引擎的机器上运行这个springboot程序。

我目前找到的有2种实现方式,方案A是spring官方提供的Spring Boot with Docker,方案B是自己编写dockerfile来构建docker image,后面会介绍这两种方式。

方案A

spring官方提供了Spring Boot with Docker方式可以制作docker image,如下是它的dockerfile,

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]


从dockerfile可以看到它在制作image的时候是先将
gs-spring-boot-docker-0.1.0.jar
生成,然后通过add指令添加到image中,然后制作镜像,这种做法是官方提供的,详细的可以参考上面的文档。

方案B

自己编写dockerfile,包含git上拉取代码、maven打包、启动程序等,如下,

FROM centos
RUN yum -y update \
&& yum -y install git maven \
&& git http://xxx.git.com/xxx.git RUN cd /xxx \
&& mvn clean package -Dmaven.test.skip=true
ENTRYPOINT java -jar /xxx.jar


dockerfile很简单,然后使用docker build,命令进行镜像制作。

总结,这两种方式最终的结果一样,都是能够成功的build出image,但是还是存在一定差异,

1. 方案A需要在程序中配置一些docker相关的内容,并且引入一些jar,相比于方案B来说存在代码起侵入性。

2. 由于使用了ADD指令,在执行方案A的dockerfile的时候始终需要保持
gs-spring-boot-docker-0.1.0.jar
的存在,相比于方案B来说完全是多余的。

3. 假设我们的程序不是java程序了,不是springboot了,那么方案A就没法实施了,而方案B却依然可以继续实施,只是打包、启动的过程发生了变化。

基于以上几点分析我个人强烈推荐使用方案B。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sprigboot docker