• 如来神掌第四式第二招----docker镜像管理


    ###############################################################################
    # Name : Mahavairocana                                                                                                                                           
    # Author : Mahavairocana                                                                                                                                         
    # QQ : 10353512                                                                                                                                                    
    # WeChat : shenlan-qianlan                                                                                                                                      
    # Blog : http://www.cnblogs.com/Mahavairocana/                                                                                                       
    # Description : You are welcome to reprint, or hyperlinks to indicate the                                                                        
    #                    source of the article, as well as author information.                                                                                
    ###############################################################################

    dockerimage构建方式:
        docker镜像含有启动容器所需要的文件系统及其内容,用于创建并启动容器,
            采用封层构建机制,最底层问bootfs,其之位rootfs
                bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后悔被卸载以节约内存资源
                rootfs:位于bootfs之上,表现为docker容器的根文件系统;
                    传统模式中,系统启动之时,内核挂在rootfs时,会首先将其挂载位只读模式,完整性自检完成后将其重新挂载为读写模式;
                    docker中,rootfs由内核挂在为只读模式,而后通过联合挂载技术,额外挂在一个可写层;
    docker image layer
        位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)
        最上层称为可读写层,中间的均为只读层。

    镜像分层挂载均依赖文件系统

    文件类型:
    aufs:multi-layered unification filesystem:高级多层统一文件系统
    用于为linux文件系统实现联合挂载
    aufs之前unionfs重新实现,2006年由junjiro okajima开发;非内核自带,需要使用,需要自行编译、打补丁。centos无法使用,unbutu很早将aufs打包到内核使用,早期使用docker 只能使用docker。
    aufs竞争产品overlayfs,从3.18版本被合并到linux内核。
    docker分层镜像,除了aufs,docker还支持btrfs,devicemapper和vfs等。
        在ubuntu下,docker默认为aufs
        在centos下,docker默认为devicemapper
        devicemapper性能比较差,而且性能不稳定。
            devicemapper:在内核中,他通过一个一个模块化的targetdriver 插件实现对IO请求的过滤或者重新定向等工作,当前已经实现的targetdriver插件包括软raid,软加密,逻辑卷条带,多路径,镜像,快照等
                下图linear、mirror 、snapshot、multipath表示为targetdirvcer
                在众多插件中,thin provisioning snapshot,docker 使用了这个技术实现了类似aufs的分层镜像。
              

    确认当前docker使用文件系统类型:

    [root@docker--0001 ~]# docker info
    Containers: 1
     Running: 1
     Paused: 0
     Stopped: 0
    Images: 2
    Server Version: 18.09.2
    Storage Driver: overlay2
    Backing Filesystem: extfs
     Supports d_type: true
     Native Overlay Diff: false
    Logging Driver: json-file
    Cgroup Driver: cgroupfs

    overlay2 需要借助其他文件系统使用,如此处的extfs

    Docker registry:

    用途:用于保存docker镜像,包括镜像的层次结构和元数据

    来源:用户可以自建regisry,也可以使用官方的dockerhub

      用途

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

     harbor:vmware提供。

    分类:

    sponsor registry:第三方registry,供客户和docker社区使用;{docker hub}
    mirror registry:第三方的registry,只让客户使用{如红帽等,只提供给买了红帽服务的客户}vendor registry:由发布docker镜像的提供商提供的registryprivate registry:通过设有防火墙和额外的安全层的私有实体提供的registry。{私有镜像仓库}

    R egistry(repository and index)
    ●Repository
    ●由某特定的docker镜像的所有迭代版本组成的镜像仓库

    ●一个Registry中可以存在多个R epository
      ●Repository可分为“顶层仓库”和“用户仓库”

      ●用户仓库名称格式为“用户名/仓库名”
    每个仓库可以包含多个Tag(标签),每个标签对应一个镜像

    ●Index
      维护用户账户、镜像的校验以及公共命名空间的信息
      相当于为Registry提供了一个完成用户认证等功能的检索接口

    Docker registry中的镜像通常有开发人员制作,而后推送到公共或私有registry上保存,供其他人员使用,例如部署到生产环境。

    镜像制作:

    基础镜像制作(基于运行中的容器进行镜像制作)
    1、运行busybox,并创建文件:
    
    [root@docker--0001 ~]# docker run --name test -it busybox
    / # ls
    bin   dev   etc   home  proc  root  sys   tmp   usr   var
    / # ls
    bin   dev   etc   home  proc  root  sys   tmp   usr   var
    / # touch liuqi
    / # ls
    
    [root@docker--0001 ~]# docker commit -h
    Flag shorthand -h has been deprecated, please use --help
    
    Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    Create a new image from a container's changes
    
    Options:
      -a, --author string    Author (e.g., "John Hannibal Smith  #添加一个作者名称。
                             <hannibal@a-team.com>")
      -c, --change list      Apply Dockerfile instruction to the created image 修改原有基础镜像运行的命令,如修改cmd指令等。
      -m, --message string   Commit message
      -p, --pause            Pause container during commit (default true)
    + -p:保证持续写入的文件也可以注入镜像内。
    
    [root@docker--0001 ~]# docker commit -p test
    sha256:666f55b9078eb538c57b37f03ad51f47b38f2351eb62b6e93618b2cf5960a68e
    [root@docker--0001 ~]# docker image list
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              666f55b9078e        5 seconds ago       1.2MB
    busybox             latest              d8233ab899d4        2 weeks ago         1.2MB
    nginx               1.14-alpine         66952fd0a8ef        4 weeks ago         16MB
    打标签
    [root@docker--0001 ~]# docker tag 666f55b9078e tyy/bbox_name:v0.1-1
    [root@docker--0001 ~]# docker image ls  
    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    tyy/bbox_name       v0.1-1              666f55b9078e        About a minute ago   1.2MB
    busybox             latest              d8233ab899d4        2 weeks ago          1.2MB
    nginx               1.14-alpine         66952fd0a8ef        4 weeks ago          16MB
    打多个标签
    [root@docker--0001 ~]# docker tag tyy/bbox_name:v0.1-1 tyy/names:latest
    You have new mail in /var/spool/mail/root
    [root@docker--0001 ~]# docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    tyy/bbox_name       v0.1-1              666f55b9078e        2 minutes ago       1.2MB
    tyy/names           latest              666f55b9078e        2 minutes ago       1.2MB
    busybox             latest              d8233ab899d4        2 weeks ago         1.2MB
    nginx               1.14-alpine         66952fd0a8ef        4 weeks ago         16MB
    删除标签:其实是删除镜像,,但可以看到,提示为untaged,所以,删除的其实是连接,而非镜像。
    [root@docker--0001 ~]# docker image rm tyy/names 
    Untagged: tyy/names:latest
    
    运行容器:
    [root@docker--0001 ~]# docker run --name test -it tyy/bbox_name 
    Unable to find image 'tyy/bbox_name:latest' locally ##未加版本号
    ^C
    [root@docker--0001 ~]# docker run --name test -it tyy/bbox_name:v0.1-1  #名字重复
    docker: Error response from daemon: Conflict. The container name "/test" is already in use by container "1631923fe00f3daa3e3abc09dacb8199e3e365bab5e02c41c53607d7766599f4". You have to remove (or rename) that container to be able to reuse that name.
    See 'docker run --help'.
    [root@docker--0001 ~]# docker run --name test1 -it tyy/bbox_name:v0.1-1
    / # ls
    bin    dev    etc    home   liuqi  proc   root   sys    tmp    usr    var
    
    修改容器默认运行cmd,以及添加作者信息。
     docker commit -a "Liuqi1@chinatelecom.cn" -c 'CMD ["/bin/bash","echo liuqi"]' -p test tyy/bbox_name:v0.1-1 
    
     上传镜像到dockerhub
     前提:已经注册镜像仓库账号:
    
    [root@docker--0001 ~]# docker push -h 
    Flag shorthand -h has been deprecated, please use --help
    
    Usage:  docker push [OPTIONS] NAME[:TAG]
    
    Push an image or a repository to a registry
    
    Options:
          --disable-content-trust   Skip image signing (default true)
    [root@docker--0001 ~]# 
    
    [root@docker--0001 ~]# docker login --help
    
    Usage:  docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
    
      docker login -u user 登陆。
      docker push tyy/bbox_name:v0.1-1 
      docker save
      docker load
  • 相关阅读:
    mysql5.5 uuid做主键与int做主键的性能实测
    dom4j解析xml字符串实例
    spring自动注入是单例还是多例?单例如何注入多例?
    Spring中Bean的五个作用域
    【总结】瞬时高并发(秒杀/活动)Redis方案
    浅谈分布式事务
    基于Redis实现分布式锁
    MySQL事务隔离级别详解
    Redis学习手册(Sorted-Sets数据类型)
    Redis的快照持久化-RDB与AOF
  • 原文地址:https://www.cnblogs.com/Mahavairocana/p/10423575.html
Copyright © 2020-2023  润新知