• Docker系列06—基于容器制作镜像并上传到Docker Registry


    本文收录在容器技术学习系列文章总目录

    1、制作镜像

    1.1 镜像的生成途径

    • 基于容器制作 
    • dockerfiledocker build

      本篇主要详细讲解基于容器制作镜像;基于dockerfile 制作镜像在后一张文Docker系列07—Dockerfile 详解详细介绍;

    1.2 基于容器制作

     docker commit

    1)格式

    Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

    2Options 参数

    •  -a,作者(例如,“along <along@along.com>”
    •  -c,修改Dockerfile指令应用于创建的镜像
    •  -m,提交消息
    •  -p,在提交期间暂停容器(默认为true

    3)示例1:简单的基于容器创建一个新的镜像

    先运行一个容器

    [root@along ~]# docker run --name b1 -it busybox
    / # ls /
    bin   dev   etc   home  proc  root  sys   tmp   usr   var
    / # mkdir -p /date/html
    / # echo "<h1>busybox httpd server</h1>" > /date/html/index.html
    / # cat /date/html/index.html 
    <h1>busybox httpd server</h1>
    

      

    不用退出这个容器,另起终端在b1容器基础上,制作新镜像

    [root@along ~]# docker commit -p b1
    sha256:3a6523b08bea7eb339ae04cc8a98caabfd46fbd27ccf31409cc3e8a764effdc1
    [root@along ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    <none>                   <none>              bf29b97ba38d        7 seconds ago       1.15 MB
    

      

    给新制作的镜像打标签

    [root@along ~]# docker tag bf29b97ba38d along/httpd:v0.1
    [root@along ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    along/httpd              v0.1                bf29b97ba38d        39 seconds ago      1.15 MB
    

      

    可以对同一个镜像,再打标签

    [root@along ~]# docker tag along/httpd:v0.1 along/httpd:latest
    [root@along ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
    along/httpd              latest              bf29b97ba38d        About a minute ago   1.15 MB
    along/httpd              v0.1                bf29b97ba38d        About a minute ago   1.15 MB
    

      

    删除同一镜像的标签,只是把这个镜像的标签去掉,只到删除这个镜像的最后一个标签,此镜像才会被删除

    [root@along ~]# docker image rmi along/httpd:latest 
    Untagged: along/httpd:latest
    [root@along ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED              SIZE
    along/httpd              v0.1                bf29b97ba38d        About a minute ago   1.15 MB
    

      

    基于新的镜像运行一个容器,验证是否是基于b1创建成功的

    [root@along ~]# docker run --name b2 -it along/httpd:v0.1
    / # cat /date/html/index.html 
    <h1>busybox httpd server</h1>
    / # exit
    

      

    4)示例2:基于容器创建新的镜像,并修改执行命令CMD

    基于容器b1创建新的镜像,并修改命令为执行httpd服务

    [root@along ~]# docker commit -a "Along <along@along.com>" -c 'CMD ["/bin/httpd","-f","-h","/date/html"]' -p b1 along/httpd:v0.2
    sha256:2291d0e5800e53e120fad58043e97cbf8197f7db2aa1111508603fa3c16982f2

    注解:busybox httpd 语法

    •  -f:不运行为守护进程,在前台运行
    •  -h:指定httpd运行的主目录

    运行新的镜像v0.2

    [root@along ~]# docker run --name b3 -d along/httpd:v0.2
    43e8731be7abd34a9b332c84bc622a1ef8707dc94465d3639db194c0b504cc42
    

      

    验证成功

    [root@along ~]# docker inspect b3 |grep "IPAddress"
                "SecondaryIPAddresses": null,
                "IPAddress": "172.17.0.3",
                        "IPAddress": "172.17.0.3"
    [root@along ~]# curl 172.17.0.3
    <h1>busybox httpd server</h1>
    

      

    2、了解Docker Registry

    2.1 介绍

    •  registry 用于保存docker 镜像,包括镜像的层次结构和元数据。
    •  启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;
    •  拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像

    2.2 分类

    • Sponsor Registry第三方的registry,供客户和docker社区使用;
    • mirror Registry第三方的registry,只让客户使用;如docker cn和阿里云的镜像加速器;
    • vendor Registry服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;
    • private Registry通过设有防火墙和额外的安全层的私有实体提供的registry;自建的registry,在本地搭建registry,节省带宽

    2.3 registry组成(repositoryindex

    (1)Repository

    • 由特定的docker镜像的所有迭代版本组成的镜像仓库;
    • 一个registry中可以存在多个repository
      • repository可分为顶层仓库用户仓库
      • 用户仓库名称格式为用户名/仓库名
    • 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像

    (2)Index

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

    2.4 拉取仓库镜像的格式

    docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
    •  registry:仓库服务器地址:不指定默认是docker hub
    •  port:端口;默认是443,因为是https协议
    •  namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省
    •  name:仓库名
    •  tag:标签名;默认是latest版本

    2.5 知名docker仓库

      例:docker pull quay.io/coreos/flannel:v0.10.0-amd64

    3、将制作的镜像上传到自己的私有registry仓库中

    3.1 创建自己的docker registry

    1)可以在docker hub上创建;但注册docker hub需要科学上网;

    2)也可以在阿里云上https://cr.console.aliyun.com/cn-hangzhou/repositories创建自己的docker仓库

    ① 创建镜像仓库

    ② 选择创建本地仓库

    ③ 点击管理,会有操作指南,大家跟着操作即可,这里我就不再演示了

    本文用的是docker hub

    3.2 登录docker仓库

    [root@along ~]# docker login -u alongedu
    Password: 
    Login Succeeded
    

      

    3.3 将镜像打标签,对应自己的registry

    [root@along ~]# docker tag busybox:latest alongedu/httpd:v0.1
    

      

    3.4 push上传自己的镜像

    [root@along ~]# docker push alongedu/httpd:v0.1
    The push refers to a repository [docker.io/alongedu/httpd]
    23bc2b70b201: Pushed 
    v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527
    

      

    3.5 在自己的私有仓库验证

  • 相关阅读:
    20135213——信息安全系统设计基础第十周学习总结
    20135213 20135231 信息安全系统设计基础课程第一次实验报告
    20135213——信息安全系统设计基础第九周学习总结
    家庭作业 汇总(更新调整)
    20135213——信息安全系统设计基础第八周期中总结
    家庭作业第三章3.57
    20135213——信息安全系统设计基础第七周学习总结
    20135213——信息安全系统设计基础第六周学习总结
    笔记
    20135213-信息安全系统设计基础第四周学习总结
  • 原文地址:https://www.cnblogs.com/along21/p/10253725.html
Copyright © 2020-2023  润新知