• Docker镜像管理基础(转载)


    Docker镜像管理基础

    Docker镜像启动方式

    Docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器
        采用分层构建机制,最底层为bootfs,其之为rootfs
            bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源;
            rootfs:位于bootfs之上,表现为docker容器的根文件系统; 
                传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式;
                docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂载一个“可写”层;
    

    Docker Image Layer

    位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)
    
    最上层为“可读写”层,其下的均为“只读”层
    

    Docker 文件系统

    早期文件系统:Aufs (实现文件联合挂载机制)

    - advanced multi-layered unification filesystem:高级多层统一文件系统
    - 用于为Linux文件系统实现“联合挂载” v aufs是之前的UnionFS的重新实现,2006年由Junjiro Okajima开发;
    - Docker最初使用aufs作为容器文件系统层,它目前仍作为存储后端之一来支持;
    - aufs的竞争产品是overlayfs,后者自从3.18版本开始被合并到Linux内核;
    - docker的分层镜像,除了aufs,docker还支持btrfs, devicemapper和vfs等
        在Ubuntu系统下,docker默认Ubuntu的 aufs;而在CentOS6上,用的是devicemapper;CentOS7上现在还有overlay2
    

    Docker Registry

    启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从Registry中下载该镜像并保存到本地
    

    Docker Registry 分类

    Registry用于保存docker镜像,包括镜像的层次结构和元数据
    用户可自建Registry,也可使用官方的Docker Hub
    分类
        Sponsor Registry:第三方的registry,供客户和Docker社区使用
        Mirror Registry:第三方的registry,只让客户使用 (第三方加速器)
        Vendor Registry:由发布Docker镜像的供应商提供的registry
        Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry
    

    Docker Registry组成

    Repository
        由某特定的docker镜像的所有迭代版本组成的镜像仓库
        一个 Registry中可以存在多个Repository
            Repository可分为“顶层仓库”和“用户仓库” 
            用户仓库名称格式为“用户名/仓库名” 
        每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
    
    Index
        维护用户帐户、镜像的校验以及公共命名空间的信息
        相当于为Registry提供了一个完成用户认证等功能的检索接口
    
    Docker Registry中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry上保存,供其他人员使用,例如“部署”到生产环境;
    

    Docker Hub

    Image Repositories:镜像仓库
    Automated Builds:自动构建
    Webhooks:web钩子,github+dockerhub自动构建镜像
    Organizations:工作组
    GitHub and Bitbucket Integration
    

    镜像的生成途径

    Dockerfile
    基于容器制作
    Docker Hub automated builds
    

    • 基于容器制作
    ## 启动busybox,创建/data/html/index.html
    
    # docker run --rm -it --name bbox1 busybox
    # mkdir /data/httpd -pv
    created directory: '/data/'
    created directory: '/data/httpd/'
    # echo "<h1>Test page</h1>" > /data/httpd/index.html
    
    ## 制作镜像
    
    # docker commit -p b1 evescn/busybox/httpd:v1
        -p:暂停容器,进行镜像制作
    
    # docker commit -a "evescn" -c 'CMD ["/bin/httpd","-f","-h","/data/html/index.html"]'' -c "EXPOSE 80" -p b1 evescn/busybox/httpd:v2
        -a 设置作者信息
        -c 修改原dockerfile中信息,比如修改启动命令
        -p 打镜像中暂停容器
    
    ## 推送镜像
    
    # docker push evescn/busybox/httpd
    

    docker tag

    给容器打标签

    基于 ID 打标
        # docker tag 9133dae37bd8 evescn/busybox/httpd:latest
    基于名称和标签打标
        # docker tag evescn/busybox/httpd:v0.1 evescn/busybox/httpd:v0.2
    为私有 Registry 打标
        # docker tag 9133dae37bd8 harbor.evescn.com/busybox/httpd:v0.1
    

    docker push

    推送镜像到仓库,如仓库为私有仓库,需要使用 docker login 先进行登陆,然后推送

    推送镜像到 Docker Hub 的前提是于 Docker Hub有用户账号,且镜像标签格式为 “ $DOCKER_USER_ID/IMAGE ”
    
    使用 docker login 命令登录成功后,即可使用 docker push命令进行推送
        # docker login --username=USERNAME --password=PASSWORD registry.cn-beijing.aliyuncs.com
    
    示例:
        # docker push evescn/busybox/httpd:v0.1
    

    docker sava 和 docker load

    docker save -o xxx.gz Image1:v1 Image1:v2
    doacker load -i XXX.gz
    
    docker save
        Save one or more images to a tar archive (streamed to STDOUT by default)
        Usage:docker save [OPTIONS] IMAGE [IMAGE...]
            --output, -o:Write to a file, instead of STDOUT
    
    docker load
        Load an image from a tar archive or STDIN
        Usage:docker load [OPTIONS]
            --input, -i:Read from tar archive file, instead of STDIN
            --quiet, -q:Suppress the load output
    
  • 相关阅读:
    NC nc5.x报表设置合计行是否显示
    NC 单据保存时间过长,判断数据库锁表解决办法
    NC JDK报tools.jar错误(61版本)
    Python 基本语法 学习之路(三)
    html history
    页面跳转
    Html5 学习系列(六)Html5本地存储和本地数据库
    微信支付
    jquery分析网址
    在一个js文件中引用另一个js文件
  • 原文地址:https://www.cnblogs.com/evescn/p/12793950.html
Copyright © 2020-2023  润新知