Docker

作者: jasminedj | 来源:发表于2018-08-22 19:40 被阅读0次

    从问题开始:

    1. Dockerfile是什么:是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

    Dockerfile命令详解

    From指定基础镜像: FROM <image name>

    Maintainer设置镜像的作者:MAINTAINER <author name>

    Run在shell或者exec的环境下执行的命令。Run指令会在新创建的镜像上添加新的层面(???)。RUN <command>

    Env设置环境变量,键值对。ENV <key> <value>

    Arg构造参数,定义参数名称,在--build-arg时用(没看懂???)

    Cmd提供容器默认的执行命令。Dockerfile只允许使用一次CMD指令,多个则只有最后一个生效。三种:CMD ["executable", "param1", "param2"], CMD ["param1", "param2"], CMD command param1 param2(shell,主进程为sh)


    2. 什么是Docker,Docker和虚拟机等传统虚拟技术有啥区别

    Container容器:操作系统层面的虚拟化技术,在容器内运行的程序只能看到容器的内容和设备信息(而真正的操作系统中的程序可以看到所有资源)。文件系统、网络互联、进程隔离。

    Docker在容器的基础上进一步封装,简化了容器的创建和维护。

    Docker和传统虚拟机的区别在于,传统虚拟机中的每个APP需要虚拟出一套完整的操作系统(Guest OS),而Docker直接运行于宿主操作系统(Host OS),只是APP之间共享内核(???),容器内没有自己的内核,不进行硬件虚拟。

    Docker在性能上能明显优于传统虚拟机:启动快、耗损少(实例多)


    3. 什么是镜像(Image)、什么是容器(Container)、什么是仓库(Repository)

    首先理解一个概念:文件系统的挂载。在内核启动之后,会挂载root文件系统(即/),用df -h可以看到mount的设备。

    Docker镜像:相当于是一个root文件系统。镜像中不包含任何动态数据,构造后即不可变。主要提供:容器运行依赖的程序、库、资源、配置;以及配置参数(匿名卷、环境变量、用户)。分层存储:镜像构建时,会一层层进行构建,每一层构建完即定下来了,不会再改变了。如果在下一层删除上一层的文件,不会真正删除,而只是标记为已删除,so虽然看不到这个文件,但是文件一直存在。

    Docker容器:容器是镜像的实例,每一个容器创建时,已镜像为基础,在镜像上创建容器存储层。一般要求容器存储层保持无状态,所有的文件写入操作,使用数据卷(Volume)或者绑定宿主目录。

    Docker Registry:多个仓库(多个镜像),每个仓库包含多个标签(Tag)-> 对应不同版本的镜像。其中公开的Docker Registry包含官方的Docker Hub,国内访问比较慢,有相关加速器可以加速。


    参考资料:

    从入门到实践

    相关文章

      网友评论

          本文标题:Docker

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