Docker镜像管理

Posted xiaoliangxianshen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像管理相关的知识,希望对你有一定的参考价值。

什么是镜像?
简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。
镜像从哪里来?
Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
默认是国外的源,下载会慢,建议配置国内镜像仓库:
# 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镜像,如果不指定版本,则默认拉取最新的版本。
[[email protected] ~]# docker image pull nginx
列出镜像
选项说明:
REPOSTITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
[[email protected] ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest cd5239a0906a 2 weeks ago 109MB
 
查看镜像历史的分层
[[email protected] ~]# 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
导出一个镜像
[[email protected] ~]# docker image save nginx > nginx.tar
anaconda-ks.cfg nginx.tar
[[email protected] ~]# du -sh nginx.tar
108M nginx.tar
导入一个镜像
[[email protected] ~]# docker load < nginx.tar
 

以上是关于Docker镜像管理的主要内容,如果未能解决你的问题,请参考以下文章

Docker镜像制作和管理

Docker实践:镜像的概念管理(查看下载删除)

Docker实践:镜像的概念管理(查看下载删除)

Docker镜像管理

Docker——Registry 通过shell管理私有仓库镜像

docker镜像管理基础