什么是docker镜像和容器,容器和仓库

Docker 镜像,容器,仓库,注册服务器 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了13767字,被9人关注,获得了8个喜欢
Docker 镜像,容器,仓库,注册服务器
书看完好久了,没时间整理,快忘了,先上图;
镜像(image)类似于虚拟机镜像,是创建容器的基础;镜像是只读的;容器(container)类似于一个轻量的沙箱,docker利用容器来运行和隔离应用;容器是从镜像创建的应用运行的实例;容器从镜像启动的时候,docker会在镜像的最上层创建一个可写层,镜像本身保持不变;仓库(repository)很多人会把仓库与registry混为一谈,其实registry是存放repository的地方,仓库分为公有仓库与私有仓库;[备注]:默认注册服务器为docker hub:register.获取镜像:sudo docker pull register./ubuntu:latestsudo docker pull ubuntu从register.注册服务器上的ubuntu仓库里的标记为latest的镜像;搜索镜像:sudo docker search register./ubuntu创建镜像,修改并提交到一个新的镜像,上传至仓库:实例:
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:docker容器技术系列一:基本概念_马哥Linux运维_传送门
docker容器技术系列一:基本概念
马哥Linux运维
前言:从去年下半年开始,我们就尝试在使用docker部署生产应用,至现在已经有十多个项目使用了docker容器部署,docker为我们节约 了大量的服务器资源,并提高了运维的交付能力。我和我的小伙伴们在学习和使用docker的过程中遇到了很多的坑,现在我将我所理解的docker相关技 术写成两个系列文章《docker容器技术系列》和《docker管理进阶系列》供大家参考。一、什么是docker?Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google
公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker基础是Linux 容器(LXC)基础,并对其进行了更高层面的封装,使得用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。Docker容器与传统虚拟机不同,容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。参考如下对比图:二、为什么要用docker?2.1 比虚拟机高效:如前描述,因容器复用了本地主机操作系统,仅仅是封装了容器运行所需的软件环境(从这个角度看可以参考RPM安装包),因此与主机上直接运行软件所需的资源几乎是一样的。不像虚拟机那样需要额外的内存、CPU等来支持虚拟机操作系统的运行。2.2 快速交付和部署:对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。而且可以保证每一个地方运行的环境都是一模一样的,不会因为开发环境与生产环境不同而导致某些问题。docker容器的启动更是秒级的,因此可以随时快速生产、关闭。2.3 轻松迁移和扩展:docker镜像可以在任意环境中迁移,而不会出现兼容性问题,迁移过程轻松方便。2.4 管理简单:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。2.5 docker对比传统虚拟机三、docker镜像、容器、仓库的基本概念3.1 镜像:Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 CentOS 操作系统环境,里面仅安装了 httpd或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。3.2 容器:Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。3.3 仓库:仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
其作为默认docker仓库,但在国内下载速度很慢。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。*注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。关于马哥linux运维? 马哥linux运维微信公众号致力于linux运维相关知识的推送,秉承授人以鱼不如授人以渔的理念,为广大linux爱好者推送互联网前沿技术和提供咨询!? 咨询电话:010-? 官方站点:
觉得不错,分享给更多人看到
马哥Linux运维 微信二维码
分享这篇文章
马哥Linux运维 最新文章
马哥Linux运维 热门文章灰熊温驯安全,活泼爱玩,参与婚礼非常积极。
趁家中无人将钱取出,然而已经全部发霉腐烂。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  容器应用的使用越来越广泛,容器技术突出的优点就是开发运维一体化。通过把应用及其所依赖的软件包、操作系统文件等封装在容器镜像中,使得应用在开发、测试和发布过程中都具有相同的运行环境,带来极大的便利。从图1这张经典的Docker容器状态转换图可以看到,容器镜像(images)的关联箭头最多,不言而喻,镜像就是容器技术的核心所在。
图1 Docker容器状态转换图
  概括地说,容器技术包含一静一动两部分:封装应用的静态镜像(images)和运行应用的动态容器(containers)。相应地,容器的开发运维主要涉及镜像管理和运行时(Runtime)管理两部分。本文主要和大家谈谈容器镜像管理的部分。
  容器镜像的管理主要围绕镜像仓库(registry)来进行。在应用的生命周期中,无论开发人员或CI系统发布镜像,还是测试人员或运维人员下载镜像,都要通过镜像仓库来完成。镜像仓库可以使用公有的SaaS服务,例如Docker Hub。公有服务的优点是可直接使用,无需自己维护。但考虑到访问效率和镜像安全等方面的原因,大多数公司都建立了自己的私有镜像仓库(Registry),因此也需要有贯穿整个应用生命周期的镜像管理策略。
  下文主要介绍在开发运维中的管理容器镜像原理和方法,为了便于说明原理,较多地使用Harbor作为例子。Harbor是由VMware中国研发团队负责开发的开源企业级Registry,可帮助用户迅速搭建企业级的registry 服务,提供权限控制、镜像同步、中文管理界面等强大功能,深受广大用户喜爱。有兴趣的朋友可以关注或使用: /vmware/harbor 。
  确保镜像内容的一致性
  在应用的开发、测试和运行等各个阶段,需要确保都使用同一个应用的镜像。一种做法是在每个阶段都用相同dockerfile去生成所需镜像。通常认为,相同的dockerfile可以构件出相同的镜像,而实际上却并非如此。例如下面的dockerfile 部分:
  FROM ubuntu
  RUN apt-get install Cy python
  ADD app.jar /myapp/app.jar
  首先,FROM的基础镜像隐含使用了latest版本,在不同时间构建的镜像,可能是不同的版本。即使指明了ubuntu:14.04这样的版本号也不保险,因为相同版本的系统可能含有补丁等不尽相同的软件包。
  再看apt-get这样的命令(类似的还有curl,wget等),往往会从互联网上引入第三方的软件包,版本的一致性就更加无从确定了。还有在ADD语句中添加到镜像里面的文件app.jar,取决于构建时的文件版本,也是一个不确定的因素。
  从上面的例子可以看到,尽管docker镜像的目的是构造不可更改的应用环境,但由于其构建的时候往往具有不确定的输入,相同dockerfile生成的镜像未必包含相同的内容。因此,最好的方法还是在不同的环境中始终采用相同的镜像(二进制格式),虽然在传输量上比dockerfile要大,但是可以确保镜像的一致性。
  镜像的传输
  很多用户在开发、测试和运维中都使用同一个Registry作为镜像仓库,这种方式比较适合小团队或简单的项目。在其他情况下,最好使用多个Registry以区分不同的用途和安全控制要求。容器镜像管理的参考流程(如图2所示)。
