关闭

Docker详解

标签: 网页开发
212人阅读 评论(0) 收藏 举报
分类:

转载:http://www.csdn.net/article/2014-07-02/2820497-what%27s-docker


尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来。

官网的介绍是这样的:

Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....

其实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。

为啥要用容器?

那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。

那么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。

在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在 Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。

若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。

此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。

那为啥不用VM?

那么既然容器和 VM 这么类似为啥不直接用 VM 还要整出个容器这么个概念来呢?Docker 容器相对于 VM 有以下几个优点:

  • 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久
  • 资源利用率高,一台普通 PC 可以跑上千个容器,你跑上千个 VM 试试
  • 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源

为啥相似的功能在性能上会有如此巨大的差距呢,其实这和他们的设计的理念是相关的。 VM 的设计图如下:

VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。而 Docker 的设计图是这样的: 

 

Docker 几乎就没有什么虚拟化的东西,并且直接复用了 Host 主机的 OS,在 Docker Engine 层面实现了调度和隔离重量一下子就降低了好几个档次。 Docker 的容器利用了  LXC,管理利用了 namespaces 来做权限的控制和隔离,  cgroups 来进行资源的配置,并且还通过  aufs 来进一步提高文件系统的资源利用率。

其中的 aufs 是个很有意思的东西,是  UnionFS 的一种。他的思想和 git 有些类似,可以把对文件系统的改动当成一次 commit 一层层的叠加。这样的话多个容器之间就可以共享他们的文件系统层次,每个容器下面都是共享的文件系统层次,上面再是各自对文件系统改动的层次,这样的话极大的节省了对存储的需求,并且也能加速容器的启动。

下一步

有了前面的这些介绍,应该对 Docker 到底是啥有些了解了吧, Docker 是 用 Go 语言编写的,源代码托管在 github 而且居然只有 1W 行就完成了这些功能。如果想尝试一下的话可以看 官方介绍了,应该上手会容易一些了。博主也是新手,如有错误欢迎拍砖指正。

如您需要了解更多Docker相关的资讯或是技术文档可访问Docker技术社区;如您有更多的疑问请在Dcoker技术论坛提出,稍后会有专家进行答疑。

0
0
查看评论

Docker网络详解-二

title: Docker网络详解(二)——网络管理命令 date: 2015-11-29 19:54:17 tags: dockercategories: Docker Network在Docker中,网络是很重要的部分,之前写过一篇有关Docker的几种网络模式的文章:Docker之四种网络...
  • vchy_zhao
  • vchy_zhao
  • 2017-04-19 11:30
  • 840

Docker入门与实战讲解

简述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行...
  • relax_hb
  • relax_hb
  • 2017-04-08 14:53
  • 3595

docker build命令详解

docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像。 docker build命令的使用格式: docker build [OPTIONS] 1. 常用选项说明 --build-arg,设置构建时的变量 --no-cache,默认false。设置该选项,将...
  • taiyangdao
  • taiyangdao
  • 2017-05-12 13:36
  • 7716

Docker各种目录的作用

docker容器文件系统在宿主机上的存储目录
  • stpice
  • stpice
  • 2017-06-04 22:59
  • 976

docker数据驱动详解

目的 理解docker的存储方式docker的image和container在host上的目录结构docker image和container的内容与配置不同存储 Docker是一个开源的应用容器引擎,主要利用Linux内核namespace实现沙盒隔离,用Cgroup实现资源限制。Dock...
  • qq_28930109
  • qq_28930109
  • 2017-02-13 22:20
  • 237

Docker学习笔记(一)基本原理及概念

1.基本概念 Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或者数据库应用等等)及其运行环境能够做到“一...
  • u012299594
  • u012299594
  • 2016-08-28 10:06
  • 10206

Docker的安装配置及使用详解

基本概念Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 先理解了这三个概念,就理解了 Docker 的整个生命周期。1、docker安装与启动yum install -y epel-release yum install docker-i...
  • fgf00
  • fgf00
  • 2016-07-12 23:58
  • 62156

常用docker命令,及一些坑

常用docker命令,及一些坑 常用命令 查看容器的root用户密码 docker logs 2>&1 | grep '^User: ' | tail -n1 因为docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式...
  • wsscy2004
  • wsscy2004
  • 2014-05-15 11:11
  • 127274

docker配置文件详解

xiangjie
  • ghostyusheng
  • ghostyusheng
  • 2017-02-22 17:07
  • 1722

Docker Dockerfile详解

Docker官网教程笔记:Dockerfile 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7: dock...
  • wsscy2004
  • wsscy2004
  • 2014-05-15 11:09
  • 209272
    个人资料
    • 访问:45673次
    • 积分:567
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:15篇
    • 译文:0篇
    • 评论:4条
    最新评论