Docker 入门学习
Docker 简介
----------------
Docker 是一个应用程序,使用 Go 语言编写,基于 Linux 容器(LXC)设计思想。Docker 容器可以理解为一种轻量级的沙盒,每一个沙盒内运行着自己独有操作系统或者应用程序,相互隔离,容器之间可以通过网络互相通信。Docker 容器的特点:轻量、简单、易于管理、易于迁移。
Docker 历史
------------
Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立。Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker” 。Docker 就是这样诞生的!
Docker 核心概念
-----------------
### 镜像(Image)
镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
### 容器(Container)
镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
### 仓库(Repository)
仓库是集中存放镜像文件的地方。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
Docker 虚拟化技术和虚拟机(VM)对比
--------------------------------------
### 从虚拟化角度
传统的虚拟技术,在将物理硬件虚拟成多套硬件后,需要再每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。而 Docker 容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker 引擎将一些各自独立的应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核。
### 从部署角度
传统方式是将所有应用直接部署在同一个物理机器节点上,这样每个 App 的依赖都是完全相同的(共用一个 ENV),无法做到 App 之间隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式(多个 VM 多个 ENV)来将 App 部署到其中,但这样太过繁重。现在我们通过部署 Container 容器的技术来部署应用,全部 Container(独立 ENV)运行在容器引擎上即可。