2019年3月

啥是docker?

了解docker之前,先让我们了解几个概念:

  • 虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟的计算机资源提供给程序使用的技术。
  • 知道一点计算机原理:程序对计算机资源的调用主要依赖于操作系统所给出的接口。我们的程序通过操作系统提供的接口,向物理硬件发送指令。
  • 为程序跨平台兼容而生,要实现程序跨平台兼容的方法其实很简单,只要操作系统或者物理硬件所提供的接口调用方式一致,程序便不需要兼容不同硬件平台的接口,而只需要针对这一套统一的接口开发即可。
  • 将虚拟化应用于资源管理,虚拟化技术能够提高计算机资源的使用率,是指利用虚拟化,我们可以将原来程序用不到的一些资源拿出来,分享给另外一些程序,让计算机资源不被浪费。这里要注意了,我们所说的是提高计算机资源使用率,而非减少程序资源的占用率,这两者看似很相近,其实并非是同一个概念。
  • 虚拟机,通常来说就是通过一个虚拟机监视器 ( Virtual Machine Monitor ) 的设施来隔离操作系统与硬件或者应用程序和操作系统,以此达到虚拟化的目的。这个夹在其中的虚拟机监视器,常常被成为 Hypervisor。
  • 容器技术,指的是操作系统自身支持一些接口,能够让应用程序间可以互不干扰的独立运行,并且能够对其在运行中所使用的资源进行干预。由于应用程序的运行被隔离在了一个独立的运行环境之中,这个独立的运行环境就好似一个容器,包裹住了应用程序,这就是容器技术名字的由来。

再谈docker:Docker 项目是一个由 Go 语言实现的容器引擎,它最初由 dotCloud 这家做云服务的公司在 2013 年开源。使用 Docker 后,开发者能够在本地容器中得到一套标准的应用或服务的运行环境,由此可以简化开发的生命周期 ( 减少在不同环境间进行适配、调整所造成的额外消耗 )。

Docker 的实现,主要归结于三大技术:命名空间 ( Namespaces ) 、控制组 ( Control Groups ) 和联合文件系统 ( Union File System ) 。

  • Linux 内核的命名空间,就是能够将计算机资源进行切割划分,形成各自独立的空间。Linux Namespaces 可以分为很多具体的子系统,如 User Namespace、Net Namespace、PID Namespace、Mount Namespace 等等。
  • 资源控制组的作用就是控制计算机资源的。虚拟化除了制造出虚拟的环境隔离同一物理平台运行的不同程序之外,另一大作用就是控制硬件资源的分配,CGroups 的使用正是为了这样的目的。
  • 联合文件系统 ( Union File System ) 是一种能够同时挂载不同实际文件或文件夹到同一目录,形成一种联合文件结构的文件系统。AUFS(Advanced Union File System ) 将文件的更新挂载到老的文件之上,而不去修改那些不更新的内容,这就意味着即使虚拟的文件系统被反复修改,也能保证对真实文件系统的空间占用保持一个较低水平。

Docker的理念:Docker 推崇一种轻量级容器的结构,即一个应用一个容器。

Docker核心组成

  • 镜像:所谓镜像,可以理解为一个只读的文件包,其中包含了虚拟环境运行最原始文件系统的内容。
  • 容器:如果把镜像理解为编程中的类,那么容器就可以理解为类的实例。镜像内存放的是不可变化的东西,当以它们为基础的容器启动后,容器内也就成为了一个“活”的空间。容器由三项组成:一个 Docker 镜像;一个程序运行环境;一个指令集合。
  • 网络:网络通讯是目前最常用的一种程序间的数据交换方式。在 Docker 中,实现了强大的网络功能,我们不但能够十分轻松的对每个容器的网络进行配置,还能在容器间建立虚拟网络,将数个容器包裹其中,同时与其他网络环境隔离。
  • 数据卷:文件也是重要的进行数据交互的资源。在 UnionFS 的加持下,除了能够从宿主操作系统中挂载目录外,还能够建立独立的目录持久存放数据,或者在容器间共享。在 Docker 中,通过这几种方式进行数据共享或持久化的文件或目录,我们都称为数据卷 ( Volume )。
  • Docker Engine:工业级的容器引擎 ( Industry-standard Container Engine )。在 Docker Engine 中,实现了 Docker 技术中最核心的部分,也就是容器引擎这一部分。
  • docker daemon 和 docker CLI:所有我们通常认为的 Docker 所能提供的容器管理、应用编排、镜像分发等功能,都集中在了 docker daemon 中,而我们之前所提到的镜像模块、容器模块、数据卷模块和网络模块也都实现在其中。在 docker daemon 管理容器等相关资源的同时,它也向外暴露了一套 RESTful API,我们能够通过这套接口对 docker daemon 进行操作。在 Docker Engine 里还直接附带了 docker CLI 这个控制台程序用以控制docker daemon。docker daemon 和 docker CLI 所组成的,正是一个标准 C/S ( Client-Server ) 结构的应用程序。

好了,废话说完了,开始我们快乐的使用docker吧!(这里只讲一下mac的操作方法。)

mac桌面下载地址