Docker

问题:

    通过发布平台构建新的应用镜像的时候,由于缺少了一个nginx yum包,导致最后运行时没有配置上nginx。

原因:

1. 依赖的内部yum仓库里把这个nginx的yum包移到了回收站,所以导致我再去拉的时候就拉不到这个包了

2. 而docker build时,如果yum install的包不存在,是不会中断docker build的,docker还是可以把镜像构建出来。

解决办法:

    把运行时需要的环境工具做成基础镜像,而不是在每次build时再重新去安装。


分析:

    Docker提供一致的运行环境

    镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

-> 这里可以看到docker本身就提供了解决环境问题的思路,通过镜像提过了一致的运行环境。并且每一层构建完成后就是只读的。所以对于作为基础运行环境的软件,放到基础层就比较合适。每次对更新的应用程序构建镜像,不需要也不应该再去构建其所需要的运行环境。


Docker的基础概念:

    Docker - Build,ship,and Run Any App,Anywhere

1. 镜像:是一个特殊的文件系统,除了提供容器运行所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数

2. 容器:是镜像运行时的实体。容器的实质是进程,运行在属于自己的独立的命名空间。

    按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。

3. 仓库:镜像仓库是Docker用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

参考:可能是把Docker的概念讲的最清楚的一篇文章

你可能感兴趣的:(Docker)