I Docker
来自于百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
这也太拗口了吧,什么是容器?什么是引擎?其实弄懂虚拟化、沙箱机制就大概有头绪了。
我是学安全的,从OS就开始接触虚拟化和沙箱机制。沙箱就是一个限制应用程序对系统资源的访问的运行环境,提供的环境相对于每一个运行的程序都是独立的,JVM、EVM(以太坊的虚拟机)都是沙箱机制。虚拟化相对而言抽象一些,OS老师说过“将资源虚拟为多个逻辑上的独立资源”,虚拟专用网、VM都是虚拟化的。两者的关系在于:沙箱机制的实现离不开资源的虚拟化。
而Docker就是一种比较新颖的虚拟化技术,相比较于虚拟机,它由更多优势,使用别人的表:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般是几十个 |
接下来就是容器,这个就很少接触了,唯一有印象的就是STL的container,STL是这么解释的“容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。”,Docker的容器也很类似,都是一套模板,STL的容器模板里面存放的是变量和方法,而Docker的容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。
总结:Docker
将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker
,就不用担心环境问题。
II 三大概念
有了上面基础,理解三个概念就很简单了
Image
(镜像)Container
(容器)Repository
(仓库)
镜像是 Docker
运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker
的核心。(以下摘自https://blog.csdn.net/bskfnvjtlyzmv867/article/details/81044217)
镜像(Image)
镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库(Repository)
仓库,从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载。镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
III 安装
因为我是Win10,所以就简单说一下Win10安装,这个之前浪费了一晚时间。
1、开启 Hyper-V:单击开始-》控制面板-》程序和功能-》启用或关闭Windows功能-》选中Hyper-V开启
2、下载 Toolbox并安装(https://www.docker.com/get-docker)
3、镜像加速,安装完之后,双击运行,进入设置
进行修改
4、运行: