Docker镜像、容器(二)

2019-07-10  本文已影响0人  撸出优雅的代码

一、Docker 镜像

  1. 镜像是一整套的文件系统(多层文件系统联合组成)

    • 容器运行时所需的程序、库、资源、配置等文件
    • 运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
    • 镜像不包含任何动态数据,其内容在构建之后也不会被改变
  2. 镜像分层存储

    • 镜像由多层文件系统联合组成,镜像构建时,会一层层构建,前一层是后一层的基础
    • 删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。实际上该文件会一直跟随镜像
    • dockerfile每次run都是一层,减少run的次数非常重要

二、Docker 容器

  1. 容器的实质是进程,容器是完全使用沙箱机制,对进程的封装隔离
    • 容器启动后实际上就是在镜像为基础层的前提下增加容器的存储层
    • 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡,任何保存于容器存储层的信息都会随容器删除而丢失

容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

  1. 容器的声明周期

    • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
    • 利用镜像创建并启动一个容器
    • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    • 从地址池配置一个 ip 地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被终止
  2. Docker 容器网络

一台虚拟机上会有一个docker虚拟网卡,所有的容器都桥接在虚拟网卡上面,可以相互通信
虚拟网卡又通过net网络连接虚拟机网卡,所以虚拟机只能映射端口到容器端口实现通讯

上一篇 下一篇

猜你喜欢

热点阅读