1. DockerFile内容基础知识

    每条保留字指令都必须为大写字母且后面要跟随至少一个参数
    指令按照从上到下,顺序执行
    “#”表示注释
    每条指令都会创建一个新的镜像层,并对镜像进行提交

    1. Docker执行DockerFile的大致流程

    docker从基础镜像运行一个容器->执行一条指令并对容器作出修改->执行类似docker commit的操作提交一个新的镜像层->docker再基于刚提交的镜像运行一个新容器->执行DockerFile中的下一条指令直到所有指令都执行完成

    1. FROM scratch 基础镜像层
    2. ADD centos-7-x86_64-docker.tar.xz /
    3. 添加一个...的压缩包
    4. LABEL \
    5. org.label-schema.schema-version="1.0" \
    6. org.label-schema.name="CentOS Base Image" \
    7. org.label-schema.vendor="CentOS" \
    8. org.label-schema.license="GPLv2" \
    9. org.label-schema.build-date="20201113" \
    10. org.opencontainers.image.title="CentOS Base Image" \
    11. org.opencontainers.image.vendor="CentOS" \
    12. org.opencontainers.image.licenses="GPL-2.0-only" \
    13. org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
    14. 说明
    15. CMD ["/bin/bash"] 运行后执行这句话

    如上面的DockerFile例子
    在基础镜像上运行一个容器,在这个容器内添加Centos的压缩包然后提交一个新的镜像层,然后再基于这个有Centos压缩的镜像运行一个新容器,如果该容器后面还有执行的指令则继续修改该容器并提交新的镜像层,直到最后一个镜像,最后一个镜像也就是容器层。

    总结:
    从应用软件的角度来看,DockerFile、Docker镜像与Docker容器分别代表软件的三个不同阶段
    DockerFile是软件的原材料
    Docker镜像是软件的交付品
    Docker容器则可以认为是软件的运行态,一个进程
    DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
    从开发的角度来看,以后开发人员只需要编写好DockerFile,然后编译一个镜像文件出来交给运维人员就行,由运维拿着这个镜像文件去运行容器部署。

    DockerFile定义了进程需要的一切东西。
    DockerFile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务、内核进程打交道 ,这时需要考虑如何涉及namespace的权限控制)