Docker Maven插件

传统的手动部署方式,首先基于源码打包生成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、在浏览器中访问

 

参考:

https://www.cnblogs.com/hyl8218/p/9914373.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值