进程调度子系统、进程通信子系统、内存管理子系统、设备管理子系统、文件管理子系统、网络通信子系统、作业控制子系统
Linux文件系统由bootfs和rootfs两部分组成
(1)bootfs:包含bootloader(引导加载程序)和kernel(内核)
(2)rootfs:root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。
不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等
Docker镜像是由特殊的文件系统叠加而成
最底端是bootfs,并使用宿主机的bootfs,所以启动的速度特别快
第二层是root文件系统rootfs,称为base image(centos/ubuntu)
此外上面还可以继续叠加其他的镜像文件。
所以它是一个分层文件系统。
统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。
当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。
(Docker镜像层都是只读的,容器层是可写的)
Centos的iso镜像文件包含bootfs和rootfs
docker的Centos镜像复用了宿主机的操作系统的bootfs,所以Centos镜像只有rootfs和其他镜像层。因此docker上的Centos镜像比Centos的iso镜像文件要小。
docker中镜像是分层的,某一个镜像的大小很小,但需要依赖父镜像和基础镜像,所以对外暴露的大小就很大了。
目录挂载的东西不会一起转换为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
Dockerfile是一个文本文件
包含一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
指定父镜像,指定dockerfile基于哪个image构建
作者信息,用来标明这个dockerfile谁写的
标签,用来标明dockerfile的标签,可以使用Label代替Malntainer最终都是在docker image基础信息中可以查看
执行命令,执行一段命令,默认是/bin/bash格式:
RUN command或者 RUN [“command”,“param1”,“param2”]
入口,一般在制作一些执行就关闭的容器中会使用
复制文件,build的时候复制文件到image中
添加文件,build的时候添加文件到image中,不仅仅局限于当前build上下文,可以来源于远程服务
环境变量,指定build时候的环境变量,可以在启动容器的时候,通过-e覆盖,格式ENV name=value
构建参数,构建参数,只在构建的时候使用的参数,如果有ENV,那么ENV的相同名字的值始终覆盖arg的参数
定义外部可以挂载的数据卷,指定build的image哪些目录可以启动的时候挂载到文件系统中,启动容器的时候使用-v绑定,格式VOLUME[“目录”]
暴露端口,定义容器运行的时候监听的端口,启动容器的使用-p来绑定暴露端口,格式:EXPOSE 8080 或者 EXPOSE 8080/udp
工作目录,指定容器内部的工作目录,如果没有创建则自动创建,如果指定 / 使用的是绝对地址,如果不是 / 开头,那么是在上一条workdir的路径的相对路径
指定执行用户,指定build或者启动的时候,用户在RUN、CMD、ENTRYPONT执行的时候的用户
健康检查,指定监测当前容器的健康监测的命令(很少用,因为很多时候,应用本身有健康监测机制)
触发器,当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后,会执行ONBUILD的命令,但是不影响当前镜像,用处也不怎么大
发送信号量到宿主机,该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出
指定执行脚本的shell,指定RUN、CMD、ENTRYPOINT执行命令的时候,使用的shell
基于centos7镜像,构建一个新的镜像,要求有vim工具,以及进入容器后在usr目录
FROM centos:7
MAINTAINER Bob
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
docker build -f ./centos_dockerfile -t mycentos:v1 .
-f :指定dockerfile的文件路径
-t :设置新的镜像的名称及版本
. :代表寻址的路径