冥王生活

您现在的位置是:首页 > 科技生活 > 正文

科技生活

docker官网倒计时是什么活动(docker 定时任务)

admin2023-02-12科技生活100

Docker入门

docker概念

docker意为码头工人(Dock Worker),即从船上装卸货物的人。这与它的性质非常贴切。

docker 官网是这样解释自己的,

目前阿里,京东,腾讯早已将docker应用到生产环境。

docker 历史

Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。

底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的!

2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为“Docker”,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。

如今 Docker 公司被普遍认为是一家创新型科技公司,据说其市场价值约为 10 亿美元。Docker 公司已经通过多轮融资,吸纳了来自硅谷的几家风投公司的累计超过 2.4 亿美元的投资。

docker 特征

docker 核心概念

docker镜像是一系列文件,它起源于linux联合文件系统,通过分层实现镜像文件的存储。

容器本质上是一个进程,你可以把它想象成虚拟机但是它跟虚拟机完全不同。

docker仓库在hub.docker.com

,当然国内有163,网易蜂巢镜像。如果是private的就需要自己搭建镜像中心了。

docker工作流程

如上图,docker的工作流程大致是,

docker的网络

docker的关键在于容器内部与宿主机的通信,我们知道的有三种类型,Bridge 独立网络,Host与宿主机使用同一网络,None无网络。

参照: Docker四种网络模式 - (jianshu.com)

Docker pull[OPTIONS] NAME{:TAG} 镜像名称:版本

Docker images[OPTIONS] [REPOSITORY[:TAG]]

Docker run [OPTIONS] IMAGE [:TAG] [COMMAND][ARG…]

Docker rm NAME

docler exec -it backend-tomcat bash

以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

所以可以以 符号连接命令,这样执行后,只会创建 1 层镜像。

具体的指令参考: Docker Dockerfile | 菜鸟教程 (runoob.com)

Docker 的崛起、殒落

在短短不到七年的时间里,Docker先后迎来了五位CEO。这家公司一直竭力围绕其新潮的开创性云软件来开拓业务。

Docker的五位CEO

2019 年,Docker一分为二,将企业业务出售给了云咨询公司Mirantis。

数名前员工表示,对于一家曾引领重大云趋势的初创公司来说,这无异于“失宠”。

本文介绍了Docker如何从一家炙手可热的初创公司变成开源软件界的一则警示故事。

Docker曾经是硅谷最炙手可热的开发者初创公司,而DockerCon大会堪称其皇冠上的宝石。自2014年以来,DockerCon每年吸引成千上万名与会者,是软件容器领域名副其实的盛会。软件容器是一种专门但又颇具影响力的云技术,已成为Docker品牌的代名词。

在早期那几年,谷歌、亚马逊、微软和IBM等公司竞相在大会上策办盛大演示和发布会,热衷于云计算新时代的开发人员蜂拥而来,感受这股热潮。

RedMonk分析师James Governor称容器是“发展最迅猛的技术”之一。

曾经一度,Docker方面的炒作非常猛。Docker从Greylock Partners、Insight Partners和红杉资本等大牌投资者处筹资超过2.7亿美元,2018年估值达到最高峰:13.2亿美元。

快速发展的势头也引得IT巨头们为之侧目; 据说Docker在2016年拒绝了微软斥资40亿美元的收购要约。

但就在容器市场一路狂奔之际,Docker很快重重地摔到了地面。

Kubernetes的横空出世给这家初创公司施加了巨大的压力,它未能顶住这个压力。Kubernetes是谷歌发明的一种免费开源容器管理工具,抢走了Docker自己产品的风头。

Docker在不到七年的时间里先后迎来了五位CEO,试图东山再起。

2019年,Docker拆分公司,将企业业务出售给了Mirantis。

Docker剩余的家底筹集了3500万美元的A轮融资,实际上重组为一家全新的初创公司。

