docker容器基础入门
传统的应用部署过程大概是:下载软件->编译安装->启动软件,比如现在要安装 LNMP 软件,就得先下载Nginx+Mysql+PHP,然后一个个安装,这对于一两台服务器时还能接受,要是面对成千上万的服务器集群,还不得累死吗,有没有办法把这几个软件打包成一个软件一次性安装呢,容器的出现使得很好的解决了这类问题。
什么是容器?
(1)在生活领域容器(Container)的概念
容器是一种基础工具,泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器则可以保护内容物。
人类使用容器的历史至少有十万年,甚至可能有数百万年的历史,所以容器并不是一个新的概念
容器的类型:瓶、罐、箱、蓝、桶、袋、翁、碗、柜、鞘等等,这些都是容器,但这不是我们的重点。
(2)而在计算机领域:
容器(container)以一种特定的格式来打包软件,这种格式可以各自独立的运行在同一个操作系统之上,不像虚拟机,容器不会捆绑一个完整的操作系统,而仅仅打包软件运行所需要的依赖库和设置。这样可以实现一个高效、轻量级、自给自足的系统,并且可以保证软件总是以相同的方式运行,而不管它被部署在哪里。
所以从上可知,容器是一种打包应用的方式,可以帮你打包应用中的所有软件和软件所依赖的环境,并且可以实现跨平台部署。相比虚拟机,容器更高效和轻量化,一台服务器运行1000个虚拟机基本是难以想象的,但IBM的服务器据称已经在一台服务器上运行万级的容器。
容器和虚拟化的区别?
对于虚拟化来说就是通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上。因此,对于主机级虚拟化,我们的实现方式一般是想办法去模拟出硬件环境,模拟出虚拟的cpu、内存、硬盘、网卡等资源,然后在这些虚拟资源之上安装合适的操作系统来控制这些资源。
如上图所示,在VMM(又叫做hypervisor)之上,可以模拟出逻辑的计算机虚拟环境,然后安装操作系统,使其成为一台逻辑上虚拟的计算机主机(简称虚拟机),该主机有自己的系统内核,有自己的用户空间,可以在自己的用户空间内跑各种各样的应用程序。虚拟机与虚拟机之间是完全隔离的,也就是说一台虚拟机上运行的进程与其他虚拟机上运行的进程是互不干扰的,所以隔离性也是虚拟化所追求的一个目标。
所以对于虚拟化来说存在以下几个缺点
1)资源占用多
虚拟机会独