docker容器共享宿主机环境,从而为镜像体积减负
一、背景介绍
响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理。可是随着服务越来越多,镜像也越来越多。每次制作镜像的时候都需要将依赖打进容器,这样一个jre的环境就是100多M。有一天突发奇想,容器能不能共用宿主机的环境?这样每次打镜像时体积就会少不少。于是就动手试试了试,结果还真可以,哈哈。
二、测试
我们测试用的是java的web项目做的测试,框架用的springboot,由于集成了tomcat插件,所以web项目打成jar包即可运行。
1、在宿主机上安装jdk环境,目录在/home/softwares/jdk1.8.0_151。
2、制作没有jdk环境的镜像。
Dockerfile文件内容如下:
*****************************************************************************
From debian:latest
ADD springWeb.jar /app.jar
ENV JAVA_HOME="/home/softwares/jdk1.8.0_151"
ENV PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/sbin"
ENTRYPOINT [ "java", "-jar", "/app.jar" ]
******************************************************************************
以上镜像是没有jdk环境的,所以在生成容器的时候一定要把宿主机jdk目录挂载到容器中。
3、生成镜像
docker build -t jdktest .
注释:jdktest是镜像的名字。
4、生成容器
docker run -d --name jdktest -p 8088:8081 -v /home/softwares:/home/softewares --restart=always jdktest
5、打开8088端口,然后用浏览器访问项目地址,成功!
三、优点
1、它的优点很明显,减少许多镜像体积。
debian系统有的只有5M不到,加上自己的一个jar包,镜像可能也就30M不到。而一个jre1.8的环境就得100多M。可以所体积减少很多。
四、缺点
1、增加了容器对宿主机的依赖性。
一旦宿主机的运行环境进行升级或改动,必定影响容器的运行。
2、增加了新人交接的难度。
生成容器时必须要将宿主机的运行环境目录挂载到容器中,也就是上面的 -v /home/softwares:/home/softewares操作。若没有此操作,容器是生成后就退出了。若进
行新人交接时,他不知道要进行环境目录挂载,后面就GG了。
五、影响
目前尚不清楚运行环境目录挂载至容器中对项目运行的影响或不稳定性,以上只供测试使用。若大家对这种做法有什么看法,欢迎来交流。
最新文章
- java基础知识总结(2)
- zorka源码解读之Instrument实现原理
- 声明变量,一定要用 var!
- Unity3D 中的3种坐标系
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
- shell排序算法
- vmware能够ping通内网,上不了外网的解决方法
- HTML5.1 推荐中 1.5.3. Extensibility 段落翻译
- python笔记(三)---文件读写、修改文件内容、处理json、函数
- 数据格式JSON
- BIOS + MBR >; UEFI + GPT
- C语言学习快速笔记
- element.dataset API
- Ubuntu 安装以及web服务器配置
- 【bzoj2878】 Noi2012—迷失游乐园
- 37. Sudoku Solver *HARD*
- java正则表达式学习
- 从一个带有http://网络文件中获取文件名
- samba和SELINUX 冲突
- xeno 实时性能测试 系统时钟1秒100个tick再测试
热门文章
- SpringCloud 和 Dubbo 有哪些区别?
- tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑
- noi.ac-CSP模拟Day5T1 组【二分图最大匹配】
- flaskurl传参用法
- python 正则sub的使用
- []转帖]linux 上修改了nginx.conf 怎么重新加载配置文件生效
- seata项目结构
- Active Directory Users and Computers 安装与使用(win7&;win10)
- 干货 | 深入分析 string.intern() 方法
- python__基础数据类型