SpringBoot整合Docker实现一次构建到处运行

Posted 微枫Micromaple

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot整合Docker实现一次构建到处运行相关的知识,希望对你有一定的参考价值。

写在前面

🍁个人主页:微枫Micromaple

✨本期专栏:《0到1项目搭建》欢迎订阅学习~

📌源码获取:GitCodeGitHub码云Gitee 持续更新中,别忘了 star 喔~

本文讲解的是 SpringBoot 引入容器化技术 Docker 实现一次构建到处运行,包括镜像构建、Docker仓库搭建使用、Docker仓库可视化UI等内容。

PS:如果你是新手,可以跟着系列专栏的框架搭建先动手把项目搭建起来,然后在结合本期内容继续深入学习,这样会有更好的效果。

目录

一、容器化部署的好处

Docker 作为一种新兴的虚拟化方式,它可以更高效的利用系统资源,不需要进行硬件虚拟以及运行完整操作系统等额外开销。

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

最重要的是一致的运行环境Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而达到真正意义上的 一次构建,到处执行

二、构建镜像

2.1、Dockerfile

接着我们开始使用 Dockerfile 来定制我们的镜像,从而达到容器化的目的。Dockerfile 的本质就是将一系列修改、安装、构建、操作的命令整合到一起,去构建一个个性化的镜像,以达到**一次构建,到处运行。**接下来我们就来构建自定义镜像。

my-project-server模块下创建docker目录,在docker目录下创建Dockerfile。代码如下:

FROM openjdk:8-jre

MAINTAINER Micromaple <micromaple@qq.com>

RUN mkdir /app

COPY my-project-server-1.0.0-SNAPSHOT.jar /app/app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod,druid-prod"]

EXPOSE 8899
  • FROM:指定基础镜像,项目是使用jdk8开发的项目,所以我们指定的基础镜像为openjdk:8-jre
  • MAINTAINER:项目维护人员
  • RUN:执行命令,在根目录下创建app目录
  • COPY:将宿主机当前目录下的my-project-server-1.0.0-SNAPSHOT.jar文件拷贝到app目录下,并重命名为app.jar
  • ENTRYPOINT:指定容器启动程序及参数
  • EXPOSE:指定运行时容器提供服务的端口

2.2、开始构建

在虚拟机创建目录

mkdir -p /usr/local/docker/my-project/docker

将打包后的my-project-server-1.0.0-SNAPSHOT.jar文件和Dockerfile文件上传至该目录。

执行镜像构建命令

docker build -t my-project-server:v1 .

构建成功

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-project-server   v1                  ed30386b06d2        11 seconds ago      334MB
openjdk             8-jre               26ac3f63d29f        9 months ago        273MB

三、搭建私服

3.1、搭建 Docker Registry

创建目录

mkdir -p /usr/local/docker/registry

在该目录下创建Docker Registrydocker-compose.yml。内容如下:

cd /usr/local/docker/registry
version: '3.1'
services:
  registry:
    image: registry
    restart: always
    container_name: registry
    ports:
      - 5000:5000
    volumes:
      - ./data:/var/lib/registry

启动容器

docker-compose up -d

3.2、搭建 Docker Registry WebUI

创建目录

mkdir -p /usr/local/docker/docker-registry-frontend

在该目录下创建Docker Registrydocker-compose.yml。内容如下:

cd /usr/local/docker/docker-registry-frontend
version: '3.1'
services:
  frontend:
    image: konradkleine/docker-registry-frontend:v2
    ports:
      - 8080:80
    volumes:
      - ./certs/frontend.crt:/etc/apache2/server.crt:ro
      - ./certs/frontend.key:/etc/apache2/server.key:ro
    environment:
      - ENV_DOCKER_REGISTRY_HOST=192.168.110.158(Docker仓库的IP)
      - ENV_DOCKER_REGISTRY_PORT=5000

需要将ENV_DOCKER_REGISTRY_HOST的值更改为自己搭建的 DockerRegistry 服务的IP

启动容器

docker-compose up -d

浏览器访问http://192.168.110.158:8080/,效果如下:

3.3、客户端配置

在需要上传 Docker 镜像的客户端需配置daemon.json,完整路径在 /etc/docker/daemon.json

vi /etc/docker/daemon.json

需增加如下内容:

"insecure-registries": [
  "Docker仓库的IP:5000"
]

完整daemon.json内容:


  "registry-mirrors": [
    "https://xxx.mirror.aliyuncs.com"
  ],
  "insecure-registries": [
    "192.168.110.158:5000"
  ]

  • registry-mirrors:为镜像加速地址,这里为我自己申请的加速地址。大家可以自己申请一个,也可以在网上找一个。
  • insecure-registries:Docker仓库的IP。

重新启动服务

systemctl daemon-reload
systemctl restart docker

3.4、上传私服

搭建以及配置完成后,需要将我们之前构建的镜像上传至我们自己的Docker仓库。

查看镜像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-project-server   v1                  6af7d633afb7        5 seconds ago       334MB
openjdk             8-jre               26ac3f63d29f        9 months ago        273MB

1)、镜像标记

使用 docker tagmy-project-server:v1 这个镜像标记为 192.168.110.158:5000/my-project-server:v1

192.168.110.158为我的Docker仓库的IP。

格式为:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

命令如下:

docker tag my-project-server:v1 192.168.110.158:5000/my-project-server:v1

标记后,查看镜像

$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        3 minutes ago       334MB
my-project-server                        v1                  6af7d633afb7        3 minutes ago       334MB
openjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB

2)、镜像上传

使用 docker push 上传镜像。

$ docker push 192.168.110.158:5000/my-project-server
The push refers to repository [192.168.110.158:5000/my-project-server]
5b9e874b9f9c: Pushed 
e87c042d22f8: Pushed 
b4cfcb8385a8: Pushed 
2b730cf18c09: Pushed 
edeaba958753: Pushed 
8bf42db0de72: Pushed 
31892cc314cb: Pushed 
11936051f93b: Pushed 
v1: digest: sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40 size: 2000

3)、查看镜像

使用 curl 查看 192.168.110.158:5000/v2/_catalog 地址,可以看到上传成功的镜像

$ curl 192.168.110.158:5000/v2/_catalog
"repositories":["my-project-server"]

这里我们可以成功的看到我们上传的镜像。

我们也可以在我们刚刚搭建的WebUI上可视化的查看我们的镜像。效果图如下:

4)、验证

此时我们将本地镜像删除,尝试从私有仓库下载这个镜像

先删除已有镜像

docker rmi my-project-server:v1 192.168.110.158:5000/my-project-server:v1

下载镜像

docker pull 192.168.110.158:5000/my-project-server:v1
$ docker pull 192.168.110.158:5000/my-project-server:v1
v1: Pulling from my-project-server
0e29546d541c: Already exists 
9b829c73b52b: Already exists 
cb5b7ae36172: Already exists 
99ce012bef04: Already exists 
22dc2a72d098: Already exists 
9c69a57e10d9: Already exists 
776f54050ab5: Pull complete 
65a83a9a7871: Pull complete 
Digest: sha256:5c8a0efff409649a389d0bc74dda94ca96e67e87c92673b4c7dad0078657af40
Status: Downloaded newer image for 192.168.110.158:5000/my-project-server:v1
192.168.110.158:5000/my-project-server:v1
$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
192.168.110.158:5000/my-project-server   v1                  6af7d633afb7        15 minutes ago      334MB
openjdk                                  8-jre               26ac3f63d29f        9 months ago        273MB

我们可以看到可以正常拉取。

四、容器启动

镜像构建并上传至完成后,可以直接使用Docker Compose来启动容器。实现一次构建到处运行。

创建目录

mkdir -p /usr/local/docker/my-project

在该目录下创建Docker Registrydocker-compose.yml。内容如下:

cd /usr/local/docker/my-project
version: '3.1'
services:
  my_project_server:
    image: 192.168.110.158:5000/my-project-server:v1
    container_name: my-project-server
    restart: always
    ports:
      - 8899:8899
    volumes:
      - ./logs:/logs
    environment:
      TZ: Asia/Shanghai

