使用docker构建第一个spring boot项目

Posted kevinmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用docker构建第一个spring boot项目相关的知识,希望对你有一定的参考价值。

在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目
本文是自己使用docker+spring boot 发布一个项目
1.docker介绍 docke是提供简单易用的容器接口
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
2.docker centos 安装
yum install docker-io –y
systemctl start docker
安装完成后 测试 docker info 或者docker version
3.镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,国内很多云服务商都提供了加速器服务
https://dockerhub.azk8s.cn、https://reg-mirror.qiniu.com、http://hub-mirror.c.163.com等
然后在 /etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件)

"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]

之后重新启动服务。

4.其他软件安装

本文是基于centos下操作的,还需要在自己的服务器上装好 meven和java软件。

5.开始构建项目

直接新建一个spring boot 项目

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

 然后新建一个controller

@RestController
public class Ctrldocker 
    @RequestMapping("/docker")
    public String test()
        return "hello this is docker!";
    

 spring boot 项目新建好之后,在本地测试一下,启动服务访问127.0.0.1:8080/docker 得到返回参数 hello this is docker! 说明spring boot 项目没有问题。下面开始配置docker

6.配置spring boot中docker的配置

在pom文件中的增加 Docker 构建插件

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- Docker maven plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>$docker.image.prefix/$project.artifactId</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>$project.build.directory</directory>
                            <include>$project.build.finalName.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- Docker maven plugin -->
        </plugins>

    </build>

  在pom文件中的properties中增加docker镜像的名字

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

  在spring boot项目中增加一个docker文件夹,并在文件夹中新增一个Dockerfile文件

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

  文件的意思很简单

 FROM ,是指本项目 继承openjdk:8-jdk-alpine镜像,如果没有没有则会在dockerhub上拉取过来。

VOLUME ,VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录

ADD ,拷贝文件并且重命名

ENTRYPOINT ,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

到此位置docker + spring boot 项目构建基本完成 最后开始测试打包。

7.测试发布

将我们的项目发送到我们的服务器中,进入项目路径

#打包
mvn package
#启动
java -jar target/demo-0.0.1-SNAPSHOT.jar

启动成功则说明我们的正常打包流程是没有问题的,下面我们开始构建一个镜像

mvn package docker:build

看懂BUILD SUCCESS 后说明镜像就构建好了 

我们可以使用docker images 

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
springboot/demo             latest              457d124b2fdb        4 days ago          122 MB

  这里可以看到我们构建成功的镜像

docker run -p 8080:8080 -t springboot/demo

运行我们的镜像,运行成功后 我们可以使用访问服务器的地址 http://xxx.xx.xx:8080/docker 查看返回信息

以上是关于使用docker构建第一个spring boot项目的主要内容,如果未能解决你的问题,请参考以下文章

使用 Docker 构建部署运行Spring Boot应用 《Spring Boot 2.0 极简教程》

如何将基于 Spring Boot 构建的依赖项使用到典型的 Spring 应用程序中?

Spring Boot with Docker

构建 Spring Boot 应用程序的 Docker 镜像文件

docker 构建 spring boot项目

Spring Boot with Docker