谈谈我对docker的理解

先给大家说下docker概念

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

Docker优势:

更快速的交付和部署(一次创建和配置,可以在任意地方正常运行)

更高效的虚拟化(不需要hypervisor支持,内核级虚拟化)

更轻松的迁移和扩展(在任意平台移植)

更简单的管理()

关于docker理解

一、首先是关于虚拟化

虚拟化我们可以简单的理解为一种资源管理方式。有如下几种虚拟化的方式:

1.完全虚拟化:对底层硬件实现完全的虚拟。例如:Vmware Workstation

2.部分虚拟化:只对部分硬件资源的虚拟。

3.操作系统级虚拟化:内核通过创建多个虚拟操作系统实例来隔离各个进程。

docker就是属于操作系统级的虚拟化。

二、其次是对docker的理解

docker的思想来源于集装箱,试问集装箱解决了什么问题?
试想,在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会相互影响。那么我就不需要专门运送水果的船和专门运送化学物品的船了。只要这些货物在集装箱里装的好好的,那我就可以用一艘大船把它们都运走。docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮,而docker就是集装箱。

Docker的优点:

1.更快速地交付和部署

不同的应用程序可能会有不同的应用环境。比如,.net开发的网站和.php开发的网站所依赖的软件就不一样,如果把他们所依赖的软件都安装在一个服务器上,就要调试很久,不仅麻烦,还会造成一些诸如IIS和Apache访问端口冲突这样的问题。这个时候你就要隔离.net开发的网站和.php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机并在不同的虚拟机上部署不同的应用,但是虚拟机开销比较大。此时docker就可以实现虚拟机隔离不同应用的这种功能,并且开销比虚拟机小,小就意味着省钱。

2.更轻松的迁移和扩展

我们再来举个简单的例子。比如你开发的时候用的是Ubuntu,但是运维管理的都是CentOS,运维在把你开发的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转CentOS的问题,比如:存在一个特殊版本的数据库,只支持Ubuntu而不支持CentOS,那么在转移的过程中就得想办法解决这样的问题。但这时候如果有docker,你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。

3.更高效的虚拟化和更简单的管理

在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会被有效的利用起来。而且Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

Docker的三个基本概念:

镜像、容器、仓库

三、Docker的三个基本概念的详解

1.镜像

Docker在英语当中的本意是“物件/码头工人”,docker容器的意思为物件的容器。关于镜像,举个简单的例子,我们经常安装的windows操作系统,先要从网上下载ISO镜像文件,经解压后才能安装和使用。Docker也是一样,我们要向创建docker容器,就需要创建容器的类似于ISO镜像文件的docker镜像文件。

2.容器

关于容器,大家肯定并不陌生。没错,docker容器就是来管理不同架构的应用程序的。从本质上来说,容器是从镜像创建的运行实例。容器与容器之间是相互隔离的,每个容器都是保证安全的平台。

3.仓库

仓库是集中存放镜像文件的场所,但是在这里要区分两个概念:仓库和仓库服务注册器。仓库注册服务器往往存放着多个仓库,每个仓库又包含着多个镜像。

仓库分为公开仓库和私有仓库,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快速的访问。

除此之外,用户可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。

小结:

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。

首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快的多。其次,Docker对系统资源的利用率很高,一台主机上可以同时运行千个Docker容器。

容器除了运行其中应用外,基本不消耗额外的系统资源,使的应用的性能很高,同时系统开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只需要启动10个隔离的应用即可。