图2 应用镜像的管理流程
开发环境的Registry: 主要由开发人员使用,镜像变化频繁。当开发完成后,通过CI系统生成稳定镜像,并同步到测试R
测试环境的Registry: 主要由测试人员使用,镜像保持不变。当测试通过后,镜像推送到准生产环境的R
准生产环境(Staging)的Registry: 主要由测试和运维人员使用,镜像保持不变。当准生产环境试运行后平稳后,再发布到生产环境的R
生产环境的Registry: 发布镜像到生产环境的节点运行。
  从开发到生产的整个过程中,符合要求的容器镜像会逐步进入下一级的Registry,最后到达生产系统,从而实现容器镜像的构建-传输-运行(Build-Ship-Run)过程。
  Harbor提供Registry之间的镜像自动同步和复制功能,通过配置复制策略,自动化管理镜像传输流程。Harbor的复制策略启动之后,会比较目标Registry和本地源Registry在镜像上的差异,并把目标Registry缺少的镜像从本地推送过去,使得两个Registry实例的镜像完全一致。后续推送到源实例上的镜像,会以增量的形式同步到目标实例上。当在源实例上删除镜像的时候,目标实例上的镜像也会被删除。通过Harbor的复制机制,可实现两个或多个registry实例之间的镜像同步。
  镜像的权限控制
  在企业中,通常有不同的开发团队来负责不同的应用项目,和源代码分项目管理一样,镜像也需要按照项目来存放和管理。由于项目团队中有不同的成员,如项目经理、产品经理、开发、测试和运维等人员,每种人员使用镜像的需求不同,因此可以根据角色分配相应的权限。
  例如,测试人员通常只需要镜像的读权限(pull),开发人员需要读写权限(push/pull),项目经理除了拥有开发人员的权限之外,还可以增加和删除项目成员,设定他们的角色。
  在Harbor Registry中,每个项目中可有三种角色:项目管理员(project admin)、开发者(developer)和客人(guest)。某些项目,如放在library中的公共镜像, 可以允许匿名访问,即用户不用docker login也可以访问,这样方便某些场景的使用。在整个系统中,还设有系统管理员,具有维护镜像同步策略、用户增删等权限。
  需要指出的是,在不同的环境中,某个成员的角色可以不同。例如,在开发环境的registry中,运维人员一般不需要权限(或只需要读权限);而在生产环境中的Registry,运维人员就需要有读写权限。
  大规模镜像发布方式
  在实际生产运维的中,往往需要把镜像发布到几十、上百台或更多的集群节点上。这时,单个Registry已经无法满足大量节点的下载需求,因此要配置多个registry实例做负载均衡。手工维护多个registry实例上的镜像,将是十分繁琐的事情。Harbor支持一主多从的镜像发布模式,可以解决大规模镜像发布的难题。
