使用Docker部署Spring Boot项目

 

使用Docker部署Spring Boot项目

2019-06-24 19:33:01  阅读数 365
分类专栏: Spring Boot
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014116780/article/details/93515122

本文使用Docker部署Spring Boot项目。部署之前需要环境中已经安装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
1
2
 
 
 
4
 
 
 
 
 
1
[root@localhost ~]# uname -r
2
3.10.0-957.el7.x86_64
3
1
4
2
 
 

在CentOS 7中安装Docker

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

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

使用下列命令:

systemctl start docker.service
systemctl enable docker.service
1
2
 
 
 
4
 
 
 
 
 
1
systemctl start docker.service
2
systemctl enable docker.service
3
1
4
2
 
 

查看版本信息

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

[root@localhost ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Wed May  1 14:55:20 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Wed May  1 14:55:20 2019
 OS/Arch:         linux/amd64
 Experimental:    false

 
 
38
 
 
 
 
 
1
[root@localhost ~]# docker version
2
Client:
3
 Version:         1.13.1
4
 API version:     1.26
5
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
6
 Go version:      go1.10.3
7
 Git commit:      b2f74b2/1.13.1
8
 Built:           Wed May  1 14:55:20 2019
9
 OS/Arch:         linux/amd64
10

11
Server:
12
 Version:         1.13.1
13
 API version:     1.26 (minimum version 1.12)
14
 Package version: docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
15
 Go version:      go1.10.3
16
 Git commit:      b2f74b2/1.13.1
17
 Built:           Wed May  1 14:55:20 2019
18
 OS/Arch:         linux/amd64
19
 Experimental:    false
20
1
21
2
22
3
23
4
24
5
25
6
26
7
27
8
28
9
29
10
30
11
31
12
32
13
33
14
34
15
35
16
36
17
37
18
38
19
 
 

安装Maven和配置阿里云镜像

下载Maven

wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz

解压和移动

tar vxf apache-maven-3.5.4-bin.tar.gz 
mv apache-maven-3.5.4 /usr/local/maven3
1
2
 
 
 
4
 
 
 
 
 
1
tar vxf apache-maven-3.5.4-bin.tar.gz 
2
mv apache-maven-3.5.4 /usr/local/maven3
3
1
4
2
 
 

配置环境变量

打开环境变量vim /etc/profile,添加如下内容:

MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
1
2
3
 
 
 
6
 
 
 
 
 
1
MAVEN_HOME=/usr/local/maven3
2
export MAVEN_HOME
3
export PATH=${PATH}:${MAVEN_HOME}/bin
4
1
5
2
6
3
 
 

保存并退出::wq

刷新环境变量的配置使其生效:source /etc/profile

JDK需要 提前安装

查看版本信息

使用命令mvn -v进行查看

[root@localhost ~]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_211/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
1
2
 
 
 
12
9
 
 
 
 
 
1
[root@localhost ~]# mvn -v
2
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
3
Maven home: /usr/local/maven3
4
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_211/jre
5
Default locale: zh_CN, platform encoding: UTF-8
6
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
7
1
8
2
 
 

使用mvn package命令进行打包,却报错,提示连接被拒绝。

解决办法:给Maven配置阿里云镜像
切换到maven安装目录下面,打开settings.xml文件,在<mirrors>标签里面添加:

<mirror> 
    <id>alimaven</id> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
    <mirrorOf>central</mirrorOf> 
</mirror> 
1
2
 
 
 
12
9
 
 
 
 
 
1
<mirror> 
2
    <id>alimaven</id> 
3
    <name>aliyun maven</name> 
4
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
5
    <mirrorOf>central</mirrorOf> 
6
</mirror> 
7
1
8
2
 
 

Spring Boot项目添加Docker支持

新建Spring Boot工程

新建一个Spring Boot项目,添加一个简单的DockerController,方便进行测试。

@RestController
@SpringBootApplication
@RequestMapping("/docker")
public class DockerController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello Docker";
    }
}
1
2
 
 
 
x
 
 
 
 
 
1
@RestController
2
@SpringBootApplication
3
@RequestMapping("/docker")
4
public class DockerController {
5

6
    @RequestMapping("/hello")
7
    @ResponseBody
8
    public String hello() {
9
        return "Hello Docker";
10
    }
11
}
12
1
13
2
 
 

添加Docker支持

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

<properties>
    <docker.image.prefix>springboot</docker.image.prefix>
</properties>
1
2
 
 
 
6
 
 
 
 
 
1
<properties>
2
    <docker.image.prefix>springboot</docker.image.prefix>
3
</properties>
4
1
5
2
 
 

添加 Docker插件:

       <!-- 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>
                        <!-- dockerfile 路径  根路径 ./ -->
                        <directory>./</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
1
2
3
4
 
 
x
 
 
1
       <!-- docker插件 -->
2
        <plugin>
3
            <groupId>com.spotify</groupId>
4
            <artifactId>docker-maven-plugin</artifactId>
5
            <version>1.0.0</version>
6
            <configuration>
7
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
8
                <dockerDirectory>src/main/docker</dockerDirectory>
9
                <resources>
10
                    <resource>
11
                        <targetPath>/</targetPath>
12
                        <!-- dockerfile 路径  根路径 ./ -->
 
 
13
                        <directory>./</directory>
14
                        <include>${project.build.finalName}.jar</include>
15
                    </resource>
16
                </resources>
17
            </configuration>
18
        </plugin>
19
1
20
2
21
3
22
4
23

 
 

编写Dockerfile文件

在目录src/main/docker下创建Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。

FROM java:8
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
1
2
3
4
 
 
 
8
 
 
 
 
 
1
FROM java:8
2
VOLUME /tmp
3
ADD docker-0.0.1-SNAPSHOT.jar app.jar
4
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
5
1
6
2
7
3
8
4
 
 

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@localhost ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
springboot/docker       latest              39aabeebb971        5 days ago          660 MB
1
2
3
 
 
 
 
 
 
 
 
 
1
[root@localhost ~]# docker images
2
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
3
springboot/docker       latest              39aabeebb971        5 days ago          660 MB
4
1
5
2
6
3
 
 

运行docker镜像:docker run -p 8080:8080 -t springboot/docker

在本机浏览器进行访问,可以看到返回结果,说明部署成功。

 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





posted @ 2019-11-07 10:35  懒癌  阅读(534)  评论(0编辑  收藏  举报