二. Spring Boot使用DockerFile maven插件自动化部署
2018-01-09 18:19
1481 查看
二. Spring Boot使用DockerFile maven插件自动化部署
Docker开启远程访问
客户机配置好DOCKER_HOST环境变量
上面三个步骤前文已介绍过。
对了,它有个前生哥哥,叫docker-maven-plugin,同一个作者出品,同一个味道。百度“Spring Docker”除了Spring自家demo,其它大部分都是用这个老插件实现。这个老插件允许没有DockerFile,相关配置参数全部写在pom.xml中。后来作者觉得这样不好,很多人因此都不写DockerFile了,然后又搞的他更新这个插件很累,因为得时时同步DockerFile的新特性(他本人没说过后半句话,我臆测的-_-),所以作者废弃了它,重写了这个dockerfile-maven-plugin插件。
下面以部署EUREKA服务为例
eureka项目下的pom.xml加上dockerfile插件,目前最新版本是1.3.7
DockerFile配置
在项目目录下添加一个DockerFile文件,镜像文件该打成什么样子的就是读取这个文件中的配置,位置如下:
DockerFile文件内容如下:
上面各个参数的含义,在这里有很权威的解释,我就不翻译了。
上面DockerFile中由于用了java:8的layer层,本身它就有600多M,所以打出来的镜像肯定是超600M的,如果想瘦身一点,可以替换成openjdk,参照spring 官网写的spring boot docker demo
打包镜像切到eureka项目目录下,执行如下命令:
第一条命令就是普通的打包命令,是个码农就会。
第二条命令就是这个插件提供的命令,连接远程Docker环境将本地jar包打成镜像文件。命令执行完后,镜像文件就会在服务端
镜像运行
登录Docker服务器,先查看刚才打的镜像是否存在
java:8是我们镜像依赖的layer,是在执行mvn dockerfile:build命令的时候pull下来的。
执行运行镜像命令
启动参数解释:
–name: 指定容器名,可省略
-p: 容器端与宿主端口绑定,不可省略,否则容器外应用没法访问这个应用
-d: 后台运行
最后执行下面命令查看容器是否启动成功
遇到的坑
运行mvn dockerfile:build时会报错,ARG这个参数解析不了,原因是Docker engine版本太老了,重装个新的。可以用官方推荐的脚本安装
PS:使用Docker部署微服务过程中,最重要的一个问题还没讲,就是容器间的通信,本例用的是Eureka,如果部署的是需要注册到eureka的微服务,又或者是需要和zuul容器通信的各个微服务,如何处理通信,毕竟使用Docker后,容器间相互隔离,不能简单的用之前的方式ip:port去注册连接。这个准备放到下一篇文单独讲
前置条件
服务器上Docker安装成功Docker开启远程访问
客户机配置好DOCKER_HOST环境变量
上面三个步骤前文已介绍过。
插件介绍
Maven有个插件,叫dockerfile-maven-plugin,这是它的地址 ,它会连接远程Docker,只要一个命令就能把本地的jar包打成Docker镜像,命令执行完毕后,服务器上就会有刚打包好的镜像,此时再执行该镜像即可。对了,它有个前生哥哥,叫docker-maven-plugin,同一个作者出品,同一个味道。百度“Spring Docker”除了Spring自家demo,其它大部分都是用这个老插件实现。这个老插件允许没有DockerFile,相关配置参数全部写在pom.xml中。后来作者觉得这样不好,很多人因此都不写DockerFile了,然后又搞的他更新这个插件很累,因为得时时同步DockerFile的新特性(他本人没说过后半句话,我臆测的-_-),所以作者废弃了它,重写了这个dockerfile-maven-plugin插件。
下面以部署EUREKA服务为例
配置步骤
pom文件配置eureka项目下的pom.xml加上dockerfile插件,目前最新版本是1.3.7
<properties> <docker.image.prefix>demo</docker.image.prefix> <!--镜像前缀,随便取--> </properties> <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.7</version> <!--放开这块注释,则运行mvn deploy命令就会打包镜像<executions>--> <!--<execution>--> <!--<id>default</id>--> <!--<goals>--> <!--<goal>build</goal>--> <!--<!–<goal>push</goal>–>--> <!--</goals>--> <!--</execution>--> <!--</executions>--> <configuration> <repository>${docker.image.prefix}/${project.artifactId}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </bulid>
DockerFile配置
在项目目录下添加一个DockerFile文件,镜像文件该打成什么样子的就是读取这个文件中的配置,位置如下:
DockerFile文件内容如下:
FROM java:8 VOLUME /tmp ARG JAR_FILE ADD ${JAR_FILE} app.jar RUN bash -c 'touch /app.jar' EXPOSE 8800 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
上面各个参数的含义,在这里有很权威的解释,我就不翻译了。
上面DockerFile中由于用了java:8的layer层,本身它就有600多M,所以打出来的镜像肯定是超600M的,如果想瘦身一点,可以替换成openjdk,参照spring 官网写的spring boot docker demo
打包镜像切到eureka项目目录下,执行如下命令:
mvn package -DskipTests mvn dockerfile:build
第一条命令就是普通的打包命令,是个码农就会。
第二条命令就是这个插件提供的命令,连接远程Docker环境将本地jar包打成镜像文件。命令执行完后,镜像文件就会在服务端
镜像运行
登录Docker服务器,先查看刚才打的镜像是否存在
sudo docker images
java:8是我们镜像依赖的layer,是在执行mvn dockerfile:build命令的时候pull下来的。
执行运行镜像命令
sudo docker run --name discovery -p 8800:8800 -d --it 镜像名
启动参数解释:
–name: 指定容器名,可省略
-p: 容器端与宿主端口绑定,不可省略,否则容器外应用没法访问这个应用
-d: 后台运行
最后执行下面命令查看容器是否启动成功
sudo docker ps
遇到的坑
运行mvn dockerfile:build时会报错,ARG这个参数解析不了,原因是Docker engine版本太老了,重装个新的。可以用官方推荐的脚本安装
curl -fsSL get.docker.com -o get-docker.sh ./get-docker.sh
PS:使用Docker部署微服务过程中,最重要的一个问题还没讲,就是容器间的通信,本例用的是Eureka,如果部署的是需要注册到eureka的微服务,又或者是需要和zuul容器通信的各个微服务,如何处理通信,毕竟使用Docker后,容器间相互隔离,不能简单的用之前的方式ip:port去注册连接。这个准备放到下一篇文单独讲
相关文章推荐
- 二. Spring Boot使用DockerFile maven插件自动化部署之容器通信
- jenkins自动化部署搭建。jenkins+docker+maven+git+springboot
- SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
- 使用Docker部署Spring Boot的应用示例
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 开源软件云收藏
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 使用Docker部署Spring boot项目
- spring boot 使用docker在阿里云容器服务部署
- 使用Docker部署Spring Boot 应用 Dockerfile方式
- 理解docker部署springboot-容器网络使用(三)
- Spring Boot 2.0(六):使用 Docker 部署 Spring Boot 开源软件云收藏
- 使用maven集成docker构建和部署Spring Boot 应用
- 使用 Docker 部署 Springboot 应用
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 使用jenkins+github+tomcat实现Springboot半自动化部署
- Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
- Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
- 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行
- jenkins+maven+docker+github全自动化部署SpringBoot