zoukankan      html  css  js  c++  java
  • 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镜像,如果不指定版本,则默认拉取最新的版本。
    [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
     
  • 相关阅读:
    Jmeter与LoadRunner 测试Java项目的坑
    关于<forEach>的<if>混合使用显示数据
    无题。省
    无题。思
    767A Snacktower
    喵哈哈村的括号序列

    队列
    优先队列
    768A Oath of the Night's Watch
  • 原文地址:https://www.cnblogs.com/xiaoliangxianshen/p/9216467.html
Copyright © 2011-2022 走看看