目录
镜像:
1. 一个分层存储的文件:
优点:易于扩展、优化存储空间
2. 一个软件的环境
3. 一个镜像可以用于创建多个容器
4. 一种标准化的交付
一、镜像工作原理
镜像不是一个单一的文件,而是有多层构成。可以通过 docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着 Dockerfile中的一条指令。
$ docker history nginx:1.14
IMAGE CREATED CREATED BY SIZE COMMENT
86898218889a 3 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 3 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B
<missing> 3 weeks ago /bin/sh -c set -x && apt-get update && apt… 53.7MB
<missing> 3 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.14.0.0.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.14.0-… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:e6ca98733431f75e9… 55.3MB
容器其实是在镜像的最上面加了一层读写层,在运行的容器中有文件改动时,会先从镜像里把要写的文件复制到容器自己的文件系统中,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件,这种方式提高了磁盘利用率。
若想持久化这些改动,可以通过 docker commit 将容器保存成一个新的镜像。
二、镜像管理
常用选项:
$ docker image --help
OPTIONS | DESCRIBE |
ls/images | 列出镜像 |
pull | 从仓库拉取镜像到本地 |
push | 从本地上传镜像到仓库 |
inspect | 显示详情 |
history | 镜像历史信息 |
import | 导入tar归档的容器文件系统创建镜像 |
save | 保存一个镜像到tar归档文件 | <