微服务部署有两种方法:
(1)手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚 拟机并拷贝至JDK容器。
(2)通过Maven插件自动部署。
对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这里学习如何自动部署,这也是企业实际开发中经常使用的方法。
Maven插件自动部署步骤:
(1)修改宿主机的docker配置,让其可以远程访问
vi /lib/systemd/system/docker.service
其中ExecStart=后添加配置
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
复制后别忘记,在此行的上一行末尾加上
(2)刷新配置,重启服务
systemctl daemon-reload
systemctl restart docker
(3)在javakf_eureka工程pom.xml 增加配置
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>192.168.16.130:5000/${project.artifactId}:${project.version}</imageName>
<baseImage>jdk1.8</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<dockerHost>http://192.168.16.130:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
(4)在javakf_eureka工程的src/main目录下创建docker目录,目录下创建 Dockerfile文件,内容如下:
FROM jdk1.8
VOLUME /tmp
ADD app.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
解释下这个配置文件:
- VOLUME 指定了临时文件目录为 /tmp 。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的 /tmp 。此步骤是可选的,如果涉及到文件系统 的应用就很有必要了。 /tmp 目录用来持久化到Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用 /tmp 作为工作目录
- 项目的 jar 文件作为 “app.jar” 添加到容器的
- ENTRYPOINT 执行项目 app.jar
(5)在windows的命令提示符下,进入javakf_eureka工程所在的目录,输入以下 命令,进行打包和上传镜像
mvn clean package docker:build -DpushImage
执行后,会有如下输出,代码正在上传
浏览器访问 http://192.168.16.130:5000/v2/_catalog ,输出
{"repositories":["javakf_eureka","jdk1.8"]}
(6)进入宿主机 , 查看镜像
docker images
输出如上内容,表示javakf_eureka微服务已经做成镜像
(7) 启动容器:
docker run -di --name=javakfeureka -p 8888:8888 192.168.16.130:5000/javakf_eureka:1.0-SNAPSHOT