使用Docker部署Spring Boot项目

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 使用Docker部署Spring Boot项目,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

使用Docker部署Spring Boot项目

本文使用Docker部署Spring Boot项目(在虚拟机CentOS7的环境中)。

部署之前需要环境中已经安装JDK(本文用jdk8)、Docker和Maven(用于打包),所以本文先进行安装Docker和Maven;接着搭建一个Spring Boot项目,使其支持Docker部署;最后进行部署和测试。

环境搭建

安装Docker

检查系统内核版本

Docker运行在CentOS 7上,要求操作系统为64位,内核版本为3.10及以上。 确认本机已经安装了满足要求的Linux内核。使用命令uname -r来检查内核版本信息。

[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64
复制代码

在CentOS 7中安装Docker

使用命令yum install -y docker安装Docker,“-y”表示不询问,使用默认配置进行安装。

启动Docker服务,并设置为开机自启动

使用下列命令:

systemctl start docker.service
systemctl enable docker.service
复制代码

查看版本信息

输入docker version,返回版本信息表明Docker安装成功。

[root@node1 ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Wed Jul  1 14:56:42 2020
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Wed Jul  1 14:56:42 2020
 OS/Arch:         linux/amd64
 Experimental:    false
[root@node1 ~]# 

安装Maven和配置阿里云镜像

(略)

Spring Boot项目添加Docker支持

新建Spring Boot工程

新建一个Spring Boot项目,例如名为docker-hello,添加一个接口,方便进行测试,简单起见直接在启动类中添加。

package com.wyf.test.dockerhello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@SpringBootApplication
@RestController
public class DockerHelloApplication {
    @RequestMapping("/hello")
    public String hello() {
        return "Hello Docker: " + LocalDateTime.now();
    }
    public static void main(String[] args) {
        SpringApplication.run(DockerHelloApplication.class, args);
    }
}

添加Docker支持

在 pom.xml中添加Docker镜像名称

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

添加 Docker插件:(可以看到镜像名字是${docker.image.prefix}/${project.artifactId}

       <!-- docker插件 -->
        <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>

编写Dockerfile文件

在目录src/main/docker(不存在则建目录)下创建Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。这里如果你的jar包名不同的话需要改,我这个例子打包出来是docker-hello-0.0.1-SNAPSHOT.jar

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

FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:FROM java:8表示使用 Jdk1.8 环境为基础镜像进行构建镜像。

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

ADD ,拷贝文件并且重命名

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

部署Spring Boot工程

将工程代码 docker 拷贝服务器中,进入项目路径下进行打包测试。

打包:mvn package 运行:java -jar target/spring-boot-docker-1.0.jar

项目启动成功,说明环境配置没有问题,接下来可以使用Dockerfile构建镜像。

构建Docker镜像mvn package docker:build。可以看到docker镜像构建成功,仔细看日志,会发现四个步骤和Dockerfile中的指令是一一对应的。

使用docker images命令查看构建好的镜像:

[root@node1 ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
springboot/docker-hello   latest              85f1aaec7251        26 hours ago        662 MB
docker.io/java            8                   d23bdf5b1b1b        3 years ago         643 MB
[root@node1 ~]# 

运行docker镜像:docker run -p 8080:8080 -t springboot/docker-hello (注意如果你的镜像不叫 springboot/docker-hello的时候需要修改)

新开一个ssh连接窗口(因为上面运行镜像的方法是非后台运行的,所以需要新开),输入 curl http://127.0.0.1:8080/hello,查看是否输出了结果。如果你的虚拟机CentOS7开了8080端口或关闭了防火墙,还可以在宿主机浏览器中访问。

参考资料

https://juejin.im/post/6844903923543703560

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/135253.html

(0)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!