一位前员工告诉《商业内幕》杂志:“从价值10亿美元的独角兽,拒绝微软的收购要约,后来沦落到彻底崩溃,不得不重组整家公司,这是一则让人大跌眼镜的失宠故事。”

如今,Docker致力于为开发人员提供自动化工具,最近宣布年度经常性收入(ARR)已超过5000万美元。

Docker拒绝就本文发表评论,只是特别指出:过去这两年超过80000人参加了该公司主办的虚拟DockerCon活动,新冠疫情导致线下大会被取消。

为了回顾这家公司的影响力以及在那里工作是一种什么感觉,《商业内幕》杂志不仅采访了分析师和技术高管,还采访了10位Docker前员工。

这些前员工不愿透露姓名,以便可以畅所欲言,不过《商业内幕》知道他们的身份。他们称Docker“错失了良机”,并对公司未能将其“坐上火箭的技术”转变为商业成功表示了失望。但作为一家为兼顾盈利和服务开源社区而犯难的开源软件初创公司,它绝不会很简单。

“开源倡导者”

Docker的故事始于巴黎一家名为DotCloud的初创公司,这家公司由Solomon Hykes、Kamel Founadi和Sebastien Pahl于2008年共同创办,旨在为软件开发人员提供云托管服务。在随后几年,Hykes带领手下开发了一款基于容器的工具,帮助DotCloud加快和扩展运营。

Docker创始人Solomon Hykes

2013年,Hykes推出了这款名为Docker的工具,将其作为开源产品来发布,那样谁都可以下载、使用和修改。

同年,DotCloud聘请Red Hat负责Gluster存储软件业务的资深人士Ben Golub担任CEO,Hykes转任首席技术官。Golub的首要举措之一是宣布DotCloud更名为Docker Inc。

此举让投资者兴奋不已:AWS或微软Azure等云平台那时还不是巨无霸,但它们显然在迅速增长。

Docker的技术承诺可帮助开发人员充分利用那些平台,这反过来又帮助Docker在2013年完成了新一轮融资,估值达到1亿美元。

员工们表示,很快发现,Docker这个新贵有其自己的责任——具体来说,就是把免费开源软件Docker的成功转化为重新命名的初创公司Docker Inc.的收入。

前员工称赞Hykes是“理想主义者”和“开源倡导者”,这些雅号帮助Docker吸引和留住了顶级技术人才,但后来证明,这多少又是把双刃剑。前员工表示,开源当初让Docker赚足了眼球,并使它在开发人员中流行开来,但这家公司从未有过一项靠谱的计划,凭这款软件大赚一把。

前员工表示,Hykes基本上对优先考虑付费企业客户可能想要的“普通”功能不感兴趣,包括基于角色的访问控制和更好的用户身份验证。相反,他对开源社区对于Docker的意见比较感兴趣。一位前员工回忆起一件事,一群Docker销售人员当面告诉Hykes那些缺失的功能对付费客户有多么重要。

Docker前CEO Ben Golub出席2015年的微软Build大会。Golub现在是Storj Labs 的执行主席兼临时CEO

Docker的“原罪”与谷歌的Kubernetes崛起

Docker最重大的挑战来得很早,员工们说它也恰恰错失了最好的机会。

早在Docker崛起之前,谷歌就使用Borg(一种自主开发的软件容器变种技术)来管理自己的庞大数据中心。随着容器在业界的人气越来越高,谷歌在2014年推出了基于Borg的开源软件项目:Kubernetes。

凭借谷歌的支持以及即使在超大规模环境下也表现出色的美誉,Kubernetes一炮走红。这就给Docker出了一道难题,其创收计划在很大程度上依赖一款名为Swarm的企业级收费产品。

Kubernetes和Swarm都承诺可帮助用户管理容器,但谷歌的软件免费又可靠,很快成为了首选工具。

内部人士表示,Docker突然看起来不像是潮流引领者,更像是追随者。

西班牙巴塞罗那KubeCon 2019大会

