一次上班的路上,看到一篇文章说Docker和SpringBoot可以很好的协作。IDEA里面已经有了docker的plugin,我们知道springboot里面有内嵌server(tomcat),通过运行main,就可以将生成的jar丢到server上去,然后就可以在网页上验证编写的模块,从而提高了开发效率。当然如果你写好应用,测试没问题了,还要去push和deploy你的jar,还是需要额外的工具来帮助你。不仅仅这,你还要在服务端起个server,把你的应用部署上去......短则几分钟,长则小时计。
docker说太慢了,docker说当我build项目的时候,我就可以把你的jar打成image,然后push到registry中(和maven的私服一个道理),并打上相应的tag,别人就可以直接通过docker pull,就把你的image拉下来,然后本地起一个container,就可以看到你的修改了(这个过程秒级!!!)。
那么既然springboot都可以和docker进行配合,普通的项目呢?spring和springboot不是就差个容器嘛?容器我可以用docker建啊,再把文件copy到容器里,不就和springboot一样了。
尝试:
准备工作,需要在windows上安装docker(拿windows做的实验)。启动如下:
在idea里配置docker plugin。
在setting中配置docker相关的URL。如图,该地址就是拟启动docker的时候映射在本地的ip地址,下面一个证书同样可以在docker machine里找到。点击ok。
接着下面是配置registry的地方。
接着创建一个maven webapp的项目。结构如下:
因为是要生成image,所以我自定义了Dockerfile,目的是为了构建自己的容器。下面是我的dockerfile内容,很简单,拉取远程的一个tomcat的镜像,然后把我的war包放到tomcat里。最后启动我的tomcat。(这里是拉取的daocloud上的,默认从docker.io,由于网络的原因,速度很慢)
下面是pom.xml需要的配置。定义项目的名称,以及引用docker plugin,设置项目生成的image,tag等。
接下来需要配置run config。这边可以指定容器映射到宿主机上的端口,以及container起起来后,启动的浏览器,默认打开的url和debug端口等。
下面还可以设置我在build 生成image之前可以做的操作,这边我是maven,把我最新的项目打下包,clean,package。
下面是配置docker-machine,可以通过json文件的方式(当然也可以在上图中配置的那样)指定映射端口。
到这边一切准备就绪了。开始施展大法:
点击docker console里的deploy按钮,就会发现,项目开始build,在打包完成之后,开始build image,并启动一个container。速度很快(一口水),如下:
最终我们就可以在浏览器里看到效果了!
一键打包部署,值得了解一下。相信不久,本地都无需安装任何中间件了。