一、Docker 镜像
-
镜像是一整套的文件系统(多层文件系统联合组成)
- 容器运行时所需的程序、库、资源、配置等文件
- 运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
- 镜像不包含任何动态数据,其内容在构建之后也不会被改变
-
镜像分层存储
- 镜像由多层文件系统联合组成,镜像构建时,会一层层构建,前一层是后一层的基础
- 删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。实际上该文件会一直跟随镜像
- dockerfile每次run都是一层,减少run的次数非常重要
二、Docker 容器
-
容器的实质是进程,容器是完全使用沙箱机制,对进程的封装隔离
- 容器启动后实际上就是在镜像为基础层的前提下增加容器的存储层
- 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡,任何保存于容器存储层的信息都会随容器删除而丢失
容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
-
容器的声明周期
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
-
Docker 容器网络
一台虚拟机上会有一个docker虚拟网卡,所有的容器都桥接在虚拟网卡上面,可以相互通信
虚拟网卡又通过net网络连接虚拟机网卡,所以虚拟机只能映射端口到容器端口实现通讯
网友评论