图3 主从模式的镜像分发
  如图3所示,只要往一台registry上发布,镜像就像“仙女散花”般地同步到多个registry中。
  如果是地域分布较广的多数据中心或跨云的集群,还可以采用层次型发布方式,如从集团总部同步到省公司,从省公司再同步到市公司(如图4所示):
图4 多级主从模式的镜像分发
  在同步过程中,如果源镜像已删除,Harbor会自动同步删除远端的镜像。在镜像同步复制的过程中,Harbor会监控整个复制过程,遇到网络等错误,会自动重试。
  同步复制的监控画面如图5所示:
图5 镜像复制策略的监控
  镜像删除和空间回收
  Docker命令没有提供Registry镜像删除功能,系统日积月累地运行中,将会产生许多无用的镜像,占用大量存储空间。若要删除镜像并回收空间,需要调用docker registry API来完成,非常麻烦。Harbor提供了可视化的镜像删除界面,可以逻辑删除镜像。在维护状态下可以回收垃圾镜像的空间。
  Registry高可用性
  Registry高可用性(HA)是多数生产系统需要关心的问题,基本要求就是没有单点故障。通常需要根据允许服务中断的时间,以及可以承受的成本和损失,来确定采用的技术。下面介绍3种不同的高可用参考方案。
图6用共享存储实现多Registry实例
  一种比较标准的方案,就是多个的Registry实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置LB进来的请求,可以分流到不同的实例中去处理,实现了负载均衡,也避免了单点故障(如图6所示)。
  应该指出,实际中需要考虑的问题远比上述模型复杂。例如,共享存储的选取,用户session在不同的实例上共享等等。用户可根据自己业务要求设计出不同的方案。Harbor将会推出基于swift分布式存储,以及共享session的方案(采用redis)来满足用户的需求。
  如果没有共享存储,可采用第2种方案,就是在两个节点间采用双主复制策略,互相复制镜像。即使有一个实例失效,另一个实例仍然可以提供服务,从而在一定程度上可以满足HA的需求。在这种场景下,两个实例的用户数据并没有同步,因此需要分别配置相同的用户账号(如图7所示)。
图7 双主复制实现准HA
  第3中方案是利用已有的高可用平台,例如vSphere HA,配合分布式存储VSAN,可以实现Registry的高可用性, 具体架构如图8所示:
图8 基于VSAN和vSphere搭建高可用Registry架构
  节点出现故障的时候,有vSphere自动切换到好的节点上,镜像数据不丢失(如图9所示)。
图9 用VSAN和vSphere实现Registry自动迁移
  本文以开源Harbor Registry为例子,总结了企业中Registry的常见使用场景和要点,希望对大家有所启发。同时也欢迎大家使用Harbor和反馈意见, Harbor的github地址:/vmware/harbor 。
  作者介绍:张海宁,VMware中国研发中心云原生应用首席架构师,Harbor企业级容器Registry开源项目负责人,Cloud Foundry中国社区最早的技术布道师之一。目前着重关注云原生应用的研发工作,内容包括Container、PaaS、IaaS等方面。
  日-20日,由CSDN重磅打造的年终技术盛会SDCC 2016中国软件开发者大会将在北京举行,大会秉承干货实料(案例)的内容原则,本次大会共设置了12大专题、近百位的演讲嘉宾,并邀请业内顶尖的CTO、架构师和技术专家,与参会嘉宾共同探讨电商架构、高可用架构、编程语言、架构师进阶、微信开发、前端、平台架构演进、基于Spark的大数据系统设计、自动化运维与容器实践、高吞吐数据库系统设计要领、移动视频直播技术等。目前仍是五折抢票,最低1400元,注册参会:http://sdcc.csdn.net/m/zone/sdcc_2016/index#canhui。
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:Docker自建内部仓库_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Docker自建内部仓库
上传于||文档简介
&&d&#8203;o&#8203;c&#8203;k&#8203;e&#8203;r&#8203;创&#8203;建&#8203;自&#8203;有&#8203;镜&#8203;像&#8203;仓&#8203;库&#8203;系&#8203;统
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Docker镜像
Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。
例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。
镜像是创建Docker容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像。用户可以从网上下载一个已经做好的应用镜像,并通过命令直接使用。总之,应用运行是需要环境的,而镜像就是来提供这种环境。
Docker容器
Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
可以吧每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。
镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。就像用ISO装系统之后,ISO并没有什么变化一样。
Docker仓库
Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。
有时候会看到有资料将Docker仓库和注册服务器(Registry)混为一谈,并不严格区分。实际上,注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04,12.04等不同版本的镜像。
根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。
当用户创建了自己的镜像之后就可以使用push将它上传到指定的公有或则私有仓库。这样用户下次在另一台机器上使用该镜像时,只需将其从仓库pull下来就可以了。
阅读(...) 评论()}

我要回帖

更多关于 docker 阿里镜像仓库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信