byheartzhxm
  • docker 本身不是容器,他是创建容器的工具,是应用容器引擎
    • Build,Ship and run  搭建、发送、运行
    • Build once,Run anywhere  搭建一次,到处能用
  • Docker技术的三大核心概念  
    • 镜像  像是面向对象的类
    • 容器  像是实例对象
    • 仓库  存储类的lib包
  • 容器的一些特性  
    • 容器应该是临时性的
      • 从你的dockerfile定义的镜像启动的容器应该尽可能短暂,这里的 短暂是说它可以被停止和销毁并且一个新容器的构建和替换是可以绝对最小化的变更和配置下完成的 
    • 使用.dockerignore文件  
      • 大多数情况下,最好把Dockerfile放在一个 空目录里,然后,只把构建Dockerfile需要的文件追加到该目录中。为了改进构建的性能,你也可以增加一个.dockerignore文件夹来排除文件和目录。该文件支持与.gitignore类似配置模式
    • 每个容器只关心一个问题
      • 解耦应用使得多个容器使用水平扩展和复用更加容易
      • 如果容器之间存在相关依赖,可以使用docker容器网络来通信
    • 最小化层数和它用的层数最小化之间找到平衡
    • 构建缓存
      • 在构建过程中,docker会逐句读取你的dockerfile中的指令按指定顺序执行,因为每个指令都会 被检查docker会在它的缓存中查可以重用的现有镜像,而不是 创建一个 新的镜像。如果你根本不适用缓存,可以对docker build使用参数--no-cache=true

        如果使用docker缓存,那么理解它什么时候找到一个匹配镜像以及什么时候不找就非常重要了。docker将遵循以下原则

        以一个再婚村中的镜像开始,下一个指令与所有原子该基础的镜像做好对比 ,来查看镜像中是否有一个使用了完全相同的镜像构建,如果没有,缓存不可用;

        大多数情况下简单的对比 Dockfile中的指令与子镜像就够了,然后一些特定的指令需要更多的检查和解释

        比如:ADD和COPY指令 ,镜像中的文件内容 被检查并且为每个文件计算校验和。这些文件最终修改和访问时间将不被考虑到校验和内。在查找缓存期间,检验和将被用于与已存在的镜像校验和进行对比。如果文件中有任何变化比如内容或者元数据,那么缓存失效

        除了ADD和COPY命令以外,缓存检查将不会检查容器中的文件来确定缓存匹配。比如,当处理一个RUN apt-get -y update容器中的文件更新将不会被检查来确定是否命中已存在缓存。在这种情况下只有命令字符串自己将被用来 匹配

分类:

技术点:

相关文章: