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,
从dockerfile可以看到它在制作image的时候是先将
方案B
自己编写dockerfile,包含git上拉取代码、maven打包、启动程序等,如下,
dockerfile很简单,然后使用docker build,命令进行镜像制作。
总结,这两种方式最终的结果一样,都是能够成功的build出image,但是还是存在一定差异,
1. 方案A需要在程序中配置一些docker相关的内容,并且引入一些jar,相比于方案B来说存在代码起侵入性。
2. 由于使用了ADD指令,在执行方案A的dockerfile的时候始终需要保持
3. 假设我们的程序不是java程序了,不是springboot了,那么方案A就没法实施了,而方案B却依然可以继续实施,只是打包、启动的过程发生了变化。
基于以上几点分析我个人强烈推荐使用方案B。
现在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。
相关文章推荐
- Spring-boot添加Filter - OpenSessionInViewFilter
- spring-boot with docker
- Docker---(5)Docker 部署SpringBoot web项目
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- spring boot与docker结合
- Docker入门实践笔记(三)一篇文章搞懂Docker下安装Redis,以及Redis与SpringBoot整合
- Spring boot项目在docker下的部署,发布
- Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像。
- Docker(二)-Docker化-构建Springboot的镜像
- warning: LF will be replaced by CRLF in tyrone-springboot-quickstart-withoutparent/pom.xml. The file
- 基于Spring Boot和Spring Cloud实现微服务架构学习(五)-Docker总结
- Spring Boot + docker +mongo
- 玩转spring boot——结合docker
- jenkins+maven+docker+github全自动化部署SpringBoot
- docker部署springboot:使用外部tomcat部署
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- 生成springboot docker镜像 并上传到阿里云镜像厂库
- spring-boot 生成可执行jar报错:No compiler is provided in this environment
- Spring Boot:Consider defining a bean of type '*.*.*' in your configuration
- Spring Boot之 Configuration Annotation Proessor not found in classpath解决方法