linux里面的dockercpu里面到底是什么么?

Linux中Docker安装后如何使用Docker容器
作者:佚名
字体:[ ] 来源:互联网 时间:01-19 15:13:50
Docker的安装在之前的文章中有介绍过,不少朋友在安装后不知要如何使用Docker容器,下面以图文的形式为大家介绍下如何使用
  在之前的文章中我们有介绍过Docker的安装,不少朋友在安装后不知要如何使用Docker容器,下面小编就给大家介绍下Linux如何使用Docker容器。
  1.启动一个Docker容器
  [root@localhost ~]# docker run -i -t Ubuntu /bin/bash
  Unable to find image &ubuntu& locally
  Pulling repository ubuntu
  04c5d3b7b065: Download complete
  c5a: Download complete
  c7b7c6419568: Download complete
  70c8faa62a44: Download complete
  dc1: Download complete
  Status: Downloaded newer image for ubuntu:latest
  -i:打开容器中的STDIN
  -t:为容器分配一个伪tty终端
  从上面我们可以看出,首先Docker会检查本地是否存在ubuntu镜像,如果在本地没有找到该镜像的话,那么Docker就会去官方的Docker Hub Registry查看Docker Hub中是否有该镜像。Docker一旦找到该镜像,就会下载该镜像并将其保存到本地的宿主机中。
  然后,Docker在文件系统内部用这个镜像创建了一个新的容器。该容器拥有自己的网络、IP地址,以及一个用来可以和宿主机进行通信的桥接网络接口。最后,我们告诉Docker在新容器中要运行什么命令。
  当容器创建完毕之后,Docker就会执行容器中的/bin/bash命令。这时间我们就可以看到容器内的shell
  root@8c342c0c275c:/#
  注:8c342c0c275c代表容器的ID
  2.使用容器
  查看该容器的主机名
  root@8c342c0c275c:/# hostname
  8c342c0c275c
  可以看到,容器的主机名就是该容器的ID
  查看该主机的hosts文件
  root@8c342c0c275c:/# cat /etc/hosts
  172.17.0.2 8c342c0c275c
  ff00::0 ip6-mcastprefix
  ff02::1 ip6-allnodes
  ff02::2 ip6-allrouters
  127.0.0.1 localhost
  ::1 localhost ip6-localhost ip6-loopback
  fe00::0 ip6-localnet
  可以看到Docker为该容器的IP地址添加了一条主机配置项。
  查看该容器的IP地址
  root@8c342c0c275c:/# ip a
  1: lo: 《LOOPBACK,UP,LOWER_UP》 mtu 65536 qdisc noqueue state UNKNOWN group default
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host
  valid_lft forever preferred_lft forever
  4: eth0: 《BROADCAST,UP,LOWER_UP》 mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
  inet 172.17.0.2/16 scope global eth0
  valid_lft forever preferred_lft forever
  inet6 fe80::42:acff:fe11:2/64 scope link
  valid_lft forever preferred_lft forever
  查看容器中运行的进程
  root@8c342c0c275c:/# ps -aux
  USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  root 1 0.0 0.1
? Ss 09:38 0:00 /bin/bash
  root 19 0.0 0.0
? R+ 09:55 0:00 ps -aux
  在容器中安装一个软件包
  root@8c342c0c275c:/# apt-get update && apt-get install vim
trusty InRelease
trusty-updates InRelease
trusty-security InRelease
trusty Release.gpg
trusty-updates Release.gpg [933 B]
trusty-security Release.gpg [933 B]
trusty Release
trusty-updates Release [62.0 kB]
trusty-security Release [62.0 kB]
trusty/main Sources [1335 kB]
trusty/restricted Sources [5335 B]
trusty/universe Sources [7926 kB]
trusty/main amd64 Packages [1743 kB]
trusty/restricted amd64 Packages [16.0 kB]
  Get:10
trusty/universe amd64 Packages [7589 kB]
  Get:11
trusty-updates/main Sources [193 kB]
  Get:12
trusty-updates/restricted Sources [1874 B]
  Get:13
trusty-updates/universe Sources [119 kB]
  Get:14
trusty-updates/main amd64 Packages [493 kB]
  Get:15
trusty-updates/restricted amd64 Packages [14.8 kB]
  Get:16
trusty-updates/universe amd64 Packages [298 kB]
  Get:17
