Docker简介

在这里插入图片描述

Docker是什么

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

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

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

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

为什么要使用Docker?

1.合作开发的时候,在本机可以跑,别人的电脑跑不起来。

这里我们拿java Web应用程序举例,我们一个java Web应用程序涉及很多环境,比如jdk、tomcat、spring等等。当该应用程序需要在别的电脑上运行,则该电脑要安装好所需的环境。当这些环境中某一项版本不一致的时候,可能就会导致应用跑不起来。而如果使用Docker则可以直接将应用程序和环境(所需的依赖)打包成镜像,这时哪台电脑需要跑该应用程序则直接从仓库中拉取镜像,直接运行在容器中即可。

2.服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了。

这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。

3.公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器。

在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就跑多少容器,极大地提高了部署效率。

Docker与虚拟机的区别

关于Docker与虚拟机的区别,我在网上找到的一张图,非常直观形象地展示出来,话不多说,直接上图。在这里插入图片描述在这里插入图片描述
比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker是不携带操作系统的,所以Docker的应用就非常的轻巧。

另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用Hypervisor(管理程序)去虚拟化内存,整个调用过程是虚拟内存->虚拟物理内存->真正物理内存,但是Docker是利用Docker Engine(引擎)去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。

Docker的优点

1.简化程序。

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2.避免选择恐惧症。

如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3.节省开支。

.一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker的不足

  1. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用(即使可以在其上安装,不过也是基于Linux虚拟机的)
  2. Docker实例(容器)是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。
  3. Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。
  4. 容器随着用户进程的停止而销毁,容器中的log等用户数据不便收集。
  5. Docker对disk(磁盘)的管理比较有限。
  6. 网络管理相对简单,主要是基于namespace隔离。
  7. LXC是基于cgroup等linux kernel(核心)功能的,因此容器的guest系统只能是linux base的。
  8. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container(容器)公用一部分的运行库.。
  9. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值