1. docker 是什么
大家都知道虚拟机吧,windows 上装个 linux 虚拟机是大部分程序员的常用方案。公司生产环境大多也是虚拟机,虚拟机将物理硬件资源虚拟化,按需分配和使用,虚拟机使用起来和真实操作系统一模一样,当废弃不用时直接删除虚拟机文件即可回收资源,很方便集中管理。
由于虚拟机非常庞大,同时对硬件资源的消耗也大,linux 发展出了另一种虚拟化技术,即 linux 容器(Linux Containers,缩写为 LXC),它并不像虚拟机那样模拟一个完整的操作系统,却提供虚拟机一样的效果。如果说虚拟机是操作系统级别的隔离,那么容器就是进程级别的隔离,可以想象这种级别隔离的优点,无疑是快速的,节省资源的。
docker 就是对 linux 容器的封装,提供简单实用的用户接口,是目前最流行的 linux容器解决方案。
下面是百科的定义:
docker 是基于 Go 语言的开源的应用容器引擎,并遵从Apache2.0协议,docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
2. docker 解决什么问题
2.1. 解决虚拟机资源消耗问题。
服务器操作系统之上运行着虚拟机,虚拟机上运行着客户操作系统,客户操作系统之上运行着用户的应用程序,一台服务器 80% 的资源开销都花费在了硬件虚拟化和客户机操作系统本身。
图1. 虚拟机架构与容器架构区别
如图 1 所示,如果采用 docker 容器技术,容器上运行着虚拟服务器,虚拟服务器中运行着用户的应用程序,虚拟服务器和服务器操作系统使用同一内核,虚拟服务器的文件系统使用物理服务器的文件系统,但做了隔离,看上去每个虚拟服务器都有自己独立的文件系统;在物理服务器上建立了虚拟网桥设备,每个虚拟服务器通过虚拟网桥设备连接网络。虚拟服务器直接使用物理服务器的CPU、内存、硬盘,并不对硬件进行虚拟化,因此没有硬件虚拟化和客户机操作系统占用的资源消耗,每一台虚拟服务器的性能接近于物理服务器性能。
一台普通家用电脑运行一个 Linux 虚拟机可能已经非常卡,但是却可以使用 docker 虚拟出几十甚至上百台虚拟的 linux 服务器。如果换成性能强劲的服务器,使用 docker 就可以提供私有云服务了。
2.2. 快速部署。
软件开发的难题在于环境配置,在自己电脑上运行的软件,换一台机器可能就无法运行,除非保证操作系统的设置正确,各种组件和库的正确安装。比如部署一个 Java 开发的 web 系统,计算机必须安装 Java 和正确的环境变量,可能还需要安装 tomcat、nginx。换台机器部署就要重来一次。
使用 docker 可以将应用程序及依赖打包在一个文件里(docker 镜像文件),运行这个文件就会启动虚拟服务器,在虚拟服务器启动应用程序或服务,就像在真实在物理机上运行一样,有了 docker,就可以一次部署,处处运行,也可以用于自动化发布。
2.3. 提供一次性的环境。
比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境,启动或关闭一个虚拟服务器就像启动或关闭一个进程一样简单和快速。
2.4. 提供弹性的云服务。
因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
2.5. 组建微服务架构。
通过多个容器,一台机器可以跑很多个虚拟服务器,因此在一台机器上就可以模拟出微服务架构,也可以模拟出分布式架构。
3. 理解 docker架构
使用前先了解下 docker 的架构,如下图所示:
docker 架构图
- docker 镜象(image) 是存放在 docker 仓库(Registry)的文件,是用于创建 docker 容器 的模板。
- docker 容器 是独立运行的一个或一组应用,可以理解为前述介绍的虚拟服务器。
- docker 主机 是一个物理或者虚拟的机器用于执行 docker 守护进程和容器。
- docker 客户端 通过命令行或者其他工具使用 docker API 与 docker 的守护进程通信。
作为用户,我们直接使用的是 docker 客户端。
原文链接:https://www.cnblogs.com/a-wyw/p/16300415.html