美文网首页
Docker镜像管理

Docker镜像管理

作者: 小李飞刀_lql | 来源:发表于2021-12-01 07:33 被阅读0次

    镜像是什么

    001 一个分层存储的文件,不是一个单一的文件
    002 一个软件的环境
    003 一个镜像可以创建N个容器
    004 一种标准化的交付
    005 一个不包含Linux内核而又精简的Linux操作系统
    

    镜像从哪里来

    Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
    地址:https://hub.docker.com
    
    -----------------------------------------------------------------------------
    配置镜像加速器:
    vi /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    

    镜像存储位置

    [root@es3 ~]# docker info
    Docker Root Dir: /var/lib/docker
    Storage Driver: overlay2
    [root@es3 overlay2]# cd  /var/lib/docker/overlay2
    ----------------------------------------------------------------------------
    001 分层存储
    002 Dockerfile的每一行指令都是一层存储
    

    镜像与容器联系

    1638312184354.png
    镜像:类似于虚拟机镜像,一个只读模板
    容器:通过镜像创建的运行实例
    

    管理镜像常用命令

    指令 描述
    ls 列出镜像 docker image ls
    build 构建镜像来自Dockerfile
    history 查看镜像历史 docker history redis
    inspect 显示一个或多个镜像详细信息 docker inspect redis
    pull 从镜像仓库拉取镜像
    push 推送一个镜像到镜像仓库
    rm 移除一个或多个镜像 docker image rm nginx
    prune 移除没有被标记或者没有被任何容器引用的镜像 docker image prune -a
    tag 创建一个引用源镜像标记目标镜像
    save 保存一个或多个镜像到一个tar归档文件 docker save nginx:latest > nginx.tar
    load 加载镜像来自tar归档或标准输入 docker load <nginx.tar
    #删除所有的容器
    [root@es3 overlay2]# docker rm -f $(docker ps -aq)
    

    镜像存储核心技术:联合文件系统(UnionFS)

    1638314309288.png
    1638314348154.png
    镜像怎么高效存储?
    难道像虚拟机那样一个容器对应一个独立的镜像文件?这样对于密集型容器,磁盘占用率太大!
    答:引入联合文件系统,将镜像多层文件联合挂载到容器文件系统
    

    写时复制(COW)

    1638314683897.png
    了解联合文件系统后,我们知道,镜像是只读的,类似共享形式让多个容器使用,如果要在容器里修改文件,即镜像里的文件,那该怎么办呢?
    答:引入写时复制(copy-on-write),需要修改文件操作时,会先从镜像里把要写的文件复制到自己的文件系统中进行修改。
    ------------------------------------------------------------
    [root@es3 ~]# docker ps
    CONTAINER ID   IMAGE    
    7c072f3408a7   nginx    
    [root@es3 ~]# docker inspect 7c072f3408a7
    LowerDir:镜像层
    UpperDir:容器层
    MergedDir:合并层,展示给最终用户
    ------------------------------------------------------------
    001 所有容器的镜像层的init是不变的,共同引用基础镜像
    002 所有容器的容器层是不一样的
    

    优化建议

    001 使用SSD固态硬盘
    002 使用卷作为频繁读写文件的工作目录,绕过存储驱动,减少抽象的开销
    

    相关文章

      网友评论

          本文标题:Docker镜像管理

          本文链接:https://www.haomeiwen.com/subject/cbajxrtx.html