美文网首页
docker镜像分层机制

docker镜像分层机制

作者: 彳亍口巴 | 来源:发表于2022-10-09 20:19 被阅读0次

    什么是 Docker 镜像分层机制?
    首先,让我们来看下 Docker Image 中的 Layer 的概念:


    Docker Image 是有一个层级结构的,最底层的 Layer 为 BaseImage(一般为一个操作系统的 ISO 镜像),然后顺序执行每一条指令,生成的 Layer 按照入栈的顺序逐渐累加,最终形成一个 Image。

    直观的角度来说,是这个图所示:

    每一次都是一个被联合的目录,从目录的角度来说,大致如下图所示:


    Docker Image 如何而来呢?
    简单来说,一个 Image 是通过一个 DockerFile 定义的,然后使用 docker build 命令构建它。

    DockerFile 中的每一条命令的执行结果都会成为 Image 中的一个 Layer。

    这里,我们通过 Build 一个镜像,来观察 Image 的分层机制:

    Dockerfile:

    # Use an official Python runtime as a parent image
    FROM python:2.7-slim
    
    # Set the working directory to /app
    WORKDIR /app
    
    # Copy the current directory contents into the container at /app
    COPY . /app
    
    # Install any needed packages specified in requirements.txt
    RUN pip install --trusted-host pypi.python.org -r requirements.txt
    
    # Make port 80 available to the world outside this container
    EXPOSE 80
    
    # Define environment variable
    ENV NAME World
    
    # Run app.py when the container launches
    CMD ["python", "app.py"]
    

    构建结果:

    root@rds-k8s-18-svr0:~/xuran/exampleimage# docker build -t hello ./
    Sending build context to Docker daemon  5.12 kB
    Step 1/7 : FROM python:2.7-slim
     ---> 804b0a01ea83
    Step 2/7 : WORKDIR /app
     ---> Using cache
     ---> 6d93c5b91703
    Step 3/7 : COPY . /app
     ---> Using cache
     ---> feddc82d321b
    Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
     ---> Using cache
     ---> 94695df5e14d
    Step 5/7 : EXPOSE 81
     ---> Using cache
     ---> 43c392d51dff
    Step 6/7 : ENV NAME World
     ---> Using cache
     ---> 78c9a60237c8
    Step 7/7 : CMD python app.py
     ---> Using cache
     ---> a5ccd4e1b15d
    Successfully built a5ccd4e1b15d
    

    通过构建结果可以看出,构建的过程就是执行 Dockerfile 文件中我们写入的命令。构建一共进行了7个步骤,每个步骤进行完都会生成一个随机的 ID,来标识这一 layer 中的内容。 最后一行的 a5ccd4e1b15d 为镜像的 ID。由于我贴上来的构建过程已经是构建了第二次的结果了,所以可以看出,对于没有任何修改的内容,Docker 会复用之前的结果。

    如果 DockerFile 中的内容没有变动,那么相应的镜像在 build 的时候会复用之前的 layer,以便提升构建效率。并且,即使文件内容有修改,那也只会重新 build 修改的 layer,其他未修改的也仍然会复用。

    通过了解了 Docker Image 的分层机制,我们多多少少能够感觉到,Layer 和 Image 的关系与 AUFS 中的联合目录和挂载点的关系比较相似。

    而 Docker 也正是通过 AUFS 来管理 Images 的。


    引用(本文章只供本人学习以及学习的记录,如有侵权,请联系我删除)

    Docker原理(图解+秒懂+史上最全)_架构师-尼恩的博客-CSDN博客_docker原理

    相关文章

      网友评论

          本文标题:docker镜像分层机制

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