启动容器

docker-compose up -d

查看容器启动状态

docker ps -a

访问查询所有用户接口

http://ip:8899/sys-user/get/all

使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上

一个用于构建和推送Docker镜像的Maven插件。

使用Maven插件构建Docker镜像,将Docker镜像pushDockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇文章借助开源插件docker-maven-plugin 进行操作

以下操作。默认你已经阅读过我上一篇文章:

Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

http://www.ymq.io/2018/01/11/Docker-deploy-spring-boot-Integrate-redis

最终效果

技术分享图片

环境准备

  • 系统:Ubuntu 17.04 x64
  • Docker 17.12.0-ce

    Ubuntu 17.04 x64 安装 Docker CE

http://www.ymq.io/2018/01/11/Docker-Install-docker-ce/

插件地址

docker-maven-plugin

GitHub 地址:https://github.com/spotify/docker-maven-plugin

一、简单使用

1.修改POM

pom.xml中添加下面这段,

<build>
    <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.12</version>
            <configuration>
                <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
                <!-- 详见:https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed-->
                <imageName>microservice-discovery-eureka</imageName>
                <baseImage>java</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>
            </configuration>
        </plugin>

    </plugins>
</build>

2.构建镜像

使用 maven 命令: mvn clean package docker:build

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn clean package docker:build

我们会发现控制台有类似如下内容:

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ docker-spring-boot-demo-maven-plugin ---
[INFO] Building jar: /opt/other-projects/docker-spring-boot-demo-maven-plugin/target/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.5.9.RELEASE:repackage (default) @ docker-spring-boot-demo-maven-plugin ---
[INFO] 
[INFO] --- docker-maven-plugin:0.4.12:build (default-cli) @ docker-spring-boot-demo-maven-plugin ---
[INFO] Copying /opt/other-projects/docker-spring-boot-demo-maven-plugin/target/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar -> /opt/other-projects/docker-spring-boot-demo-maven-plugin/target/docker/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar
[INFO] Building image docker-spring-boot-demo-maven-plugin
Step 1/3 : FROM java

 ---> d23bdf5b1b1b
Step 2/3 : ADD /docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar //

 ---> b5d8f92756f2
Step 3/3 : ENTRYPOINT ["java", "-jar", "/docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar"]

 ---> Running in 6867f460b40c
Removing intermediate container 6867f460b40c
 ---> 378fd82432e0
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 378fd82432e0
Successfully tagged docker-spring-boot-demo-maven-plugin:latest
[INFO] Built docker-spring-boot-demo-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.568 s
[INFO] Finished at: 2018-01-15T09:21:39+00:00
[INFO] Final Memory: 37M/89M
[INFO] ------------------------------------------------------------------------
[email protected]:/opt/other-projects/docker-spring-boot-demo-maven-plugin#

恭喜,构建成功了。

-我们执行docker images 会发现该镜像已经被构建成功:

& [email protected]:# docker images docker-spring-boot-demo-maven-plugin
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
docker-spring-boot-demo-maven-plugin   latest              378fd82432e0        3 minutes ago       659MB

3.启动镜像

[email protected]:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

4.查看容器

& [email protected]:# docker container ps -a
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
84ebb2ebb8c0        docker-spring-boot-demo-maven-plugin   "java -jar /docker-s…"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp     MySpringBootMavenPlugin

5.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

二、使用Dockerfile

1.新建Dockerfile

使用Dockerfile进行构建Docker镜像

上文讲述的方式是最简单的方式,很多时候,我们还是要借助Dockerfile进行构建的,
首先我们在/docker-spring-boot-demo-maven-plugin/src/main/resources目录下,建立文件Dockerfile

FROM java:8
VOLUME /tmp
ADD docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c ‘touch /app.jar‘
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2.修改POM

项目pom.xml修改为如下: 指定Dockerfile所在的路径

<build>
    <plugins>
        <!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.12</version>
            <configuration>
                <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
                <!-- 详见:https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed-->
                <imageName>docker-spring-boot-demo-maven-plugin</imageName>
                <!-- 指定Dockerfile所在的路径 -->
                <dockerDirectory>${basedir}/src/main/resources</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

3.构建镜像

使用 maven 命令: mvn clean package docker:build

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn clean package docker:build

4.启动镜像

[email protected]:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

其他步骤和上面一样。这样即可使用Dockerfile进行构建Docker镜像啦。

5.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

三、push 镜像

Docker镜像pushDockerHub

1.修改Maven配置

首先修改Maven的全局配置文件settings.xml

查看settings.xml 所在位置

[email protected]:# find / -name settings.xml
/etc/maven/settings.xml

添加以下段落

vi /etc/maven/settings.xml
<servers>
    <server>
        <id>docker-hub</id>
        <username>DockerHub 的账号</username>
        <password>DockerHub 的密码</password>
        <configuration>
            <email>[email protected]</email>
        </configuration>
    </server>
</servers>

2.创建Repository

注册个账号:https://hub.docker.com/

DockerHub上创建Create Repository ,例如:docker-spring-boot-demo-maven-plugin,如下图

技术分享图片

3.修改POM

项目pom.xml修改为如下:注意imageName的路径要和repo的路径一致

镜像名称

<properties>
    <docker.image.prefix>souyunku</docker.image.prefix>
</properties>

Docker镜像pushDockerHub

<!--3:将Docker镜像push到DockerHub上-->

<!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.12</version>
    <configuration>
        <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
        <!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository
            name ... only [a-z0-9-_.] are allowed -->
        <!-- 如果要将docker镜像push到DockerHub上去的话,这边的路径要和repo路径一致 -->
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
        <!-- 指定Dockerfile所在的路径 -->
        <dockerDirectory>${basedir}/src/main/resources</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <!-- 以下两行是为了docker push到DockerHub使用的。 -->
        <serverId>docker-hub</serverId>
        <registryUrl>https://index.docker.io/v1/</registryUrl>
    </configuration>
</plugin>

4.构建镜像

使用 maven 命令: mvn clean package docker:build -DpushImage

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn clean package docker:build  -DpushImage

看到类似这样的数据,就证明构建镜像没毛病

[INFO] Building image souyunku/docker-spring-boot-demo-maven-plugin
Step 1/6 : FROM java:8

 ---> d23bdf5b1b1b
Step 2/6 : VOLUME /tmp

 ---> Using cache
 ---> cb237cc84527
Step 3/6 : ADD docker-spring-boot-demo-maven-plugin-0.0.1-SNAPSHOT.jar app.jar

 ---> 7fb5e3363ed5
Step 4/6 : RUN bash -c ‘touch /app.jar‘

 ---> Running in ab5d10dd64ad
Removing intermediate container ab5d10dd64ad
 ---> 05d96fe59da4
Step 5/6 : EXPOSE 9000

 ---> Running in d63e20122d8e
Removing intermediate container d63e20122d8e
 ---> 55ba378141fd
Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 ---> Running in 962d476363a3
Removing intermediate container 962d476363a3
 ---> 654b596fe91f
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 654b596fe91f
Successfully tagged souyunku/docker-spring-boot-demo-maven-plugin:latest
[INFO] Built souyunku/docker-spring-boot-demo-maven-plugin
[INFO] Pushing souyunku/docker-spring-boot-demo-maven-plugin
The push refers to repository [docker.io/souyunku/docker-spring-boot-demo-maven-plugin]
464800d90790: Pushed 
d52b146f9147: Pushed 
35c20f26d188: Mounted from souyunku/docker-spring-boot-demo 
c3fe59dd9556: Mounted from souyunku/docker-spring-boot-demo 
6ed1a81ba5b6: Mounted from souyunku/docker-spring-boot-demo 
a3483ce177ce: Mounted from souyunku/docker-spring-boot-demo 
ce6c8756685b: Mounted from souyunku/docker-spring-boot-demo 
30339f20ced0: Mounted from souyunku/docker-spring-boot-demo 
0eb22bfb707d: Mounted from souyunku/docker-spring-boot-demo 
a2ae92ffcd29: Mounted from souyunku/docker-spring-boot-demo 
latest: digest: sha256:8d78ced0034f38be8086c8f812817ec4c12b178470b4cea668046906c825c9ee size: 2424
null: null 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.764 s
[INFO] Finished at: 2018-01-16T09:56:23+00:00
[INFO] Final Memory: 36M/88M
[INFO] ------------------------------------------------------------------------
[email protected]:/opt/other-projects/docker-spring-boot-demo-maven-plugin# 