一位前Docker员工说:“Kubernetes把房间里的空气都吸走了。我们的客户开始打探Kubernetes,它开始成为人人都想捣鼓一下的新玩具。”

Kubernetes是主要由志愿者开发的开源项目,不属于任何一家公司。谷歌后来将它捐给了独立组织云原生计算基金会(CNCF)。从小企业到AWS或微软等大巨头,任何公司只要觉得合适,都可以使用它。Kubernetes从未想过盈利。

Docker有机会成为Kubernetes潮流的一部分;Kubernetes的联合创始人Craig McLuckie去年告诉《InfoWorld》杂志,谷歌曾讨论过将整个项目捐给Docker,让这家初创公司管理。但数位前员工表示,Docker的领导层并未拥抱Kubernetes,也没有将它与Docker自己的产品集成起来,而是将Swarm定位其竞争对手,让两者相互争夺用户。

Joe Beda和Craig McLuckie在谷歌帮助创建了Kubernetes

几年后,在新任CEO的领导下,Docker原本要改变策略,并推出Kubernetes集成机制。但一位从事Docker企业产品开发的前员工表示,最初的犹豫不决是公司的“原罪”。

向企业转型

到2017年,Kubernetes变得越来越流行;需求日益旺盛,AWS、微软Azure和谷歌云适时引入了支持该技术的功能。与此同时,由于未能实现销售目标,Docker难以找到小众市场。

那年,Docker请来了一位新的CEO:Steve Singh,这位经验丰富的技术高管在1993年创立Concur,在2014年成功促成该公司被SAP收购,因此在业内家喻户晓。他负责加大开发企业产品的力度,并让公司回到正轨。

一位前员工表示,Singh到来后,公司文化发生了“明显的转变”。另一位前员工表示,这位新CEO从SAP、微软和VMware等公司聘请高管,大力推行他制定的战略,并将备受喜爱的公司标志(一堆集装箱上的一头卡通鲸鱼)变得更具“企业形象”。

内部人士表示,Singh被前员工夸赞为“热情洋溢”和“伟大的领导者”,他大力主张透明度和包容性。在他的领导下,公司采取了诸多措施,招聘时注重多元化,并竭力在其开源软件中剔除“master”或“slave”之类的术语。

2018年旧金山,Steve Singh出席DockerCon。Docker前CEO Singh现在是Madrona Venture Group的董事总经理

前员工表示,在Singh的带领下,Docker获得了一些客户的青睐。2018年10月,Docker完成了9200万美元的E轮融资,估值达到13.2亿美元——这是它拆分前的最近一次私募融资。

不过,Docker仍在竭力实现销售和收入目标。

2018年初,Hykes决定辞职走人。他说:“我们需要Steve身边有一名为世界上最大的公司交付和支持软件方面有数十年经验的CTO。”

2019年,情况到了严重关头。那年2月,Docker解雇了员工,以实现正向现金流的既定目标。几个月后,Singh宣布新的Docker Enterprise 3.0将包括支持Kubernetes的功能,CEO称此举有望吸引那些重要的大客户。

Singh在2019年5月告诉《商业内幕》杂志:“我们创办公司不是为了退出。我们创办公司是为了拥有一家伟大的长期发展的企业,具有可持续性。”

前员工表示,这些举措使许多人质疑公司的战略。不过,仍有一些人相信Singh可以带领Docker跨过这道障碍,尤其是考虑到迄今为止他取得的所有成就。

难怪Docker在2019年6月宣布Singh将在担任CEO仅两年多后离开公司的消息在内部引发了地震。

一位前员工说:“我们认为一切都还OK。我们一直在发展壮大公司,让产品日臻完善。”

虎头蛇尾的收购

Singh出局,Rob Bearden取而代之。作为开源大数据公司Hortonworks的CEO,Bearden负责将公司出售给昔日竞争对手Cloudera的工作。员工们注意到,Bearden将他以前的许多得力干将从Hortonworks带到了Docker,他总是不停地开会。他们很快就相信Bearden是专门为了出售Docker而被请来的。

