本文作者:开源技术之家

SpringBoot | 第十四章:基于 Docker 的简单部署

开源技术之家 12个月前 ( 06-05 ) 575 抢沙发

SpringBoot | 第十四章:基于 Docker 的简单部署摘要: 前言讲解了单元测试,本章节讲讲应用的部署吧。总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署。本章节主要讲解使用Maven+Docker进...


前言


讲解了单元测试,本章节讲讲应用的部署吧。总体而言,在进行自动化部署时,基本都会用上Jenkins+Maven+Docker进行部署。本章节主要讲解使用Maven+Docker进行SpringBoot应用的部署知识。


题外话:对于Docker,本人也是去年才第一次听说的,当时也没有进行过相关了解。然后年初的时候,本着学习的心态,购置了一台阿里云的ECS服务器,之后的相关实践,都是在这台服务器上进行的。这周末要是不需要加班,可能会先出个Docker入门教程,因为还闲置了一台服务器,刚好可以把自己当作初学者,再重新来一遍,加深下印象,做下笔记。


Docker


关于Docker,百度百科是这么说的:Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


题外话:本人觉得,每个开发者都应该了解下Docker,毕竟我们不是专业的运维,如果一直在倒腾一些环境的安装,也是蛮枯燥乏味的。使用了Docker可以减少很多的不必要,可以直接上手部署各式各样的环境了。真的很Nice呀!


安装jdk8镜像


安装命令为:


docker pull openjdk:8-jdk-alpine


安装成功后,查看镜像,表明已经安装成功了,当然也可先不安装,因为后续是基于此镜像进行编写Dockerfile的,所以这里先下载了。



大家可在:https://hub.docker.com/搜索,并选择自己想要的对应镜像文件。



maven插件推送方式


基于此方式时,是本地利用maven的docker插件进行编译,同时推送到远程的docker服务器中。所以事先需要远程的Docker服务开启远程访问权限。本例演示的Docker版本为(docker -v 命令):


Docker version 1.13.1, build 774336d/1.13.1


这里说明下开启的方式(基于阿里云的Linux系统):


1. 修改/etc/docker/daemon.json文件,加入hosts配置即可。

如:


{

  "hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]

}


2. 重新加载配置文件,并重启docker


systemctl daemon-reload

systemctl restart docker


3. 验证,直接访问:


curl 127.0.0.1:2375/info


返回记录即可说明已经生效。



也可以直接浏览器访问:http://服务器IP:2375/info, 效果是一样的(这里隐去了阿里云服务器的地址)。



接下来正式开始编写示例。


0.创建一个web演示应用(这里大家可自行创建,或者直接下载本章节示例)



工程结构:



1.加入打包插件docker maven的pom依赖。


<build>

        <plugins>

            <!-- springboot打包 -->

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

             

            <plugin>

                <groupId>com.spotify</groupId>

                <artifactId>docker-maven-plugin</artifactId>

                <version>0.4.9</version>

                <configuration>

                   <!-- 镜像名称  -->

                   <imageName>lqdev.cn/demo</imageName>

                   <!-- docker远程服务器地址 -->

                   <dockerHost>http://服务器IP:2375</dockerHost>

                   <!-- Dockerfile文件存放目录 -->

                   <dockerDirectory>src/main/docker</dockerDirectory>

                   <resources>

                    <resource>

                        <directory>${project.build.directory}</directory>

                        <include>${project.build.finalName}.jar</include>

                    </resource>

                </resources>

                </configuration>

            </plugin>

        </plugins>

    </build>


2.编写Dockerfile,注意大小写,后面的file是不大写开头的。


# Dockerfile

# 基于的镜像

FROM openjdk:8-jdk-alpine

 

VOLUME /opt/tmp

 

ADD chapter-14-0.0.1-SNAPSHOT.jar app.jar

 

# -Djava.security.egd=file:/dev/./urandom 可解决tomcat可能启动慢的问题

# 具体可查看:https://www.cnblogs.com/mightyvincent/p/7685310.html

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

# 对外端口

EXPOSE 8080

 

3.编码运行。


mvn clean package docker:build -Dmaven.test.skip=true



注意:这里若出现了编译异常,常见的就是500: HTTP 500 Internal Server Error了。造成这种的情况一般是镜像名称不符合命名规范:限制为字母数字 [a-zA-Z0-9],和标点符号 [.-_],及/和:(“:”一般上用来区分版本的,如lqdev.cn/demo:v1),或者Dockerfile文件未找到之类的,若出错了大家可重点看下这两个地方。


网友反馈:有些环境会出现如下错误


Caused by: com.spotify.docker.client.exceptions.DockerException: manifest for openjdk:8-jdk-alphine not found


出现此错误时,可考虑换一个镜像,如jboss/base-jdk:8(此镜像比较大,原来选择openjdk:8-jdk-alphine也是出于大小考虑。),或者使用自制镜像。


4.查看远程镜像


docker images



5.运行镜像,查看应用是否正常启动。


docker run -d -p 8080:8080 lqdev.cn/my-springboot-images



查看日志或者直接浏览器访问:http:服务器地址:8080/,即可。


有返回预期的数据,部署成功!


基于已有镜像,运行jar


基于有时候没有开启远程服务,也可把jar上传至服务器,然后编写脚本进行运行,这里简单示例下,正常部署时,正常是通过jenkins打包,然后编写打包后事件,运行脚本即可。


编写运行镜像脚本:


docker run -d -p 1234:8080 -v /opt/docker/chapter-14-0.0.1-SNAPSHOT.jar:/usr/chapter-14-0.0.1-SNAPSHOT.jar --name SpringbootByJar openjdk:8-jdk-alpine java -jar /usr/chapter-14-0.0.1-SNAPSHOT.jar



其实就是把jar拷贝从宿主中拷贝到容器中,然后运行java命令进行启动。和原来的运行jar方式是一样的。


运行后访问:http://服务器地址:1234 即可查看效果,验证是否部署成功了。



总结


本章节主要是讲解了利用Maven的Docker打包工具进行应用构建同时推送到远程仓库及已有jar的情况下,直接在容器中运行jar。其实原理都是一样的,都是把jar放入到容器中,然后利用java命令进行运行应用。本章节,若是对docker不熟悉可能会有点懵,因为好多命令都没有具体说明,(┬_┬),大家可查阅相关资料,对Docker有了解后在进行尝试。周末看看,有时间会写几章关乎Docker入门及基本使用的教程的,当然这些教程都是个人见解了,但至少应该能让新手有个了解~


最后


目前互联网上很多大佬都有SpringBoot系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。


系列


本文标题:SpringBoot | 第十四章:基于 Docker 的简单部署
本文链接:https://www.kyjszj.com/jszq/332.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
文章版权及转载声明

作者:开源技术之家本文地址:https://www.kyjszj.com/jszq/332.html发布于 12个月前 ( 06-05 )
文章转载或复制请以超链接形式并注明出处开源技术之家

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,575人围观)参与讨论

还没有评论,来说两句吧...