毫无疑问,Docker已经成为近年来最热门甚至是颠覆性的技术之一。在国际上,几乎所有泛云计算相关的公司都在一定程度上宣布了对Docker的支持和集成。在2014年6月的DockerCon上,许多公司分享了他们如何与Docker集成的故事。一、什么是Docker镜像A:从整体上看,一个完整的Docker镜像可以支持Docker容器的运行,主要是在Docker容器运行过程中提供文件系统的视角。例如,一个ubuntu:14.04镜像提供了一个基本的ubuntu:14.04发布版本。当然,这个映像不包含操作系统Linux内核。以上内容是从宏观的角度来看什么是Docker镜像,接下来我们将从微观的角度深入探讨Docker镜像。刚才提到“在Debian镜像中安装MySQL5.6会变成mysql:5.6镜像”,其实这时候就体现了Docker镜像级别的概念。底层一个Debian操作系统镜像,上面叠加一个mysql层,完成mysql镜像的搭建。层的概念不难理解。这时候我们一般把debian操作系统的镜像称为mysql镜像层的父镜像。Docker有两个很重要的技术,第一个是Linux容器技术,第二个是Docker镜像技术。从技术本身来看,两者具有很高的可复制性,没有绝对的技术难度。但是由于DockerHub的数据量很大,DockerHub的可复现性几乎不存在,这就需要生态的打造。2、在介绍Docker镜像的内容之前,先跟大家分享一下我在接触Docker的两年中,对Docker镜像内容的理解变化。第一阶段:初步接触Docker。相信很多爱好者都会和我有同样的理解:Docker镜像代表了一个容器的文件系统内容;第二阶段:初步接触联合文件系统。联合文件系统的概念让我体会到了图像层次管理的技术。每一层镜像都是容器文件系统内容的一部分。第三阶段:研究镜像与容器的关系:容器是一个动态的环境,镜像各层的文件都是静态内容,但需要Dockerfile中的ENV、VOLUME、CMD等内容这些内容是在容器的运行环境中实现的,而这些内容不能直接定位到各层镜像所包含的文件系统内容中。这时候每个Docker镜像也会包含json文件记录和容器之间的关系。因此,Docker镜像的内容主要包括两部分:***,镜像层文件的内容;第二,图片json文件。3、Dockerfile、Docker镜像和Docker容器的关系Dockerfile是软件的原材料,Docker镜像是软件的交付物,Docker容器可以看作是软件的运行状态。从应用软件的角度来看,Dockerfile、Dockerimage、Dockercontainer代表了软件的三个不同阶段。Dockerfile是面向开发的,Docker镜像成为交付标准,Docker容器涉及到部署和运维。三者缺一不可,齐心协力。作为Docker生态系统的基石。简单的说,Dockerfile就是构建一个Docker镜像,通过Docker镜像来运行Docker容器。4、为什么一个ubuntu:14.04的镜像有4个镜像层,前三层的内容好像都一样,比如etc?虽然是三层,但是会有两种情况,etc子目录路径相同,上层会覆盖下层;如果内部文件路径不同,它们都会存在并呈现给顶层。5、如何保证唯一一个deamon的稳定性和健壮性?分布式系统需要大量机器协作,面临诸多挑战:***、异构机器和网络:分布式系统中的机器配置不同,其上运行的服务也可能由不同的语言和架构实现,所以处理能力也不同;节点之间通过网络相连,不同网络运营商提供的网络带宽、时延、丢包率不同。如何保证大家齐头并进,共同实现目标,这四方面都是不小的挑战。二、常见节点故障:虽然单节点故障概率比本题高,但首先要知道dockerdaemon的稳定性在哪些方面,哪个场景更差?确实,dockerdaemon有缺点。比如daemon和container的耦合等等。目前来看,一般来说,dockerdaemon应该不可能保证绝对的稳定。
