设为首页 收藏本站
查看: 1198|回复: 0

[经验分享] 3.Docker镜像管理

[复制链接]

尚未签到

发表于 2019-2-20 12:19:12 | 显示全部楼层 |阅读模式
本章所讲内容


  • About Docker Images
  • Docker Registry
  • 镜像制作
  • Docker Hub镜像管理
  • aliyun平台镜像管理
  • 上传镜像到私有“Registry”
  About Docker Images

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


注意:联合挂载机制解释

    联合挂载:如果docker需要产生临时文件或者要写入文件时,基于底层的镜像是不给予写入操作的,唯一能写入的就是Docker容器层面的东西,就是上面说的到
“可写层”,个人理解就像是把底层镜像复制了一份,然后往里面进行写入或者更改操作。

    联合挂载机制需要依赖于专门的文件系统,而在早期使用的Aufs文件系统,aufs前身是UnionFS,UnionFS代码写的很烂,被Aufs重写之后代码依然很烂,aufs
文件系统在2006年由Junjiro Okajima开发;是一位日本的工程师,他一直想把这套文件系统纳入到linux内核中,但由于代码写的较烂,原本4000-5000行代码可以
完成的文件,他写了三万行,连续四次向linux开源组织申请加入linux内核都被拒绝后,他放弃了!

    aufs的竞争产品是overlayfs(叠加文件系统),该文件系统从内核3.18版本开始就被合并到了Linux内核,现在CentOS7默认使用的内核都为3.10,所以都还
是不支持的,如果想用,可以打个内核补丁到3.18版本。

    Docker的分层镜像,除了aufs,docker还支持brtfs,devicemapper和vfs等。

    如果我们是新装的docker版本,我们会发现它也已经使用了overlayfs文件系统了,但使用的是overlay的新版本叫overlay2,使用docker info命令可以看到
docker使用的overlay文件系统,但overlay2是一个抽象的二进制文件系统,需要建立在本地文件系统之上,所以下面出现的Backing Filesystem xfs就是本地文
件系统。
DSC0000.png

  Docker Registry

    我们在docker上其实也是可以直接启动容器的,容器的标签名称要指定对,启动容器时,docker daemon首先会试图从本地获取到相关镜像,也就是先看看本地是否已
经把该镜像下载过了,如果没有下载,则就会自动从Registry中下载该镜像并保存到本地,Registry默认就是Docker Hub,如果我们搭建了docker私有Registry,并且
该私有Registry中有我们需要下载的镜像,则通过修改pull路径就可以从我们自己的私有Registry中下载。
  Docker Registry分类

  Sponsor Registry:第三方的registry,供客户和docker社区使用
  Mirror Registry:第三方的registry,只让客户使用。他们通常是由Docker Hub第三方提供
  Vendor Registry:由发布Docker镜像的供应商提供的registry;比如某家公司所提供Registry,但并不开放给所有人使用,只开放给他们的客户使用,例如花钱买了他们的产品、服务等的客户使用
  Private Registry:通过设有防火墙和额外的安全层的私有实体提供的Registry,就是我们自己搭建的私有Registry

  Registry(repository and index)

  一个Registry一般由两部分组成分别为repository和index


Repository:
1.由某特定的docker镜像,如Nginx的docker镜像,这个nginx镜像所有的迭代版本合起来组成的镜像仓库
2.一个registry中可以存在多个repository
3.repositry可分为“顶层仓库”和“用户仓库”
4.用户仓库名称格式为“用户名/仓库名”
5.每个仓库可以包含多个tag(标签),多个tag来表示多个Nginx镜像,一个Nginx版本代表一个镜像,每个标签只能对应一个镜像
Index:
1.维护用户账户、镜像的校验以及公共命名空间的信息
2.相当于为registry提供了一个完成用户认证等功能的检索接口

    Docker Registry中的镜像通常由开发人员制作,而后推送到“公共”或者私有“Registry”上保存,供其他人员使用流程为:开发人员使用docker pull从Docker
Hub上下载最原始的镜像,然后经过二次封装,例如下载了个Nginx镜像,开发人员经过了二次开发,增加了功能,然后再把经过二次开发的Nginx放到公司内部私有的
“Registry”上,一般仅供公司内部人员使用,例如“部署”到生产环境。
  镜像制作

  镜像的生成途径通常有以下三种:
>Dockerfile
  >基于容器制作
  >Docker Hub automated builds

  小结:Dockerfile是我们以后最常用的Docker镜像制作方法,但本次我们使用“基于容器制作的方法制作镜像”;基于容器制作,例如一个容器正在运行中,使用commit命令会把容器最上面的那个可写层单独创建一个镜像,相当于克隆了容器最上面可写入的那一层。

  容器制作实例


