什么是镜像?
简单说, Docker 镜像是一个不包含 Linux 内核而又精简的 Linux 操作系统.
镜像从哪里来?
Docker Hub 是由 Docker 公司负责维护的公共注册中心, 包含大量的容器镜像, Docker 工具默认从这个公共镜像库下载镜像.
https://hub.docker.com/explore
默认是国外的源, 下载会慢, 建议配置国内镜像仓库:
- # vi /etc/docker/daemon.json
- {"registry-mirrors": [ "https://registry.docker-cn.com"]
- }
镜像与容器的联系
镜像不是一个单一的文件, 而是由多层构成. 我们可以通过 docker history <ID/NAME> 查看镜像中各层内容及大小, 每层对应着 Dockerfile 中的一条指令. Docker 镜像默认存储在 / var/lib/docker/<storage-driver > 中. 容器其实是在镜像的最上面加了一层读写层, 在运行容器里做的任何文件改动, 都会写到这个读写层. 如果容器删除了, 最上面的读写层也就删除了, 改动也就丢失了. Docker 使用存储驱动管理镜像每层内容及可读写层的容器层.
镜像的工作原理:
当我们启动一个新的容器时, Docker 会加载只读镜像, 并在其之上添加一个读写层, 并将镜像中的目录复制一份到 / var/lib/docker/aufs/mnt / 容器 ID 为目录下, 我们可以使用 chroot 进入此目录. 如果运行中的容器修改一个已经存在的文件, 那么会将该文件从下面的只读层复制到读写层, 只读层的这个文件就会覆盖, 但还存在, 这就实现了文件系统隔离, 当删除容器后, 读写层的数据将会删除, 只读镜像不变.
镜像的管理:
常用指令 描述
ls 列出镜像
build 构建镜像来自 Dockerfile
history 查看镜像历史
inspect 显示一个或多个镜像详细信息
pull 从镜像仓库拉取镜像
push 推送一个镜像到镜像仓库
rm 移除一个或多个镜像
prune 移除未使用的镜像. 没有被标记或被任何容器引用的
tag 创建一个引用源镜像标记目标镜像
export 导出容器文件系统到 tar 归档文件
import 导入容器文件系统 tar 归档文件创建镜像
save 保存一个或多个镜像到一个 tar 归档文件
load 加载镜像来自 tar 归档或标准输入
从仓库拉取 nginx 镜像, 如果不指定版本, 则默认拉取最新的版本.
[root@linux-docker01 ~]# docker image pull nginx
列出镜像
选项说明:
REPOSTITORY: 表示镜像的仓库源
TAG: 镜像的标签
IMAGE ID: 镜像 ID
CREATED: 镜像创建时间
SIZE: 镜像大小
- [root@linux-docker01 ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest cd5239a0906a 2 weeks ago 109MB
查看镜像历史的分层
[root@linux-docker01 ~]# docker image history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
- cd5239a0906a 2 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon... 0B
- <missing> 2 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
- <missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
- <missing> 2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx... 22B
- <missing> 2 weeks ago /bin/sh -c set -x && apt-get update && apt... 53.7MB
- <missing> 2 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.0.0.... 0B
- <missing> 2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.0-... 0B
- <missing> 7 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do... 0B
- <missing> 7 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
- <missing> 7 weeks ago /bin/sh -c #(nop) ADD file:ec5be7eec56a74975... 55.3MB
导出一个镜像
- [root@linux-docker01 ~]# docker image save nginx> nginx.tar
- [root@linux-docker01 ~]# ls
- anaconda-ks.cfg nginx.tar
- [root@linux-docker01 ~]# du -sh nginx.tar
- 108M nginx.tar
导入一个镜像
[root@linux-docker01 ~]# docker load < nginx.tar
来源: http://www.bubuko.com/infodetail-2655661.html