Docker Images:

Docker 镜像里面还有启动容器所需要的文件系统机器内容,因此用于启动和创建容器。

  • 采用分层构建机制,大体分为两部分:最底层为bootfs, 上面为rootfs:
  • Bootfs: 用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后,会卸载,节约内存空间;
  • Rootfs: 位于bootfs之上,表现为容器的根文件系统;
  • docker image分析工具 docker image layer_Docker

  • Docker image layer:
    位于下层的镜像称为父镜像,最底层的称为基础镜像(base image);
    注意只有最上层为“可读写层”,其他均为“只读层”。
  • docker image分析工具 docker image layer_Docker_02

  • Docker registry
    存放镜像的仓库,启动容器时,docker daemon会首先从本地获取相关镜像;本地镜像不存在时,会从docker registry中获取镜像,并拉取到本地,加以保存。
  • docker image分析工具 docker image layer_Docker_03

  • 一个registry由两部分组成:repository和index:
    具体的docker registry会在后面详细描述。

镜像的生成途径:

  • Dockerfile: docker build 命令来生成一个镜像,后续会重点详细描述;
  • 基于容器制作:在容器里面操作完之后,用docker commit命令制作镜像
  • Docker Hub: 直接从docker pull 。

下面先重点详细介绍下基于容器制作镜像:

先启动并进入一个容器中(还是以busybox为例):

docker image分析工具 docker image layer_docker_04

然后,在容器中进行一系列操作(下面为example):

docker image分析工具 docker image layer_docker image分析工具_05


然后,用docker commit生成镜像(注意,将容器先暂停):

docker image分析工具 docker image layer_docker_06


最后,用这个新镜像验证是否有index.html文件:

docker image分析工具 docker image layer_文件系统_07


镜像制作成功。

镜像导入和导出:

Docker save: 将本地下载好的镜像打包;

docker image分析工具 docker image layer_文件系统_08


Docker load:将打包好的镜像文件,放在另外一台机器docker load 即可:

docker image分析工具 docker image layer_docker image分析工具_09

总结:

下图为总结出的镜像制作过程图:

docker image分析工具 docker image layer_Docker_10