我试图了解Docker的概念,但有一点我无法理解:
据我所知,图像(因此 – 容器)可以从不同的Linux发行版中实例化,例如Ubuntu,CentOS等.
让我们说在主机上我运行标准的Ubuntu 14.04,
>如果我使用未从同一分配实例化的容器会发生什么?
>不是14.04?
>不是Ubuntu(或任何其他基于Debian的)?
>使用不同的图像基本图像有什么缺点? (假设我使用的是使用Ubuntu作为基本图像的图像A,使用Debian作为基本图像的图像B和使用CentOS作为基本图像的图像C)?
额外问题:如果开发人员未在Docker集线器描述中指定它,我如何知道用于图像的基本图像?
先感谢您!
最佳答案
Docker不使用LXC(不是since Docker 0.9)而是使用libcontainer(现在是
runc
),这是一个内置的执行驱动程序,它以一致且可预测的方式操作命名空间,控制组,功能,apparmor配置文件,网络接口和防火墙规则,而且没有取决于LXC或任何其他用户包.
docker镜像表示winch将在访问主机内核时作为自己的内存和磁盘和用户空间中的容器运行的一组文件.
这与VM不同,VM不访问主机内核,但通过其hypervisor包含自己的硬件/软件堆栈.
容器只需在主机中设置限制(磁盘,内存,cpu).实际的VM必须构建一个全新的主机.
该docker镜像(文件组)可以是任何东西,只要:
>它不依赖于主机库(因为它在自己的磁盘空间中被隔离,它无法访问主机文件,unless volumes are mounted)
>它只进行系统调用:参见“What is meant by shared kernel in Docker?”
这意味着图像可以是任何东西:另一个Linux发行版,甚至是一个可执行文件.例如,go(https://golang.org/)中的任何可执行编译都可以打包在自己的docker镜像中,而不需要任何Linux发行版:
FROM scratch
COPY my_go_exe /
ENTRYPOINT /my_go_exe