小梁先森

导航

Docker镜像管理

什么是镜像?
简单说,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
 

posted on 2018-06-23 10:15  小梁先森  阅读(196)  评论(0编辑  收藏  举报