Docker基础映像和扩展架构

时间:2016-02-07 21:15:30

标签: docker

我有一个在MongoDB,Node JS Api,React前端,Nginx代理等上运行的应用程序。我将所有这些设置作为单独的图像并在本地运行(OSX)在单独的链接容器中,我使用Docker Compose运行。在生产方面,我目前在Digital Ocean上设置了一个(一个)Ubuntu服务器,并期望根据需要快速扩展到多个服务器。

我的问题是为每个容器处理底层Linux基本映像的最佳方法是什么?

1)Linux机器和Docker之外是否存在所有Linux设置(apt-gets,node / mongo安装等),并且可以简单地创建该映像的快照,启动新的服务器实例,如果需要快速缩放,则运行所需的Docker容器,或

2)所有的Linux设置都应该存在于“基础”Ubuntu映像中,mongo,node和nginx映像构建在它之上。这导致每个图像的大小显着增长,因为它们每个都有一个单独的Ubuntu实例,加上运行mongo,node和nginx的所有包依赖项,或者

3)每个进程(mongo,node,nginx)是否都有一个单独的Linux基础Docker镜像,因为它们各自都有独立的依赖关系?同样,每个图像都会增长,因为它们每个都会运行一个Ubuntu实例。

使用Docker处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

答案是#2,但我怀疑你可能不完全理解容器和图像之间的关系。

Docker如何使用图像

首先来自Docker docs的图片:

enter image description here

容器是从图像创建的。图像仅在本地下载和缓存。图像通过注册表分发。

图像图层

Docker镜像与虚拟机镜像的不同之处在于它们是如何构建和存储的。再次来自文档:

  

每个图像由一系列图层组成。   Docker使用union文件系统来组合这些   将图层分成单个图像。联合文件系统允许文件和   单独的文件系统的目录,称为分支   透明地覆盖,形成一个连贯的文件系统。

     

Docker如此轻量级的原因之一就是因为这些原因   层。当您更改Docker镜像时 - 例如,更新一个   应用到新版本 - 构建新图层。因此,相反   而不是替换整个图像或完全重建,就像你可能做的那样   使用虚拟机,只添加或更新该层。轮到你了   不需要分发全新的图像,只需要更新,制作   更快更简单地分发Docker镜像。

因此,您的mongo,node和nginx图像将是包含基本Linux设置的基本映像顶部的薄层。该基本图像将仅下载一次,并将被其他图像重新用作组件层。

相关问题