Docker前CEO Rob Bearden现在是Cloudera CEO

2019年11月,Bearden上任仅几个月后,Docker 宣布将企业业务出售给Mirantis。Docker剩余的部门将改而致力于开发面向软件开发人员的产品,由分拆前担任首席产品官的Scott Johnston统一领导。

Mirantis CEO Adrian Ionel在最近的采访中告诉《商业内幕》杂志,Docker和Mirantis有着长期的合作伙伴关系,并且对Kubernetes的未来有相似的看法,从而使Docker成为了诱人的收购对象。

前员工表示,这则消息反响欠佳:公司上下已认识到了Docker可能会出售的事实,但他们预计买家会是亚马逊或微软之类的大牌公司;许多人获悉Docker将出售给像Mirantis这样一家藉藉无名的小公司后,大为震惊,继而感到失望。大家以为会书写云计算 历史 上的重要篇章,没想到迎来的却是虎头蛇尾的结局。

一位前员工谈到他们在Docker的美好时光时说:“我们起初以为这会是大交易,有人会为此大书特书。Mirantis不是那样的重量级买家。”

收购后几周内,Mirantis解雇了Docker的几名员工。Ionel表示,为了使公司“更长期独立生存和发展”,这“完全不可避免”。这些前员工表示,由于公司人员流动率很高,许多在裁员后留下来的人不久之后自愿离开了。一位前雇员说,许多人拿到留职金后,就“争先恐后地走人”。Bearden本人在Docker出售后不久就离开了,2020年初回到Cloudera担任CEO。

Mirantis表示,通过收购进来的前Docker员工中一半以上仍留在该公司,包括CTO Adam Parco。该公司告诉《商业内幕》,它没有再进行任何裁员,此后扩大了规模。

在新东家的体制下,Docker的文化经历了又一次转变。Docker以深厚的工程文化为豪,还有硅谷的典型福利,比如免费小吃、自助午餐以及偶尔的奢华假日派对。相比之下,Mirantis较为低调、节俭,并引以为豪。免费 美食 很少见,而不是司空见惯,Mirantis的领导层一再强调了Docker需要控制成本。

Ionel告诉《商业内幕》杂志:“我们不是一家非常重视滑雪旅行、大搞派对、开会必选五星级酒店的公司,而是一家以创造价值、构建出色的产品以及非常注重长远目标为豪的公司。”

这次出售也宣告DockerCon从此没落,员工们之前将其视为一项重要投入,也是公司基因的一部分。Ionel表示,Mirantis不认为投入到该大会的时间和费用“符合战略”,决定将来不参与其中。

一名效力Mirantis的前员工说:“他们看到我们在DockerCon上花了大量时间后哄堂大笑,我们羞得跑出去了房间。”

下一步何去何从

有理由对Mirantis和刚重组的Docker的下一篇章持乐观态度。

前员工称Johnston是合适的CEO,能够领导更小巧更低调的Docker度过这段非常时期,称他“为人开放”、“平易近人”、“善于管理下属”。

Docker现任CEO Scott Johnston

前CEO Singh表示,他很推崇现在的 Docker和Johnston的领导力,称其是“超级粉丝”。

Singh说:“并入到Mirantis中的企业版运行良好,Scott在Docker运作的核心开发工具业务也是如此。”

Mirantis表示,2021年是有史以来最好的年头,这在很大程度上归功于收购了Docker。发言人表示,仅去年一年,就有近300家“传统”Docker Enterprise客户与该公司的订单比原来增加了逾1000万美元。

虽然Docker的故事并没有像许多人希望的那样收尾,但不可否认的是,它引领了一场持续至今的行业运动。Red Hat CTO办公室负责人Steve Watt表示,Docker的核心技术开创了云计算行业的“全新时代”。虽然Docker没有像员工们预期的那样上市或被 科技 巨头收购,但它帮助HashiCorp和GitLab等其他开源公司打开了通向IPO 的大门。

