docker入门二: Spring Boot项目部署到Docker

继上一篇 在Centos上安装好docker后,接下来显示项目在docker机器上的部署.
学习springboot的的时候,通过打包为jar或者war的格式放到服务器上通过命令直接运行,让部署的过程变得十分简单。随着主流的云计算发展,基于k8s等云平台都支持发布docker镜像,所以将项目直接部署在容器中,并运行镜像的容器变的也十分重要。有时候分布式项目的发布,时刻要保证他们的环境依赖一致,比如jdk,webserver,appserver,安全设置,数据库等,而且docker的隔离性以及低耗性,使用起来可以更快的部署交付、迁移和扩展 这也是我们在微服务架构中实施时,需要考虑的问题,所以本文通过一个简单的demo,实现docker上部署项目.
一、Centos 配置
1.1. 关闭selinux
centos6.* : /usr/sbin/sestatus -v 查看状态 ; setenforce 0 临时关闭;setenforce 1临时开启。
永久关闭: vim /etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled 需要重启机器。
centos7.*: centos 上,用setenforce 0临时更改时,一直没更改成功,我后来是通过更改 /etc/selinux/config文件中的SELINUX值为disabled 时,再重启机器的方案实现 关闭selinux的。
1.2. 打开docker远程访问功能:
用maven或者gradle构建docker镜像的时候,需要远程连接docker服务器,所以需要开启docker的
centos6.* :修改/etc/default/docker文件,重启后生效(service docker restart)。DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0:2375",
更改后需要重启docker,service docker restart .
centos7.* :打开/usr/lib/systemd/system/docker.service文件,修改ExecStart行。
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重启docker: systemctl daemon-reload
systemctl restart docker.service
可以用curl http://127.0.0.1:2375/info 测试是否生效
二、配置maven plugin
我用的maven插件com.spotify.docker-maven-plugin的 0.4.13版构建,该插件构建docker时,需要访问docker服务器,默认是访问本地机器,可以通过新建环境变量DOCKER_HOST指定docker远程机器, DOCKER_HOST="tcp://127.0.0.1:2375",也可在配置文件中通过 <dockerHost>http://xxxx:2375</dockerHost>配置指定,如果不配置,构建上传镜像时会报错。
本文以HelloWorld为例,pom文件中的docker配置如下:
创建文件夹src/main/docker ,在docker文件夹下创建文件Dockerfile,文件内容如下:
FROM livingobjects/jre8
VOLUME /tmp
ADD hello-docker.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
FROM livingobjects/jre8:指Docker Hub上官方提供的java镜像,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态——也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用,docker的一大方便也在于此,只要在from中配置需要的基础应用,它就会默认给你已安装上。
VOLUME /tmp:创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录。
ADD hello-docker.jar app.jar:将应用jar包复制到/app.jar
ENTRYPOINT:表示容器运行后默认执行的命令
在上述pom文件中,我已经将docker plugin配置到maven的package生命周期,所以运行mvn package时,就会构建docker镜像并上传到docker服务器,如果平时你没有将docker构建绑定到maven生命周期,你可以命令 mvn package docker:build 来构建镜像。
构建完镜像后,在docker服务器上,你就可以用docker images命令检查是否已部署成功,然后运行
docker run -p 8080:8080 -t al/hello-docker ,命令,运行程序,接下来就可以从浏览器里面访问应用. 注:-p后面的参数是说将容器的8080端口映射到主机的8080端口。

参考:

猜你喜欢

转载自blog.csdn.net/meiliangdeng1990/article/details/79560857