trusty-security/main Sources [70.1 kB]
  Get:18
trusty-security/restricted Sources [1874 B]
  Get:19
trusty-security/universe Sources [19.1 kB]
  Get:20
trusty-security/main amd64 Packages [229 kB]
  Get:21
trusty-security/restricted amd64 Packages [14.8 kB]
  Get:22
trusty-security/universe amd64 Packages [98.1 kB]
  Fetched 20.3 MB in 41s (490 kB/s)
  Reading package lists.。。 Done
  Reading package lists.。。 Done
  Building dependency tree
  Reading state information.。。 Done
  The following extra packages will be installed:
  libgpm2 libpython2.7 libpython2.7-minimal libpython2.7-stdlib vim-runtime
  Suggested packages:
  gpm ctags vim-doc vim-scripts
  The following NEW packages will be installed:
  libgpm2 libpython2.7 libpython2.7-minimal libpython2.7-stdlib vim
  vim-runtime
  0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded.
  Need to get 9083 kB of archives.
  After this operation, 42.9 MB of additional disk space will be used.
  Do you want to continue? [Y/n] y
  Get:1 /ubuntu/ trusty/main libgpm2 amd64 1.20.4-6.1 [16.5 kB]
  Get:2 /ubuntu/ trusty/main libpython2.7-minimal amd64 2.7.6-8 [307 kB]
  Get:3 /ubuntu/ trusty/main libpython2.7-stdlib amd64 2.7.6-8 [1872 kB]
  Get:4 /ubuntu/ trusty/main libpython2.7 amd64 2.7.6-8 [1044 kB]
  Get:5 /ubuntu/ trusty/main vim-runtime all 2:7.4.052-1ubuntu3 [4888 kB]
  Get:6 /ubuntu/ trusty/main vim amd64 2:7.4.052-1ubuntu3 [956 kB]
  Fetched 9083 kB in 51s (175 kB/s)
  Selecting previously unselected package libgpm2:amd64.
  (Reading database 。。。 11527 files and directories currently installed.)
  Preparing to unpack 。。。/libgpm2_1.20.4-6.1_amd64.deb 。。。
  Unpacking libgpm2:amd64 (1.20.4-6.1) 。。。
  Selecting previously unselected package libpython2.7-minimal:amd64.
  Preparing to unpack 。。。/libpython2.7-minimal_2.7.6-8_amd64.deb 。。。
  Unpacking libpython2.7-minimal:amd64 (2.7.6-8) 。。。
  Selecting previously unselected package libpython2.7-stdlib:amd64.
  Preparing to unpack 。。。/libpython2.7-stdlib_2.7.6-8_amd64.deb 。。。
  Unpacking libpython2.7-stdlib:amd64 (2.7.6-8) 。。。
  Selecting previously unselected package libpython2.7:amd64.
  Preparing to unpack 。。。/libpython2.7_2.7.6-8_amd64.deb 。。。
  Unpacking libpython2.7:amd64 (2.7.6-8) 。。。
  Selecting previously unselected package vim-runtime.
  Preparing to unpack 。。。/vim-runtime_2%3a7.4.052-1ubuntu3_all.deb 。。。
  Adding &diversion of /usr/share/vim/vim74/doc/help.txt to /usr/share/vim/vim74/doc/help.txt.vim-tiny by vim-runtime&
  Adding &diversion of /usr/share/vim/vim74/doc/tags to /usr/share/vim/vim74/doc/tags.vim-tiny by vim-runtime&
  Unpacking vim-runtime (2:7.4.052-1ubuntu3) 。。。
  Selecting previously unselected package vim.
  Preparing to unpack 。。。/vim_2%3a7.4.052-1ubuntu3_amd64.deb 。。。
  Unpacking vim (2:7.4.052-1ubuntu3) 。。。
  Setting up libgpm2:amd64 (1.20.4-6.1) 。。。
  Setting up libpython2.7-minimal:amd64 (2.7.6-8) 。。。
  Setting up libpython2.7-stdlib:amd64 (2.7.6-8) 。。。
  Setting up libpython2.7:amd64 (2.7.6-8) 。。。
  Setting up vim-runtime (2:7.4.052-1ubuntu3) 。。。
  Processing /usr/share/vim/addons/doc
  Setting up vim (2:7.4.052-1ubuntu3) 。。。
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
  update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
  Processing triggers for libc-bin (2.19-0ubuntu6.4) 。。。
  退出容器
  root@8c342c0c275c:/# exit
  当我们输入exit后,容器就停止工作了。只有在指定的/bin/bash命令处于运行状态的时间,容器才会相应地处于运行状态。一旦退出容器,/bin/bash命令也就结束了,这时容器也就停止了。
  查看系统中容器的列表
  [root@localhost ~]# docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8c342c0c275c ubuntu:latest &/bin/bash& 26 minutes ago Exited (0) 5 minutes ago sharp_bohr
  8c342c0c275c:代表容器的ID,
  ubuntu:latest :创建容器的镜像
  &/bin/bash&  :容器最后执行的命令
  26 minutes ago :创建时间
  Exited (0) 5 minutes :容器退出的状态
  sharp_bohr     :容器的名称
  Docker中容器的命名
  Docker在创建容器时会自动为容器生成一个随机的名称。那么如果我们想在创建一个容器时指定该容器的名称可以使用如下命令:
  [root@localhost ~]# docker run --name ovcer_the_container -i -t ubuntu /bin/bash
  root@1ce9f640478d:/#
  上面的命令将会创建一个名为ovcer_the_container的容器。对于一个合法的容器的名称来说只可以包括以下字符:小写字母a~z、大写字母A-Z、数字0~9、下划线、圆点、横线。
  上面就是Linux使用Docker容器的方法介绍了,在使用命令创建Docker容器后,就可以使用命令对Docker容器进行命名了。