5.查看镜像

[email protected]:# docker images souyunku/docker-spring-boot-demo-maven-plugin 
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
souyunku/docker-spring-boot-demo-maven-plugin   latest              654b596fe91f        27 minutes ago      674MB
[email protected]:# docker images souyunku/docker-spring-boot-demo-maven-plugin 
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
souyunku/docker-spring-boot-demo-maven-plugin   latest              654b596fe91f        27 minutes ago      674MB

Docker Hub 查看镜像,看到已经上传成功

技术分享图片

6.启动镜像

[email protected]:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

其他步骤和上面一样。这样即可使用Dockerfile进行构建Docker镜像啦。

7.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

四、绑定phase执行

将插件绑定在某个phase执行

在很多场景下,我们有这样的需求,例如执行mvn clean package 时,自动地为我们构建docker镜像,可以吗?答案是肯定的。我们只需要将插件的goal 绑定在某个phase即可。

所谓的phasegoal,可以这样理解:maven命令格式是:mvn phase:goal ,例如mvn package docker:build 那么,packagedocker 都是phase,build 则是goal

1.修改POM

下面是示例:

首先配置属性:

<properties>
    <docker.image.prefix>souyunku</docker.image.prefix>
</properties>
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.12</version>

    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>

    <configuration>
        <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
        <!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository
            name ... only [a-z0-9-_.] are allowed -->
        <!-- 如果要将docker镜像push到DockerHub上去的话,这边的路径要和repo路径一致 -->
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
        <!-- 指定Dockerfile所在的路径 -->
        <dockerDirectory>${basedir}/src/main/resources</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <!-- 以下两行是为了docker push到DockerHub使用的。 -->
        <serverId>docker-hub</serverId>
        <registryUrl>https://index.docker.io/v1/</registryUrl>
    </configuration>
</plugin>

新加内容

<executions>
    <execution>
        <id>build-image</id>
        <phase>package</phase>
        <goals>
            <goal>build</goal>
        </goals>
    </execution>
</executions>

本例指的是讲docker的build目标,绑定在package这个phase上。
也就是说,用户只需要执行mvn package ,就自动执行了mvn docker:build

2.构建镜像

使用 maven 命令: mvn package

& cd /opt/other-projects/docker-spring-boot-demo-maven-plugin
& mvn package

3.启动镜像

[email protected]:# docker run --name MySpringBootMavenPlugin -d -p 8080:80 docker-spring-boot-demo-maven-plugin
84ebb2ebb8c002d3935e6e31c6d2aab05c32c075036368228e84f818d20ded4a

4.访问服务

浏览器输入:http://Docker宿主机IP:8080能够正常看到界面,文章开头的最终效果页面。

技术分享图片

推荐阅读:Docker Hub 仓库使用,及搭建 Docker Registry

http://www.ymq.io/2017/12/31/Docker-dockerHub/

GitHub :docker-spring-boot-demo-maven-plugin

https://github.com/souyunku/other-projects/tree/master/docker-spring-boot-demo-maven-plugin

Contact

技术分享图片

以上是关于SpringBoot整合Docker实现一次构建到处运行的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot教程第24篇:整合docker

IDEA整合docker构建打包启动配置教程

IDEA整合docker构建打包启动配置教程

使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上

SpringBoot应用整合并使用Docker安装ELK实现日志收集

SpringBoot28 RabbitMQ知识点Docker下载RabbitMQSpringBoot整合RabbtiMQ