zoukankan      html  css  js  c++  java
  • Docker系列06—基于容器制作镜像并上传到Docker Registry

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

     

    1、制作镜像

    1.1 镜像的生成途径

    • 基于容器制作 
    • dockerfile,docker build

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

    1.2 基于容器制作

     docker commit

    (1)格式

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

    (2)Options 参数

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

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

    ① 先运行一个容器

    1
    2
    3
    4
    5
    6
    7
    [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容器基础上,制作新镜像

    1
    2
    3
    4
    5
    [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

      

    ③ 给新制作的镜像打标签

    1
    2
    3
    4
    [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

      

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

    1
    2
    3
    4
    5
    [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

      

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

    1
    2
    3
    4
    5
    [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创建成功的

    1
    2
    3
    4
    [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服务

    1
    2
    [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

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

      

    ③ 验证成功

    1
    2
    3
    4
    5
    6
    [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组成(repository和index)

    (1)Repository

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

    (2)Index

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

    2.4 拉取仓库镜像的格式

    1
    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仓库

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

      

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

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

      

    3.4 push上传自己的镜像

    1
    2
    3
    4
    [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 在自己的私有仓库验证

     
  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/dengbingbing/p/10399251.html
Copyright © 2011-2022 走看看