springboot in docker

17 篇文章 0 订阅
8 篇文章 0 订阅

文章转自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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值