zoukankan      html  css  js  c++  java
  • 使用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;">





  • 相关阅读:
    Java最常见的面试题:模块十一
    Java最常见的面试题:模块九和模块十
    Java最常见的面试题:模块八
    Java最常见的面试题:模块七
    【leetcode】跳跃游戏
    【leetcode】字母异位词分组
    【C++】STL各容器的实现,时间复杂度,适用情况分析
    【C++】如何使用GCC生成动态库和静态库
    【C++】C++中基类的析构函数为什么要用virtual虚析构函数?
    【leet-code】接雨水
  • 原文地址:https://www.cnblogs.com/xues/p/11810529.html
Copyright © 2011-2022 走看看