许多前员工表示,他们仍然怀念在Docker工作的时光,纷纷赞扬这家公司是“紧密的大家庭”、“很友好”、“我工作过的最好地方”、“最开放的公司”和“合作氛围非常好”。

但业内许多人士将Docker视为一则警示故事,凸显了开源初创公司面临的长期挑战。

Forrester研究公司的首席分析师Lee Sustar告诉《商业内幕》杂志:“你希望产品能够成功。与此同时,你希望成为开源社区的一员,并为该生态系统注入活力,但从商业层面上来说又能蓬勃发展。把握好这一点是许多初创公司想要做好的。”

Docker基础

Docker 是一个开源的应用容器引擎,基于Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker最早是在Ubuntu 12.04上开发实现的;

Red Hat则从RHEL6.5开始对Docker进行支持。

而后Windows和Mac上也相应有了Docker版本支持。

在Docker容器技术出现之前,Linux上是已经有一个docker的工具的,但此docker非彼Docker。

这个docker是一个窗口停靠栏程序,就像苹果的Mac系统中的dock那个程序一样的一个工具。

为了区分开来,我们以Docker和docker来进行区分。

Docker:指容器技术。

docker:指窗口停靠栏程序。

Docker技术出来后,因为Linux系统上已经有了docker这个工具,所以Docker软件名也不能跟人家重名啊,要不然没办法安装。

由于那个时候Docker的官网是docker.io,所以就在软件名称上加了io的后缀,在Ubuntu中就是docker.io,在CentOS中就是docker-io。

但是虽然软件名跟docker程序不一样了,但软件安装后的操作命令还是一样的,都是docker的这个命令,所以要安装Docker软件,要先看看有没有安装了那个停靠栏程序docker,有的话要先卸载才行,要不然执行的命令是不对的。

这个时期要安装Docker,就要用docker加io后缀的方式来安装。

Docker容器使用docker.io和docker-io为软件名,主要是前期的一段时间。

后来随着Docker的发展,软件包名改成了docker-engine,不同系统中名称达到了统一。

再后来,随着Docker技术的火爆,在征得docker停靠栏程序作者同意下,原先的停靠栏程序docker名称改掉了,改成了wmdocker,Docker容器技术的软件包名才正式成了docker这个名称,Docker软件包的名称又得到了一次完全的统一。

到Docker1.13.1版本之前,Docker软件包的名称有两次变化,从docker-io(docker.io)到docker-engine,再到docker。

Docker发展到1.13.1版本号后,Docker公司把Docker分成了社区版(免费)Docker CE和商业版(付费)Docker EE两种形式,并且版本号命名方式也改了,以前是那种常用的版本号命令方式,比如0.1、0.2、1.0之类的,现在分社区和商业版后,版本号是“年.月”的形式命名的,比如2019年10月发布的,版本号就是19.10。

所以在Docker1.13.1之后,直接是Docker-ce 17.03.0版本了,也就是2017年03月发布的。

现在要安装最新版的Docker软件包,就是使用docker-ce这个名称了,如果是商业版的就是docker-ee了。

目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的文件系统支持,如需要磁盘分区的时候传递d-type稳健分层功能,即需要传递内核参数并开启格式化磁盘的时候指定的功能。

存储引擎的选择文档

AUFS

AUFSAnotherUnionFileSystem是一种UnionFS。V2版本后更名为 advanced multi‐layered unification fileystem,即高级多层统一文件系统。所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种系统可以一层一层的叠加修改文件。无论底下有多少层都是只读,只有最上层的文件系统是可读写。当需要修改一个文件时,AUFS创建该文件的一个副本。使用CoWCopy-on-Write将文件从只读层复制到可写层进行修改,结果也保留在可写层、在Docker中。底下的制度层就是image,可写层就是Container。

Overlay

一种Union FS文件系统,Linux内核3.18后支持

Overlay2

overlay的升级版,到目前为止,所有Linux发行版推荐使用的存储类型

devicemapper

