美文网首页
docker构建镜像

docker构建镜像

作者: e02f7fdbb400 | 来源:发表于2017-12-01 17:52 被阅读10次

    Docker 提供了两种构建镜像的方法:

    docker commit 命令

    过程:运行容器——修改容器——保存为新的镜像

    docker commit oldname newname
    

    Dockerfile 构建镜像

    Dockerfile 是一个文本文件,记录了镜像构建的所有步骤。
    1.当前目录为/root


    image.png

    2.编写Dockerfile文件



    3.编译镜像
     docker build -t ubuntu-with-vi-dockerfile . 
    

    运行 docker build 命令,-t 将新镜像命名为 ubuntu-with-vi-dockerfile,命令末尾的 . 指明 build context 为当前目录。Docker 默认会从 build context 中查找 Dockerfile 文件,我们也可以通过 -f 参数指定 Dockerfile 的位置。



    从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。
    Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /root,该目录下的所有文件和子目录都会被发送给 Docker daemon。
    所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 /、/usr 作为 build context,否则构建过程会相当缓慢甚至失败。


    Step 1:执行 FROM,将 ubuntu 作为 base 镜像。
    ubuntu 镜像 ID 为20c44cd7596f。


    Step 2:执行 RUN,安装 vim。启动 ID 为09888f68d9e3 的临时容器,在容器中通过 apt-get 安装 vim。


    安装成功后,将容器保存为镜像,其 ID 为 4cffcab53eda.
    删除临时容器 09888f68d9e3 ,镜像构建成功。


    查看镜像分层结构

    ubuntu-with-vi-dockerfile 是通过在 base 镜像的顶部添加一个新的镜像层而得到的。
    这个新镜像层的内容由 RUN apt-get update && apt-get install -y vim 生成。这一点我们可以通过 docker history 命令验证。



    docker history 会显示镜像的构建历史,也就是 Dockerfile 的执行过程。

    镜像的缓存特性


    之前已经运行过相同的 RUN 指令,这次直接使用缓存中的镜像层 4cffcab53eda。



    在 ubuntu-with-vi-dockerfile 镜像上直接添加一层就得到了新的镜像 ubuntu-with-vi-dockerfile-2。


    ubuntu-with-vi-dockerfile.png docker1.png

    调试 Dockerfile

    Dockerfile 中每一个指令都会创建一个镜像层,上层是依赖于下层的。无论什么时候,只要某一层发生变化,其上面所有层的缓存都会失效。
    也就是说,如果我们改变 Dockerfile 指令的执行顺序,或者修改或添加指令,都会使缓存失效。
    可通过docker run -it 出错镜像id 进行调试

    相关文章

      网友评论

          本文标题:docker构建镜像

          本文链接:https://www.haomeiwen.com/subject/beixbxtx.html