版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qmqm011/article/details/88856029
传统的手动部署方式,首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器。对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错,所以急需要自动部署,这也是企业实际开发中经常使用的方法。使用Maven插件自动部署的步骤如下:
1、修改宿主机的docker配置,让其可以远程访问。
修改/lib/systemd/system/docker.service,在ExecStart=后添加如下配置:
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改后的配置如下:
......
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
......
2、刷新配置,重启服务
root@ubuntu:/# systemctl daemon-reload
root@ubuntu:/#
root@ubuntu:/# systemctl restart docker
root@ubuntu:/#
3、在项目的pom.xml文件中增加如下配置:
<build>
<finalName>spring-boot-docker</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.10.128: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.10.128:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
以上配置会自动生成如下的Dockerfile:
FROM jdk1.8
ADD spring-boot-docker.jar /
ENTRYPOINT ["java","-jar","/app.jar"]
4、打包和上传镜像
在windows的命令提示符下(或IDEA的Terminal),进入工程所在的目录,输入以下命令,进行打包和上传镜像:
D:\workspace\spring-boot-docker>mvn clean package docker:build -DpushImage
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.wuychn:spring-boot-docker >--------------------
[INFO] Building spring-boot-docker 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ spring-boot-docker ---
[INFO] Deleting D:\workspace\spring-boot-docker\target
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ spring-boot-docker ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ spring-boot-docker ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\workspace\spring-boot-docker\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ spring-boot-docker ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\workspace\spring-boot-docker\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ spring-boot-docker ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ spring-boot-docker ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ spring-boot-docker ---
[INFO] Building jar: D:\workspace\spring-boot-docker\target\spring-boot-docker.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.0.RELEASE:repackage (repackage) @ spring-boot-docker ---
[INFO] Replacing main artifact D:\workspace\spring-boot-docker\target\spring-boot-docker.jar
[INFO]
[INFO] --- docker-maven-plugin:0.4.13:build (default-cli) @ spring-boot-docker ---
[INFO] Copying D:\workspace\spring-boot-docker\target\spring-boot-docker.jar -> D:\workspace\spring-boot-docker\target\docker\spring-boot-docker.ja
r
[INFO] Building image 192.168.10.128:5000/spring-boot-docker:1.0-SNAPSHOT
Step 1/3 : FROM jdk1.8
---> bbfe74fb09fe
Step 2/3 : ADD /spring-boot-docker.jar //
---> fe1c4494c406
Step 3/3 : ENTRYPOINT ["java", "-jar", "/spring-boot-docker.jar"]
---> Running in 47d8baff35fe
Removing intermediate container 47d8baff35fe
---> e92d4d7e7512
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built e92d4d7e7512
Successfully tagged 192.168.10.128:5000/spring-boot-docker:1.0-SNAPSHOT
[INFO] Built 192.168.10.128:5000/spring-boot-docker:1.0-SNAPSHOT
[INFO] Pushing 192.168.10.128:5000/spring-boot-docker:1.0-SNAPSHOT
The push refers to repository [192.168.10.128:5000/spring-boot-docker]
d2364ce3851e: Pushed
18173c8ac1ae: Pushed
ae657c115444: Pushed
b57c79f4a9f3: Mounted from tomcat
d60e01b37e74: Mounted from tomcat
e45cfbc98a50: Mounted from tomcat
762d8e1a6054: Mounted from tomcat
1.0-SNAPSHOT: digest: sha256:cbf3bf5299b7c2098140b43d1995e0dcc10d019e35e205931d1fc53345c8e72e size: 1782
null: null
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 49.774 s
[INFO] Finished at: 2019-03-27T21:45:15+08:00
[INFO] ------------------------------------------------------------------------
之后,在浏览器中访问http://192.168.10.128:5000/v2/_catalog,可以看到镜像已经上传到私有仓库:
进入宿主主机查看镜像:
root@ubuntu:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.10.128:5000/spring-boot-docker 1.0-SNAPSHOT e92d4d7e7512 3 minutes ago 502MB
jdk1.8 latest bbfe74fb09fe 24 hours ago 486MB
springboot latest 3468233eebc6 6 days ago 660MB
192.168.10.128:5000/tomcat jdk 05d05fcc2574 11 days ago 672MB
tomcat jdk 05d05fcc2574 11 days ago 672MB
sshd ubuntu 216556af51b0 11 days ago 288MB
sshd dockerfile c85255d043cd 11 days ago 252MB
192.168.10.128:5000/ubuntu 18.04 94e814e2efa8 2 weeks ago 88.9MB
ubuntu 18.04 94e814e2efa8 2 weeks ago 88.9MB
registry 2 f32a97de94e1 2 weeks ago 25.8MB
mysql latest 91dadee7afee 3 weeks ago 477MB
java 8 d23bdf5b1b1b 2 years ago 643MB
可见,spring-boot-docker已经被制作成了镜像。
5、启动容器
root@ubuntu:/# docker run -di --name spring-boot-docker -p 8080:8080 192.168.10.128:5000/spring-boot-docker:1.0-SNAPSHOT
41620c8e339f10043ec1c5218bc1580eb7aca4300777cdd11f3900546e89dcde
root@ubuntu:/#
root@ubuntu:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41620c8e339f 192.168.10.128:5000/spring-boot-docker:1.0-SNAPSHOT "java -jar /spring-b…" 7 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp spring-boot-docker
7cb8626263ed registry:2 "/entrypoint.sh /etc…" 24 hours ago Up 13 minutes 0.0.0.0:5000->5000/tcp registry
6、在浏览器中访问