以下文章参考自:
https://blog.youkuaiyun.com/S_gy_Zetrov/article/details/78161154(强推):
https://blog.lqdev.cn/2018/07/27/springboot/chapter-fourteen/
http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html
https://www.runoob.com/docker/docker-tutorial.html
一、介绍
1.什么是docker?
首先,需要了解什么是容器
简单地说,一个容器包含了完整的运行时环境:一个应用、这个应用所需的全部依赖、类库、其他二进制文件、配置文件,它们统一被打入了一个包中。通过将应用平台和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。
虚拟化和容器有什么不同?
使用虚拟化技术时,可以被分发的文件包是一台虚拟机,它包含了整个操作系统和应用。一台运行着三个虚拟机的物理服务器,需要有一个管理虚拟机软件的中间层,以及运行在这个中间层之上的三个独立操作系统。
懒得写了,参考此文章:
https://baijiahao.baidu.com/s?id=1609932946964681808&wfr=spider&for=pc
docker定义
关于Docker,百度百科是这么说的:Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2.Docker的应用场景
-
Web 应用的自动化打包和发布。
-
自动化测试和持续集成、发布。
-
在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
3.Docker 的优点
-
1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。 -
2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。 -
3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
二、部署
前提条件:
1.可以运行jar包的环境
2.机器上已经安装了docker
3.准备部署的springboot的jar包
4.Dockerfile文件
note:
1.java:8 是使用jdk版本
2.dalaoyang_mgr.jar是使用jar包名称
3.ADD dalaoyang_mgr.jar /dalaoyang.jar 拷贝jar到容器
4.ENTRYPOINT 执行jar文件
首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。
1.Spring Boot 项目添加 Docker 支持
在 pom.xml-properties
中添加 Docker 镜像名称
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
plugins 中添加 Docker 构建插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<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>
<!-- Docker maven plugin -->
</plugins>
</build>
在目录src/main/docker
下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
# 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
这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,简单解释一下:
- FROM ,表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
- VOLUME ,VOLUME 指向了一个
/tmp
的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp
作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker
目录下创建一个临时文件并把它链接到容器中的/tmp
目录 - ADD ,拷贝文件并且重命名
- ENTRYPOINT ,为了缩短 Tomcat 的启动时间,添加
java.security.egd
的系统属性指向/dev/urandom
作为 ENTRYPOINT
这样 Spring Boot 项目添加 Docker 依赖就完成了。
构建打包环境
我们需要有一个 Docker 环境来打包 Spring Boot 项目,在 Windows10 搭建 Docker 环境。
win10安装 Docker 环境
https://blog.youkuaiyun.com/qq_31194443/article/details/92789514
其他操作系统安装docker环境
centOS:https://www.runoob.com/docker/centos-docker-install.html
macOS:https://www.runoob.com/docker/macos-docker-install.html
win7\win8:https://www.runoob.com/docker/windows-docker-install.html
生成docker镜像
将Dockerfile和jar放在一个文件夹,使用下面命令生成镜像,注意最后的.
docker build -t dalaoyang .
注意:dalaoyang是生成的镜像名称。
更多docker build命令可以查看菜鸟教程
查看一下docker镜像
docker images
如图,可以看到已经有了一个名称为dalaoyang的镜像
运行Docker容器
代码如下
docker run -d -p 9000:9000 dalaoyang
解释一下需要注意的地方
1.-d 后台运行
2.-p 9000:9000 将docker容器的9000端口映射到服务器上的9000端口
到这里就配置完成了,在浏览器使用:服务器ip:9000就能访问docker容器内部署的springboot项目了。