Question
docker的2个image,他们的底层都是ubuntu,上一层是1个是jvm,另外一个是go
- images 启动后,是 在host的linux上的跑了一个ubuntu的内核吗?此内核算是一个操作系统?它有自己的内存管理?进程调度机制(但是不会使用此功能)?但从host角度来看,只是一个进程?
- 2个images启动后,image成为container。ubuntu是启动2遍吗?相当于host上起了2个ubuntu内核?虽然这个内核在host上只是一个进程?如果是java的应用,那是一个ubuntu内核里的进程?如果是go的应用,那它是另外一个ubuntu的内核里的一个进程? 我的这个概念是不是跟传统的虚拟机混淆起来了?
- 如果容器主要就是namespace,cgroup,那直接考exe可执行文件就行了。为什么底层要加一个ubuntu?直接把jvm、go文件拷贝做成image 不就行了吗?
- 如果想要在容器里有 cd、ls、等操作,把所有可能需要的这些exe一起打包进image不就行了吗
- 好像我的问题,总结起来就是:底层的ubuntu是不是必须的?刚上课提到 go的一个程序,Dockerfile是 From scratch.那底层是ubuntu不是必须的。那我看到的大部分image都是从centos、ubuntu基础上开始构建。这个ubuntu、centos的底层在80%的情况下,是必须的吗?
- 课程最后说 docker优势:不用起内核,快速,那底层用ubuntu是为什么?
Answer
个人观点
我认为提问者没有理解: 通过docker起来的 Container 是如何复用主机的内核的。
所以提问者会觉得只要我的 exec binary 塞进去,似乎就一切OK。
根本就不需要在容器里面搞什么Ubuntu centos的底层环境。
本菜狗尝试解答下 =。=
Summary
<aside>
👉 docker 在一般情况下,kernel都是不会改变的。kernel只会是你的 host kernel 。
</aside>