是CentOS和RHEL的推荐存储驱动程序,但是依赖于direct-lvm,存在空间受限的问题,虽然可以通过后期配置解决;因为之前的内核版本不支持overlay2(集中在Centos/RHEL7.2之前版本);但当前较新版本Centos和RHEL现已经支持overlay2。

zfs/btrfs(Oracle-2007)

目前没有广泛应用;这些文件系统允许使用高级选项,例如创建“快照”,但需要更多的维护和设置。并且每一个都依赖于正确配置的后备文件系统。

vfs

用于测试环境,适用于无法适用Cow文件系统的情况。此存储驱动程序的性能很差,通常不建议在生产中使用。

1)overlay存储驱动程序已在Docker Engine-Enterprise 18.09中弃用,并将在以后的版本中删除。建议将overlay存储驱动程序的用户迁移到overlay2。

2)devicemapper存储驱动程序已在Docker Engine 18.09中弃用,并将在以后的版本中删除。建议将devicemapper存储驱动程序的用户迁移到overlay2。

建议使用overlay2存储驱动程序。首次安装Docker时,默认情况下使用overlay2。早期版本,默认情况下会使用aufs。如果要在新版本中使用aufs,则需要对其配置,并且可能需要安装其他软件包,例如linux-image-extra。

对于Docker,支持文件系统是所在的文件系统 /var/lib/docker/。一些存储驱动程序仅适用于特定的后备文件系统。

配置 Docker 存储驱动非常简单,只需要修改配置文件即可。

live-restore重载docker守护进程而不重启容器

默认情况下,当 Docker 守护进程终止时,它将关闭正在运行的容器。您可以配置守护程序,以便容器在守护程序不可用时保持运行。此功能称为live-restore。live-restore选项有助于减少由于守护进程崩溃、计划中断或升级而导致的容器停机时间。

在工作中,假如修改了docker的配置而需要重新加载docker守护进程,导致docker容器重启,业务会中断一会,尤其是在生产环境,存在一定的风险。这种情况下,可以启用live-restore功能,以在守护进程不可用时使容器保持活动状态,有以下两种方法设置。

一、

将配置添加到守护进程配置,即docker-daemon.json,如下

二、

手动启用该过程

docker官方文档建议使用第一种方式

Docker 概述

本文翻译自docker官网:

Docker is an open platform for developing, shipping, and running applications.

Docker enables you to separate your applications from your infrastructure so

you can deliver software quickly. With Docker, you can manage your infrastructure

in the same ways you manage your applications. By taking advantage of Docker's

methodologies for shipping, testing, and deploying code quickly, you can

significantly reduce the delay between writing code and running it in production.

Docker provides the ability to package and run an application in a loosely isolated

environment called a container. The isolation and security allow you to run many

containers simultaneously on a given host. Containers are lightweight and contain

everything needed to run the application, so you do not need to rely on what is

currently installed on the host. You can easily share containers while you work,

and be sure that everyone you share with gets the same container that works in the

same way.

Docker provides tooling and a platform to manage the lifecycle of your containers:

Fast, consistent delivery of your applications

Docker streamlines the development lifecycle by allowing developers to work in

standardized environments using local containers which provide your applications

and services. Containers are great for continuous integration and continuous

delivery (CI/CD) workflows.

Consider the following example scenario:

Responsive deployment and scaling

Docker's container-based platform allows for highly portable workloads. Docker

containers can run on a developer's local laptop, on physical or virtual

machines in a data center, on cloud providers, or in a mixture of environments.

Docker's portability and lightweight nature also make it easy to dynamically

manage workloads, scaling up or tearing down applications and services as

business needs dictate, in near real time.

Running more workloads on the same hardware

Docker is lightweight and fast. It provides a viable, cost-effective alternative

to hypervisor-based virtual machines, so you can use more of your compute

capacity to achieve your business goals. Docker is perfect for high density

environments and for small and medium deployments where you need to do more with

fewer resources.

