docker背景介绍
介绍一篇比较好的docker文章:https://www.jianshu.com/p/50f48eb25215
【个人理解】
docker:容器技术,在同一个服务器可以同时部署多个docker容器,容器间是隔离的,共享内核
虚拟机:通过Hypervisor层进行虚拟机管理,虚拟出多个操作系统
虚拟机是操作系统层面的隔离,docker是内核层面的隔离;docker比虚拟机少了Hypervisor层,通过docker deamon进行docker容器管理。
因此,docker启动时间是秒级,而虚拟机启动是分钟级
【docker与虚拟机比较】
比较好的总结:https://blog.51cto.com/11880730/2116096
借用两张图:
虚拟机:
docker:
优势
1、docker比虚拟机少了Hypervisor层,直接使用物理机的硬件资源,因此在cpu、内存利用率上,更胜一筹
2、docker启动比虚拟机快很多,虚拟机启动包含了系统引导时间以及系统资源消耗,而docker直接利用宿主机的内核,因此有着启动快,资源消耗低
3、环境统一,减少环境不同带来的开发影响
劣势
1、docker是应用层面的隔离,而虚拟机是硬件层面的彻底隔离,因此当宿主机的操作系统出现故障,docker多容器都会受到牵连,而虚拟机则不会
2、兼容性问题,docker目前还在版本快速更新中,细节功能调整较大,一些核心的模块依赖于高版本的内核,存在兼容性的问题
win10家庭版安装docker,运行springboot程序
1、安装docker
由于docker desktop for windows不支持win10家庭版,这里暂时选择了docker toolbox
下载网址:https://get.daocloud.io/toolbox/
安装过程默认即可
安装成功后会出现如下界面
2、使用docker运行springboot
可参考https://blog.csdn.net/weixin_40804733/article/details/88710845
2.1 构建springboot,编译打包
其中,通过idea的maven进行项目的编译打包即可
在普通的springboot项目中,添加docker依赖
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<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>
配置application.properites
这里指的了tomcat端口8090
2.2创建dockerfile
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD springboot-nginx-usersurvey-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
这个 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
*注意!!!
add 后面的名字和版本,必须和pom文件中的名字和板门是一样的,如图
2.3 构建docker镜像
编译打包,将jar包与dockerfile存放在同一个文件夹中
执行命令docker build -t docker .,构建镜像
使用docker image查看构建好的镜像
注意,这里可能遇到一个问题TLS handshake timeout
原因:镜像下载超时
修改镜像库即可
执行docker-machine restart,如下图即为成功
重新执行docker build -t docker .
2.4 运行docker容器
docker run -p 4000:8090 docker
访问网址
由于Docker引擎的守护进程使用的是Linux的内核,所以无法直接在windows中运行docker引擎,需要运行Docker Machine命令docker-machine,创建一个Linux虚拟机,用这个虚拟机才可以在windows系统上运行Docker引擎。
因此访问时,需要访问docker的虚拟ip
至此,win10 + docker + springboot搭建完毕
配置nginx学习中,待补充。。。
centos7安装docker+nginx
重新配置yum源,再修改/etc/docker/daemon.json
{
“registry-mirrors”: ["https://96e6e1rd.mirror.aliyuncs.com "]
}