以上所述是小编给大家介绍的我对docker的理解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • CentOS7 安装docker 解决启动不了的问题

    CentOS7安装docker 启动不了,在工作当中遇到这个问题,当时急的不清,网上资料又不多,不过经过自己的捣鼓终于解决了 这个问题! [root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redirecting to /bin/systemctl start docker.service Job for docker.service failed beca

  • Mac OSX系统 Docker启用Docker远程API功能

    在Mac OSX系统的Docker机上启用Docker远程API功能 Docker守护进程提供了一套远程REST API,具体可以参考文档: https://docs.docker.com/engine/reference/api/docker_remote_api/ 这套API是提供给客户端与Docker引擎通信时使用,这套API也可以由其他工具调用,比如curl或Chrome浏览器的Postman REST客户端工具. 如果是在Mac OSX Mavericks系统上使用Docker机创建D

  • 利用Docker制作Nginx+PHP镜像的步骤详解

    前言 这篇文章给大家介绍的是使用Docker制作nginx+php的镜像,本文里的镜像是centos + nginx 1.9.7 + php 5.6.14,下面话不多说,直接看实现的步骤吧. 1.首先下载到nginx和php: nginx-1.9.5.tar.gz 下载:http://nginx.org/en/download.html php-5.6.14.tar.gz   下载:>http://php.net/downloads.php 2.以及扩展包so: memcache-2.2.4.t

  • Docker 端口映射详细介绍

    Docker 端口映射: 最近抽空,把Docker 端口映射的资料整理了一下,以便后续项目应用,大家也可以参考下. # Find IP address of container with ID <container_id> 通过容器 id 获取 ip $ sudo docker inspect <container_id> | grep IPAddress | cut -d '"' -f 4 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的.此外

  • Ubuntu Docker 的安装部署及简单应用

    Docker直译为码头工人.当它成为一种技术时,做的也是码头工人的事.官网是这样描述它的:"Docker是一个开发的平台,用来为开发者和系统管理员构建.发布和运行分布式应用."也就是说,如果把你的应用比喻为货物,那么码头工人(Docker)就会迅速的用集装箱将它们装上船.快速.简单而有效率. 它是用Go语言写的,是程序运行的"容器"(Linux containers),实现了应用级别的隔离(沙箱).多个容器运行时互补影响,安全而稳定. 我喜欢它的原因就是快速部署,安

  • Docker 多主机网络通信详细介绍

    最近做项目是关于Docker 的网络通信,需要多个主机进行链接通信,这里记录下,以后便于项目开发,大家需要的话也可以看下,少走些弯路. Docker多主机网络通信详解              Docker支持多主机网络通信功能,可以通过命令行建立多主机通信网络.本文使用Docker machine和Consul服务发现工具来讲解这一点. 前提是需要先安装Docker工具箱. 1.Docker Multi-Host Networking 作为一个示例,我们会在VirtualBox虚拟机上使用do

  • Docker 容器内存监控原理及应用

    Docker 容器内存监控 linux内存监控 要明白docker容器内存是如何计算的,首先要明白linux中内存的相关概念. 使用free命令可以查看当前内存使用情况. [root@localhost ~]$ free total used free shared buffers cached Mem: 264420684 213853512 50567172 71822688 2095364 175733516 -/+ buffers/cache: 36024632 228396052 Sw

  • Docker使用Link在容器之间建立连接

    在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务.下面我们就来看看Docker是怎样通过Link来实现这种功能的. 1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java

  • 谈谈我对docker的理解

    先给大家说下docker概念 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal.OpenStack 集群和其他的基础应用平台. Docker优势: 更快速的交付和部署(一次创建和配置,可以在任意地方正常运行) 更高效的虚拟化(不需要hypervisor支持,内核级虚拟化) 更轻松的迁移和扩展(在任意平台移植) 更简单的管理() 关于docker理解

  • Docker的理解和基本命令详解

    如何通俗解释D ocker是什么? Docker思想来自于集装箱,集装箱解决了什么问题呢?比如,在一艘大船上,要把各种各样的货物要整理起来,集装箱(Docker)就可以做到,并且相互间不会影响.就不需要指定运输的船了(这个船运吃的那个船运穿的).只要把货物装在集装箱里封装好,就可以用一艘大船把他们都运走. 1.Docker就是类似的理念.云计算是运输船,Docker就是集装箱. 1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的

  • 谈谈你对aja的理解(一、二)

    什么是Ajax Ajax是Asynchronous JavaScript and XML的缩写,这一技术能够向服务器请求额外的数据而无需卸载整个页面,会带来良好的用户体验.传统的HTTP请求流程大概是这样的,浏览器向服务器发送请求-〉服务器根据浏览器传来数据生成response-〉服务器把response返回给浏览器-〉浏览器刷新整个页面显示最新数据,这个过程是同步的,顺序执行. AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求)从服务器获取数据,这里的异步是指脱离当前浏

  • 谈谈JavaScript中function多重理解

    JavaScript 中的 function 有多重意义.它可能是一个构造器(constructor),承担起对象模板的作用: 可能是对象的方法(method),负责向对象发送消息.还可能是函数,没错是函数,和对象没有任何关系独立存在的可以被调用的函数. 由于语言设计者的妥协,在 JavaScript 加入了一些 class 相关的特性,以使 JavaScript 看起来确实象 Java,可以 "面向对象".虽然 JavaScript 添加了 new 和 this, 但却没有 clas

  • 谈谈对offsetleft兼容性的理解

    关于此属性的基本用法可以参阅offsetleft属性用法详解一章节. 此属性具有一定的兼容性问题,那就是在IE7浏览器中,它的返回值是想对于最近的父辈元素的左侧的距离. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" />

  • 深入理解docker容器中的uid和gid

    默认情况下,容器中的进程以 root 用户权限运行,并且这个 root 用户和宿主机中的 root 是同一个用户.听起来是不是很可怕,因为这就意味着一旦容器中的进程有了适当的机会,它就可以控制宿主机上的一切!本文我们将尝试了解用户名.组名.用户 id(uid)和组 id(gid)如何在容器内的进程和主机系统之间映射,这对于系统的安全来说是非常重要的.说明:本文的演示环境为 ubuntu 16.04(下图来自互联网). 先来了解下 uid 和 gid uid 和 gid 由 Linux 内核负责管

  • Docker 容器虚拟化的实用技巧总结

    服务器虚拟化指的是在操作系统与硬件之间加一层,叫做hypervisor层,对下控制硬件,对上承载操作系统,操作系统os以文件形式封装运行,称为虚拟机,主要解决的问题是硬件利用率和灵活性的问题,常见的方案为vmware vsphere,xen,kvm,hyper-v..容器虚拟化指的是在os上将应用打包以进程的形式运行,应用和应用间非完全隔离,但是更轻量,效率高,lxc和docker都可以称为容器级虚拟化,区别在于docker可以理解为经过精美封装过更加好用的lxc,有更好的接口和更完善的配套.

  • Docker 实现浏览器里开发Android应用的功能

    在浏览器里开发Android应用          这里需要用到Docker的知识, Che 发布后对Android应用开发多了一个工具,这里就对如何实现该功能就行详细介绍: Eclipse Che 最近Che发布了正式版,那我就介绍下在Che上开发Android吧-- 使用Che需要懂得一些Docker的知识,只需要一点点即可,因为Che是基于Docker的,所以了解Docker有助于理解Che的工作方式. 不废话,教程只有四步,开始. 第一步:部署docker服务器 我选择的是digital

  • 关于js里的this关键字的理解

    this关键字在c++,java中都提供了这个关键字,在刚开始学习时觉得有难度,但是只要理解了,用起来就方便多了,下面通过本篇文章给大家详解js里this关键字的理解. 关于this,是很多前端面试必考的题目,有时候在网上看到这些题目,自己试了一下,额,还真的错了!在实际开发中,也会遇到 this 的问题(虽然一些类库会帮我们处理),例如在使用一些框架的时候,例如:knockout,有时候不明白为什么不直接使用this,而要把 this 作为参数传入. 接下来你谈谈我对它的理解,也作为一个笔记,

  • docker容器从入门到痴迷(推荐)

    1. docker 是什么 大家都知道虚拟机吧,windows 上装个 linux 虚拟机是大部分程序员的常用方案.公司生产环境大多也是虚拟机,虚拟机将物理硬件资源虚拟化,按需分配和使用,虚拟机使用起来和真实操作系统一模一样,当废弃不用时直接删除虚拟机文件即可回收资源,很方便集中管理. 由于虚拟机非常庞大,同时对硬件资源的消耗也大,linux 发展出了另一种虚拟化技术,即 linux 容器(Linux Containers,缩写为 LXC),它并不像虚拟机那样模拟一个完整的操作系统,却提供虚拟机

随机推荐