大家感兴趣的内容
12345678910
最近更新的内容什么是 Docker?_Linux中国_传送门
什么是 Docker?
作者:邹立巍
作者: 邹立巍关于 docker 是什么,有个著名的隐喻:集装箱。但是它却起了个“码头工人”(docker 的英文翻译)的名字。这无疑给使用者很多暗示:“快来用吧!用了 docker,就像世界出现了集装箱,这样你的业务就可以随意的、无拘无束的运行在任何地方(Docker 公司的口号:Build,Ship,and Run Any App,Anywhere),于是码头工人就基本都可以下岗了。”但是人们往往忽略了一个问题,隐喻的好处是方便人理解一个不容易理解的概念,但并不能解释其概念本身。互联网技术行业的一大特点是,这里的绝大多数事物并不像现实生活那么具体,在这个行业中我们所接触的绝大多数概念都是抽象的、不具体的。所以现实生活中很多可笑的事情在互联网技术行业就不仅变的不可笑,反而可能很严肃。就比如,现实生活中你是几乎不可能看见两个神经正常的成年人争论到底是锤子更好还是螺丝刀更好这个问题的。而在我们这个行业,你可以很容易的被卷入到底是 java 好?还是 php 好?还是 js 好?或者类似的语言之争中。当然除了语言,其它的软件工具之争也比比皆是,比如经典的还有 vim vs emacs。由于不具体和抽象,就需要隐喻来给投资人解释其价值,毕竟投资人大多数是外行嘛。至于 docker 到底是“集装箱”还是“码头工人”并不重要,即使这两个概念本质上冲突了都不重要,很少有人会去真的思考集装箱的出现导致码头工人几乎绝迹。只要能让大家明白 docker 是个重要的、有价值的、划时代的工具,骗到投资人的钱就足够了。也很少有投资人去考究集装箱的发明人到底有没有因此赚到钱?以及为什么没赚到钱?只要概念能忽悠人就行了。当然这个概念顺便也忽悠了所有懒得思考的技术工程师。吐了一大段槽之后,回到我们的正题,docker 到底是什么?既然大家喜欢集装箱这个隐喻,那么我们也不妨先来看看集装箱的本质。大家应该基本都理解集装箱是怎么改变世界的吧?在集装箱之前,货物运输没有统一的标准方式进行搬运,于是铁路、公路、海洋等各种运输之间,需要大量的人力作为货物中转,效率极低,而且成本很高。集装箱出现之后,世界上绝大多数的货物运输都可以放到这个神奇的箱子里,然后在公路、铁路、海洋等所有运输场景下,这个箱子都可以不用变化形态直接可以承运,而且中间的中转工作,都可以通过大型机械搞定,效率大大提升。从此全球化开始,商业的潜力被进一步挖掘……牛逼之处我就不多说了,可是这个箱子为什么这么神奇呢?答案其实也就在上面的描述中,无非就是两个字:标准。是的!标准!标准!标准!重要的事情说三遍。因为规范了集装箱的大小和尺寸的规格标准,于是相应的船舶、卡车、列车才能按照规格制造出来使联运成为可能,所有的运输中转的自动化工具才能被设计建造出来并且高效的使用,才可以极大的提高效率,提升自动化水平,以至于码头工人才会失业。集装箱本身是一个产品,而这个产品无非就是“标准化”的这个概念穿上了马甲,马甲可以有红的、绿的、蓝的、花的,但是大小规格必须都一样。现实世界中的事实显而易见,就是这么简单。那么 docker 呢?按照这个思路,docker 其实跟集装箱一样,或者说它想跟集装箱一样,成为穿着马甲的“标准化”。这样开发工程师就可以把它们开发出来的 bug 们放到“集装箱”里,然后运维人员就可以使用标准化的操作工具去运维这些可爱的 bug 们。于是实现了“海陆联运”,就好像运维工程师根本不需要了解其运维的软件架构,而开发工程师也并不需要了解其软件运行的操作系统一样……这就是 docker 的实质:穿着马甲的标准化。docker 的发明人根据自己运维 PaaS 平台的经验,重新思考了自己的工作,将PaaS 平台的 devops 工作从各个角度标准化了一下,将系统底层实现的 cgroup、namespace、aufs|device mapper 等技术集成在一个使用镜像方式发布的工具中,于是形成了 docker。观察 docker 形成的思考过程,其实就是作者针对他所运维的场景如何做自动化运维的思考,大家可以参见其演讲的 [1]。这个演讲的名字就跟自动化运维相关:Docker: automation for the rest of us 。那么 docker 的实质是什么?在我看来就是个针对 PaaS 平台的自动化运维工具而已。众所周知(当然如果你不知道,那么我来告诉你):自动化运维的大前提就是标准化。如果你正好是一个运维工程师,而且你正感觉你的运维环境一团糟,麻烦请你思考一下这是为什么?你是不是正在运维着一个使用 php、java、C# 甚至 C/C++ 等用各种语言编写的应用都在运行的环境里?这个环境是不是因为某种历史原因,使你的操作系统运行着各个版本的内核,甚至还有 windows?即使是同样语言编写的业务也运行着不同版本的库?你的整个系统环境是不是甚至找不出来两台硬件、操作系统、库版本以及语言版本完全一样的环境?于是你每次遇到问题都要去排查到底那个坑到底在那里?从网络、内核到应用逻辑。你每次遇到产品升级都要在各种环境上做稳定性测试,发现不同的环境代码 crash 的原因都不尽相同。你就像一个老中医一样去经历各种疑难杂症,如果遇到问题能找到原因甚至都是幸运的,绝大多数情况是解决了但不知道原因,和没解决自动好了也不知道原因。于是你们在一个特定的公司的环境中积累着“经验”,成为你们组新手眼中的大神,凭借历经故障养成的条件反射在快速解决不断发生的重复问题,并故弄玄虚的说:这就是工作经验。因为经验经常是搞不清楚原因时的最后一个遮羞布。当别人抱怨你们部门效率低的时候,你一般的反应是:”you can you up,no can no BB!“我花了这么多口舌吐槽运维,无非就是想提醒大家”运维标准化的重要性“这一显而不易见的事实。标准化了,才能提高效率。标准化了,才能基于标准建设属于你们系统的自动化运维。那么我们再来看看 docker 是怎么做的?首先,标准化就要有标准化的文档规范,要定义系统软件版本等一系列内容。规范好了之后,大家开始实施。但是在长期运维的过程中,很可能出现随着系统的发展,文档内容已经过时了,工程师又来不及更新文档的问题。怎么解决?docker 给出的答案是:用 dockerfile。dockerfile 就是你的文档,并且用来产生镜像。要改变 docker 镜像中的环境,先改 dockerfile,用它产生镜像就行了,保证文档和环境一致。那么现实是,有多少在使用 docker 的人是这样用的?你们是不是嫌这样麻烦,于是干脆直接在线 docker commit 产生镜像,让文档跟现场环境又不符了?或者我还是太理想,因为你们压根连文档都没有?其次,标准化要有对应用统一操作的方法。在现实中,即使你用的是 php 开发的应用,启动的方式都可能不尽相同。有用apache 的,有用 nginx 的,还有用某种不知名 web 容器的,甚至是自己开发 web 容器的。如果操作范围扩大到包含 java 等其它语言,或数据库等其它服务,那么操作方式更是千奇百怪。虽然 UNIX 操作系统早就对此作了统一的规范,就是大家常见的把启动脚本放到 /etc/rc.d 中,SYSV 标准中甚至规定了启动脚本该怎么写,应该有哪些方法。但是绝大多数人不知道,或者知道了也不这么做,他们习惯用 ./start 作为自己业务启动的唯一标准。甚至 ./ 是哪个目录可能都记不住。于是 docker 又给出了解决方案:我压根不管你怎么启动,你自己爱咋来咋来,我们用 docker start 或 run 作为统一标准。于是 docker start 可以启动一个 apache、nginx、jvm、mysql 等等。有人病垢 docker 的设计,质疑它为什么设计上一个容器内只给启动一个进程?这就是原因:人家压根不是为了给你当虚拟机用的,人家是为了给启动生产环境的进程做标准化的!第三,为了维护生产环境的一致性和配置变更的幂等,docker 创造性的使用了类似 git 管理代码的方式对环境镜像进行管理。于是:你想做库版本升级吗?更新个镜像吧!你想做 php、java 的版本升级吗?更新个镜像吧。好方便!太爽了!等等……神马?你想改变 apache 配置文件中的一个字段?做个新镜像升级吧!你的 php 代码写错了一行要改个 bug?做个新镜像升级吧……在一群人吐血三升之后,于是有人出了个主意。唉,其实后两种需求没必要这么麻烦,有一种软件叫做 puppet、chef、salt、ansible、rsync ……于是我们要在 docker 中启动一个 puppet。什么?你要用 ansible?好吧,我们来看看怎么在 docker 中启动一个 sshd?我有个计划任务要跑,起个 crontab 可以么?你的 docker 是不是就这么变成了“虚拟机”的?不过请注意:我并不是说 docker 不好,只是你是否真的评估了它标准化的方式是不是适合你的业务场景?锤子是用来砸钉子的,但是你非要用它来砸手指,我也没什么办法。作为一个工程师,而且是受过专业训练的工程师,总是想设计出一套工具满足所有场景需求。因为工程师所受的思维训练是:你越是解决了更普遍的问题,你所创造的价值就越大。但是请搞清楚,这个任务一般是由标准委员会来完成的,每个工程行业都会有这么个组织来做这件事情。当然,不排除商业公司的产品可以深刻影响标准制定的情况。那么我们这些工程师最大的价值是什么?摆正自己的位置,看清自己的问题,帮小组所在的企业进一步提高效率,提高竞争力。每个企业都有其历史和当前特点,就运维工作来讲,根据企业的实际情况找到其标准化的最经济有利方式才是我们这些受聘用的职业工程师的核心价值。软件选型要要因地制宜,而不是跟风炒作。当然,如果你的核心价值是想要站在“技术前沿”,打算一直引领技术潮流,做一个出没于各大技术交流会的新技术吹牛逼者,并以此抬高自己身价的话,那我的话自然是对你不适用的。(说这话可能会得罪很多人,我要解释一下:对于那些真诚的想要分享自己技术,希望为社区发展做贡献的人,我是怀着深深的敬意的!谢谢你们!)对待新技术,大多数工程师的状态是:测试是为了上线的,测试出的问题都是要解决的而不是用来评估的,不上线就没有工作成果。我认为工程师对待新技术应有得态度是:激进的用新技术新方法来做线下测试,认真的总结评估测试流程和结果和现有环境的异同,保守谨慎的评估决策新技术是否在业务上大规模使用。docker 是银弹么?真的能像集装箱那样改变世界么?我的看法当然不是。即使集装箱,也不能解决一些特殊的运输问题,比如大型飞机零部件的运输,或者小件零散商品的运输。如果说云计算行业真的要出现集装箱的话,那么首先这个行业要被几大云计算厂商瓜分完毕,市场成熟之后才有可能。为什么?因为让一个应用可以在任何地方跑的需求,主要应该来自云的用户,他们可能为了稳定性考虑既租用了阿某云,又租用了腾讯云(纯广告,自己所在的公司,所以请勿吐槽),还可能为了海外市场还用了某马逊云。这时用户会有需求说,我想要这些云的环境标准一致,以便我的应用可以在哪朵云上都能跑(Build,Ship,and Run Any App)。而现在,云计算市场刚刚起步,群雄逐鹿,正是差异化发展争夺用户的时候。出了云计算厂商外,其它公司的 IT 环境都不一样,标准化要求也就不可能一样。那么你觉得 docker 这个标准可能适合所有人么?如果你用过了 docker,并且还觉得它非常合适你的环境,那么我希望你能回答这几个问题:你的 docker 是用 dockerfile 产生的镜像还是直接 docker commit?你的 docker 里面跑了多少个进程?你的 docker 是当虚拟机用的么?那么你用的是 docker 么?最后,送大家一个段子,希望能博你一笑。工程师:“嘿!有人发明了一个叫做集装箱的东西,这东西一定可以使运输成本大大下降!甚至改变世界!”用户:“好兴奋!这东西可以运输我的波音787客机么?“工程师:“额。。不能整个运,需要拆开再运,因为我们要符合集装箱的标准……”用户:“那这东西可以运输我的空客380嘛?”工程师:“额。。我们讨论的是同一件事情。”用户:“不行是嘛?那不能改造一下集装箱让它可以运嘛?”工程师:“额。。。这不仅仅是我们的问题,要到达运输目的地还要经过铁路,公路,他们可能也无法……”用户:“真的不能改造集装箱么?可这东西是以后的发展方向啊!未来的世界都是应该是集装箱运输的!”工程师:“额……”老板:“嗯!这东西说不定真的是未来的发展方向!我们一定要实现用集装箱运输这些飞机!工程师们,你们赶紧去攻克这些技术难题,早日可以实现我们用户的特殊需求!让集装箱可以达到我们的业务要求!快去吧!加油啊!”工程师:“额……”转载自:
作者: 邹立巍[1]: http://www.slideshare.net/jpetazzo/docker-automation-for-the-rest-of-us?from_action=save推荐文章点击标题或输入文章 ID 直达该文章3373 3377 3609 3884 将文章分享给朋友是对我们最好的赞赏!
觉得不错,分享给更多人看到
Linux中国 微信二维码
分享这篇文章
5月9日 22:39
Linux中国 最新文章
Linux中国 热门文章以上由提供
当前位置:
> 详细页面
Linux中Docker容器使用实例
时间: 17:12来源:作者:qipeng
上一页1共3页
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
系统教程栏目
热门系统教程
在笔记本电脑早已普及到会议室的这个年代,商务人士拿笔记...
热门系统下载
最新系统教程
热门软件下载
Copyright&2011 系统之家(www.xitongzhijia.net) 版权所有 闽ICP备号-1
本站发布的系统与软件仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件!
如侵犯到您的权益,请及时通知我们,我们会及时处理。当红Docker究竟是什么?它的优点和缺陷
查看: 14764|
评论: 0|原作者: OurJS|来自: OurJS
摘要: Docker是什么?简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的 ...
  Docker是什么?  简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。  Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:&Docker Engine:&一个便携式、轻量级的运行环境和包管理器。(注* 单OS vs 单线程,是不是跟NodeJS特别像?)Docker Hub:&为创建自动化工作流和分享应用创建的云服务组成。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)&  从日,第一个版本的Docker正式发布到 2014年6月 Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。  其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。好的部分  Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性, 以下部分摘自: KVM and Docker LXC Benchmarking with OpenStack快  运行时的性能可以获取极大提升(经典的案例是提升97%)  管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。敏捷  像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。灵活  将应用和系统“容器化”,不添加额外的操作系统,轻量  你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。便宜  开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。生态系统  正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC.  还有不计其数的社区和第三方应用。云支持  不计其数的云服务提供创建和管理Linux容器框架。  有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升。  Performance Characteristics of VMs vs Docker Containers by Boden Russel (IBM)  Performance characteristics of traditional v ms vs docker containers有争论的部分  任何项目都会有争论,就像Go,像NodeJS, 同样Docker也有一些。能否彻底隔离  在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。 注* 就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。  不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。GO语言还没有完全成熟  Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。被私有公司控制  Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)。本文转载自:
上一篇:下一篇:
快毕业了,没工作经验,
找份工作好难啊?
赶紧去人才芯片公司磨练吧!!}

我要回帖

更多关于 linux docker 的文章

更多推荐

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

点击添加站长微信