设为首页 加入收藏

TOP

SpringBoot | 第十四章:基于Docker的简单部署(一)
2018-08-27 09:59:32 】 浏览:61
Tags:SpringBoot 十四 基于 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/搜索,并选择自己想要的对应镜像文件。

dockerdocker

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演示应用(这里大家可自行创建,或者直接下载本章节示例)

demo应用demo应用

工程结构:

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 o
编程开发网
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java异常处理的9个最佳实践 下一篇SpringBoot | 第十三章:测试相关..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

最新文章

热门文章

C 语言

C++基础

windows编程基础

linux编程基础

C/C++面试题目

array(4) { ["type"]=> int(8) ["message"]=> string(77) "Use of undefined constant bencandy_cache_time - assumed 'bencandy_cache_time'" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(207) }