微服务容器化自动部署
1. 传统手动部署:
首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚 拟机并拷贝至JDK容器。
2. 通过Maven插件自动部署:
对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这 里学习如何自动部署,这也是企业实际开发中经常使用的方法。
以下采用 Maven插件自动部署
1.配置Maven环境变量
1.1.因为后面要在cmd命令行窗口使用 mvn 指令,所以要在本地配置Maven环境变量(配置Maven环境变量不做赘述,如已配置请忽略)
1.2. cmd命令窗口测试(后面也会在IDEA上操作,所以需要重启计算机才可以使用)
2.修改Docker配置
2.1. 进入此目录,修改宿主机的docker配置,让其docker服务可以远程访问, 暴露的docker服务端口号 2375
vim /lib/systemd/system/docker.service
注意:如果缺少yum命令,就用此命令行来安装 yum -y install vim*
2.2.在 ExecStart=后添加加配置
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
0.0.0.0 代表所有 ip ,也可指定 ip。修改后如下:
注意:此处可能会由于Docker版本有差异,所以文件内容不一致,例如,1.13.1版本:
位置不同,效果一样!
2.3.配置好之后,刷新配置,重启服务
systemctl daemon-reload systemctl restart docker
2.4.验证是否生效,访问:http://192.168.1.100:2375/version , 响应如下内容则成功:
如果访问不到,则查看防火墙是否关闭。
2.5.或者通过命令行查看2375端口是否被监听
ps -ef | grep docker
3.自动部署前提配置
3.1.在 Maven 的安装目录下的 settings.xml 文件中添加阿里帐号和镜像固定密码 (密码设置如上图)
<server>
<!--maven的pom中可以根据这个id找到这个server节点的配置-->
<id>docker-aliyun</id>
<!--这里是在阿里云注册的账号-->
<username>阿里云账号</username>
<!--这里是在阿里云注册的镜像固定密码-->
<password>镜像固定密码</password>
</server>
3.2.在settings.xml文件中继续添加如下代码:
<pluginGroup>com.spotify</pluginGroup>
如果不添加可能会报错:=> 这个插件不在白名单里面
[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo]
3.3. 在需要自动部署的工程的pom.xml 增加插件配置,这里以microservice-cloud-11-config-server-5001为例子
<build>
<!-- 代表当前工程名,生成的jar包名就是app.jar -->
<finalName>app</finalName>
<plugins>
<!-- 此插件是SpringBoot的插件,被下面的插件所依赖,一定要在其他构建插件之上,否则打包文件会有问题。 -->
<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>1.0.0</version>
<!--生成镜像相关配置-->
<configuration>
<!-- 将forceTags设为true,这样就会覆盖构建相同标签的镜像 -->
<forceTags>true</forceTags>
<!-- 远程 docker 宿主机地址, 端口号是/lib/systemd/system/docker.service所暴露的端口号, 生成镜像到docker中 -->
<dockerHost>http://192.168.1.100:2375</dockerHost>
<!--内容是之前修改的maven的settings.xml配置文件中,server节点的id-->
<serverId>docker-aliyun</serverId>
<!-- 镜像名:阿里云镜像仓库地址
${project.artifactId}引用当前模块名作为仓库地址,
${project.version}引用当前模块版本号作为镜像版本号
registry.cn-hangzhou.aliyuncs.com/cloud_model命名空间/demo:0.0.1-SNAPSHOT -->
<imageName>registry.cn-hangzhou.aliyuncs.com/cloud_model/${project.artifactId}:${project.version}</imageName>
<!--基础镜像-->
<!--<baseImage>jdk1.8</baseImage>-->
<baseImage>java</baseImage>
<!--类似于Dockerfile的ENTRYPOINT指令,执行结果就是 java -jar /app.jar -->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!-- 指定打包的资源文件 -->
<resources>
<resource>
<targetPath>/</targetPath> <!-- 指定要打包的目录路径,这里是当前目录 -->
<directory>${project.build.directory}</directory> <!-- 指定要打包的根目录,这里是target目录 -->
<include>${project.build.finalName}.jar</include> <!-- 这里指定最后生成的jar包 -->
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
如果要使用Dockerfile文件:则将<baseImage>和<entryPoint>标签去掉,同时加上<dockerDirectory>标签,指明Dockerfile的文件路径。
3.4. 在阿里云创建一个 microservice-cloud-11-config-server-5001 仓库
3.5. 在CMD的命令提示符下,进入microservice-cloud-11-config-server-5001工程所在的目录,输入以下 命令,进行打包和上传镜像。
(mvn clean package 打包成jar ,然后docker:build构建成镜像,-DpushImage推送到仓库):
如果报mvn不是内部命令,则maven配置环境变量,然后重启电脑。
mvn clean package docker:build -DpushImage
4.自动部署开始
这里选择在idea中进行操作:
4.1.进入到当前的项目目录中,输入命令行,回车
4.2.开始生成镜像
4.3.开始推送镜像
4.4.推送成功
4.5.查看阿里云仓库是否有刚刚上传的镜像(步骤省略)。
4.6.查看Docker是否有刚刚上传的镜像,有的话就通过命令行创建容器,容器创建好之后自动启动。
docker run -it --name=eureka_server -p 6001:6001 1e48912cb924 /bin/bash
4.7.启动完毕。
4.8.测试服务是否能访问(注意:因为当前Linux的IP地址没有配置为固定,所以每次访问时的IP地址可能会不一样)
大功告成!!!