Docker uses a client-server architecture. The Docker client talks to the

Docker daemon , which does the heavy lifting of building, running, and

distributing your Docker containers. The Docker client and daemon can

run on the same system, or you can connect a Docker client to a remote Docker

daemon. The Docker client and daemon communicate using a REST API, over UNIX

sockets or a network interface. Another Docker client is Docker Compose,

that lets you work with applications consisting of a set of containers.

[图片上传失败...(image-17b2f-1618407573391)]

The Docker daemon ( dockerd ) listens for Docker API requests and manages Docker

objects such as images, containers, networks, and volumes. A daemon can also

communicate with other daemons to manage Docker services.

The Docker client ( docker ) is the primary way that many Docker users interact

with Docker. When you use commands such as docker run , the client sends these

commands to dockerd , which carries them out. The docker command uses the

Docker API. The Docker client can communicate with more than one daemon.

A Docker registry stores Docker images. Docker Hub is a public

registry that anyone can use, and Docker is configured to look for images on

Docker Hub by default. You can even run your own private registry.

When you use the docker pull or docker run commands, the required images are

pulled from your configured registry. When you use the docker push command,

your image is pushed to your configured registry.

When you use Docker, you are creating and using images, containers, networks,

volumes, plugins, and other objects. This section is a brief overview of some

of those objects.

An image is a read-only template with instructions for creating a Docker

container. Often, an image is based on another image, with some additional

customization. For example, you may build an image which is based on the ubuntu

image, but installs the Apache web server and your application, as well as the

configuration details needed to make your application run.

You might create your own images or you might only use those created by others

and published in a registry. To build your own image, you create a Dockerfile

with a simple syntax for defining the steps needed to create the image and run

it. Each instruction in a Dockerfile creates a layer in the image. When you

change the Dockerfile and rebuild the image, only those layers which have

changed are rebuilt. This is part of what makes images so lightweight, small,

and fast, when compared to other virtualization technologies.

A container is a runnable instance of an image. You can create, start, stop,

move, or delete a container using the Docker API or CLI. You can connect a

container to one or more networks, attach storage to it, or even create a new

image based on its current state.

By default, a container is relatively well isolated from other containers and

its host machine. You can control how isolated a container's network, storage,

or other underlying subsystems are from other containers or from the host

machine.

A container is defined by its image as well as any configuration options you

provide to it when you create or start it. When a container is removed, any changes to

its state that are not stored in persistent storage disappear.

The following command runs an ubuntu container, attaches interactively to your

local command-line session, and runs /bin/bash .

When you run this command, the following happens (assuming you are using

the default registry configuration):

Docker is written in the Go programming language and takes

advantage of several features of the Linux kernel to deliver its functionality.

Docker uses a technology called namespaces to provide the isolated workspace

called the container . When you run a container, Docker creates a set of

namespaces for that container.

These namespaces provide a layer of isolation. Each aspect of a container runs

in a separate namespace and its access is limited to that namespace.

什么是Docker

Docker是一个开源的应用容器引擎,它基于Go语言开发,并遵从Apache2.0开源协议。使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意Linux机器上,也可以实现虚拟化。Docker容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性。

Docker诞生于2013年初,目前有两个版本:Community Edition(CE,社区版)和Enterprise

Edition(EE,企业版)。

Docker有哪些特点?

1、更高效的利用系统资源

Docker对系统资源的利用率很高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,对比虚拟化技术,一个相同配置的主机往往可以运行更多数量的应用。

2、更快速的启动时间

传统的虚拟化技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大节约了开发测试,部署的时间。

3、一致的运行环境

开发过程中常见的一个问题是环境一致问题,由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中发现。而Docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现这段代码在我机器上没问题这类问题。

4、持续支付和部署

对开发和运维人员来说,最希望就是一次创建和部署,可以在任意地方运行。而且使用Docker

file使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

5、更轻松的迁移

由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

6、更轻松的维护和扩展

Docker使用的分层存储以及镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~