[root@docker-node1 /]# docker pull nginx:latest                 #下载最新版的Nginx镜像,latest为镜像标签
[root@docker-node1 /]# docker run -itd --name mynginx nginx:latest      #后台运行,容器名称为“mynginx”
[root@docker-node1 /]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx                           #查看容器“mynginx”的IP地址
172.17.0.2
[root@docker-node1 /]# curl http://172.17.0.2 -I                #对Nginx进行访问测试,默认应该为"wlecom to nginx!"
HTTP/1.1 200 OK
Server: nginx/1.15.5
Date: Wed, 17 Oct 2018 07:35:17 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 02 Oct 2018 14:49:27 GMT
Connection: keep-alive
ETag: "5bb38577-264"
Accept-Ranges: bytes
[root@docker-node1 /]# docker exec -it mynginx /bin/bash        #进入容器“mynginx”修改网页文件
root@32131d2cbaac:/# echo 'hello kgbk!' > /usr/share/nginx/html/index.html
root@32131d2cbaac:/# cat /usr/share/nginx/html/index.html
hello kgbk!
root@32131d2cbaac:/# exit
[root@docker-node1 /]# curl http://172.17.0.2                   #修改过后再进行访问测试
hello kgbk!                                            #注:这里网页文件已做修改,开始制作镜像

语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
语法说明:
CONTAINER:指定镜像名称
REPOSTTORY:该镜像是制作完成后属于哪个仓库 ,该项为可选,不加会生成在本地,也没有任何标签
TAG:该镜像的标签是什么
OPTIONS说明:
--author, -a        #指定克隆该容器后的作者和邮箱等
--change, -c        #修改原有镜像的指令
--message, -m       #制作信息
--pause, -p         #制作之间暂停容器
[root@docker-node1 /]# docker commit -p mynginx nginx:v0.1
sha256:2fe112b2504e76a166609fefc8fa54c8adce9bbcfd4d98108af43b672c2ff07e
[root@docker-node1 /]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v0.1                2fe112b2504e        8 seconds ago       109MB
nginx               latest              dbfc48660aeb        26 hours ago        109MB
  对以创建的镜像进行验证


[root@docker-node1 /]# docker run -itd --name mynginx_node2 nginx:v0.1
dcd9f77fe0c412415c871780f056f9b9115e9b444f220681be81510cfcb054a3
[root@docker-node1 /]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx_
node2
172.17.0.3
[root@docker-node1 /]# curl http://172.17.0.3               
hello kgbk!
  纯净镜像验证


[root@docker-node1 /]# docker run -itd --name mynginx_node3 nginx:latest
95f189cb5389dd1737ab4baa3b553c1ef499aa924a0f0dcbe467c0c9842335bc
[root@docker-node1 /]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mynginx_node3
172.17.0.4
[root@docker-node1 /]# curl http://172.17.0.4



Welcome to nginx!

body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}



Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.


  Docker Hub镜像管理

  Docker hub搜索镜像


Docker Hub搜索镜像地址:https://hub.docker.com/explore/
DSC0001.png


  点击进去可以看到Nginx的各个标签标志的版本号

DSC0002.png


  Docker hub镜像管理
  Docker Hub镜像管理地址:https://hub.docker.com/
Docker Hub需要注册账号然后登陆才能在上面创建Docker Registry
Create Repository可以创建镜像仓库

  - DSC0003.png
DSC0004.png
DSC0005.png
  aliyun平台镜像管理

  阿里云平台网址: https://dev.aliyun.com/search.html

DSC0006.png
DSC0007.png


  创建镜像仓库,填写仓库的详细信息

DSC0008.png
DSC0009.png
DSC00010.png
DSC00011.png
DSC00012.png
DSC00013.png

  上传镜像到私有“Registry”

  上传到aliyun容器平台


[root@docker-node1 /]# docker image ls                     
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v0.1                2fe112b2504e        3 hours ago         109MB
nginx               latest              dbfc48660aeb        28 hours ago        109MB
[root@docker-node1 /]# docker login --username=xxxxxxxxxxxx@163.com registry.cn-shanghai.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded                                             #登陆成功
注意:阿里云平台上传镜像必须要求把镜像名称写为他们规定的名字,所以使用了docker tag改了标签
[root@docker-node1 /]# docker tag nginx:v0.1 registry.cn-shanghai.aliyuncs.com/kgbk/nginx:aliyun
[root@docker-node1 /]# docker image ls
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
registry.cn-shanghai.aliyuncs.com/kgbk/nginx   aliyun              2fe112b2504e        3 hours ago         109MB
nginx                                          v0.1                2fe112b2504e        3 hours ago         109MB
nginx                                          latest              dbfc48660aeb        28 hours ago        109MB
[root@docker-node1 /]# docker push registry.cn-shanghai.aliyuncs.com/kgbk/nginx:aliyun  #上传镜像
The push refers to repository [registry.cn-shanghai.aliyuncs.com/kgbk/nginx]
331a147bb76b: Pushed
86df2a1b653b: Pushed
bc5b41ec0cfa: Pushed
237472299760: Pushed
aliyun: digest: sha256:607e4f6d654b959e3202b002a6eeeeb44b430002b39e38f88ffd809963f0c2bc size: 1155
DSC00014.png





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674888-1-1.html 上篇帖子: 基于docker1.13.1搭建rabbitmq消息队列 下篇帖子: Docker系列:第一讲.Docker简介与安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表