基本概念
-
镜像的概念
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 -
镜像的分层存储结构
Docker 设计时,就充分利用 Union FS 的技术,将镜像设计为分层存储的架构。镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。 -
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。下图可以和明显的看到镜像的分层结构
-
分层结构的特点
<1>共享宿主机的kernel
<2>base镜像提供的是最小的Linux发行版
<3>同一docker主机支持运行多种Linux发行版
<4>采用分层结构的最大好处是:共享资源
<5>Copy-on-Write 可写容器层
<6>容器层以下所有镜像层都是只读的
<7>docker从上往下依次查找文件
<8>容器层保存镜像变化的部分,并不 会对镜像本身进行任何修改 l
<9>一个镜像最多127层
-
在传统的Linux操作系统内核启动时,首先挂载一个只读的rootfs,当系统检测其完整性后,将其切换成读写(read-write)模式。
-
docker 沿用了传统操作系统的rootfs的挂载方式,在docker daemon启动之后,rootfs处于docker文件系统的最顶层,并且只是只读模式;挂载完毕后利用联合挂载技术在已有的rootfs文件系统上再挂载一个读写层,这样对于用户来说可读可写的文件系统就可以完全展示出来。
-
docker镜像系统的分布:
namespace
读写层
初始化层
只读层 -
镜像的构建
-
docker commit 构建新镜像三部曲
(1)运行容器 ——docker run -it --name test busybox
(2)修改容器 —— echo helloworld > testfile
(3)将容器保存为新的镜像——docker commit test test:v1 -
缺点:
效率低、可重复性弱、容易出错
使用者无法对镜像进行审计,存在安全隐患
一、搭建简单的2048游戏
1.安装docker
[root@server1 docker]# ls
[root@server1 docker]# yum install -y *
[root@server1 docker]# yum install -y bash-*
[root@server1 docker]# systemctl start docker