Docker:基础图像

Smx*_*Cde 8 docker

我试图了解Docker的概念,但有一点我无法理解:

据我所知,图像(因此 - 容器)可以从不同的Linux发行版中实例化,例如Ubuntu,CentOS等.

让我们说在主机上我运行标准的Ubuntu 14.04,

  • 如果我使用未从同一分配实例化的容器会发生什么?
    • 不是14.04?
    • 不是Ubuntu(或任何其他基于Debian的)?
    • 使用不同的图像基本图像有什么缺点?(假设我使用的是使用Ubuntu作为基本图像的图像A,使用Debian作为基本图像的图像B和使用CentOS作为基本图像的图像C)?

额外问题:如果开发人员未在Docker集线器描述中指定它,我如何知道用于图像的基本图像?

先感谢您!

Von*_*onC 7

码头工人也不能使用LXC(不是因为码头工人0.9),但libcontainer(现在的runc),它操作的命名空间,对照组,功能,AppArmor配置文件,网络接口和防火墙规则内置的执行驱动器-都在一个一致的和可预测的方式,和不依赖于LXC或任何其他用户包.

docker镜像表示winch将在访问主机内核时作为自己的内存和磁盘和用户空间中的容器运行的一组文件.
这与VM不同,VM不访问主机内核,但通过其虚拟机管理程序包含自己的硬件/软件堆栈.
容器只需在主机中设置限制(磁盘,内存,CPU).实际的VM必须构建一个全新的主机.

该docker镜像(文件组)可以是任何东西,只要:

这意味着图像可以是任何东西:另一个Linux发行版,甚至是一个可执行文件.例如,go(https://golang.org/)中的任何可执行编译都可以打包在自己的docker镜像中,而不需要任何Linux发行版:

FROM scratch
COPY my_go_exe /
ENTRYPOINT /my_go_exe
Run Code Online (Sandbox Code Playgroud)

scratch 是一个"空"图像,一个go可执行文件是静态链接的,因此它是自包含的,只依赖于对内核的系统调用.


Chr*_*man 6

主机操作系统和docker容器之间共享的主要内容是内核.从不同的发行版/版本运行docker容器的主要风险是它们可能依赖于主机系统上不存在的内核功能,例如,如果容器需要比主机安装的内核更新的内核.

理论上,Linux内核是向后兼容的.只要主机内核比容器内核更新,它就应该工作.

从操作角度来看,每次开始依赖于不同的基本映像,这是您需要监视更新和安全问题的另一个依赖项.在发现下一个大漏洞时,对一个分发进行标准化可以减少运营团队的工作量.