介绍
- Docker 是世界领先的软件容器平台
Docker 使用Google公司推出的GO语言进行开发实现,基于Linux内核的cgroup,namespace。以及AUFS累的unionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟技术,由于隔离的进程独立于宿主和其他的隔离进程因此也称其为容器,Docker最初实现是基于LXC
基本概念
docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源
docker 可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化
容器完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销较低
docker从17.03版本之后,分为CE(社区版)和EE(企业版),咱们用社区版就可
应用场景
web 应用的自动化打包和发布
自动化测试和持续集成,发布
从服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的openshift或者什么环境(不懂)docker的优点
docker是一个用于开发,交付和运行应用程序的开放平台,docker能够将应用程序与基础架构分开,从而可以快速交付软件,借助docker,可以与管理应用程序相同的方式管理基础架构,通过利用docker的方法来快速交付,测试和部署代码,可以大大减小编写代码和在生产环境中运行代码之间的延迟
快速,一致地交付您地应用程序
docker允许开发人员使用您提供地应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期,
容器非常适合持续集成和持续交付(CI/CD)工作流程,示例:
a. 开发人员在本地编写代码,并使用docker容器与同事共享他们的工作
b. 使用docker将应用程序推送到测试环境中,并执行自动或手动测试
c. 当开发人员发现错误时,他们呢可以在开发环境中最其及逆行修复,然后将其重新部署到测试环境中,以进行测试和验证
d. 测试完成后,将修补程序推同给生产环境,就像将更新的镜像推送到生产环境一样简单
- 响应式部署和扩展
docker是基于容器的平台,允许高度可移植的工作负载,docker容器可以在开发人员的本集中,数据中心的物理或虚拟机上,云服务或混合环境中运行,
docker 的可移植性和轻量级的特性,还可以轻松的完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务
- 在同一硬件上运行更多工作负载
docker 轻巧快速,他为基于虚拟机管理程序的虚拟机提供了可行,经济,高效的替代方案,因此可以利用更多的计算能力来实现业务目标,docker非常适合于高密度环境以及中小型部署,可以用更少的资源,做更多的事
docker架构
docker的三个概念
镜像:image, 容器:container,仓库:reppsitory
可以理解为image,是docker一个只读的静态模板,类似于我们呢装系统的时候用到的.iso文件,而container则是一个动态的instance(实例),或者可以理解为为我们装好了系统之后的某一台计算机,可以开机,关机,等等,如果我们想在另外一台计算机上复现我这台计算机的系统,则可以ghost一个新的镜像,然那后去安装
镜像(image)
操作系统分为内核和用户空间,对于linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持,而docker的镜像,就相当于root文件系统(每开一个,就有一个独立的用户空间)
docker设计时,就充分利用union FS 的技术,将其设计为分层存储的架构,
镜像构建时,会一层层构建,前一层时后一层的基础,每一层构建完就不会在发生改变,后一层上的改变只发生再自己这一层,比如删除前一层的文件,实际不会真的删除前一层的文件,而是仅在当前层标记为该文件以删除,在最终容器运行的时候,虽然不会看到文件,但是实际上该文件会一直跟随镜像,因此,在构建镜像的时候,需要二外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在构建该层结束前清理掉
容器 (container)
镜像和容器的关系,就像是面对对象设计中的类和实例一样,镜像是静态的类,容器时镜像运行时的实体,容器可以被创建,启动,删除,停止,等,容器实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间
容器也是分层存储,容器不应该向其他存储层内写入任何数据,容器存储层要保持无状态化,所有的文件写入操作,都应该使用数据卷(Colume),或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主发生读写,其性能和稳定性更高,
仓库 (Repository)
可以不构建后的镜像上传到服务器,而从可以在任何地方使用到这个镜像
docker 使用客户端-服务端(c/s)架构模式,使用远程API来管理和创建docker容器
docker 容器通过docker镜像来创建
概述
镜像(images):docker镜像是用于创建docker容器的模板比如 ubuntu系统
容器(container):容器时独立运行的一个或一组应用,是镜像运行时的实体
客户端(client):docker客户端通过命令行或者其他工具使用docker SDK 与docker的守护进程通信
主机(Host):一个物理或者虚拟的机器用于执行docker守护进程和容器
docker Registry:
docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库
docker Hub提供了庞大的镜像集合供使用
一个docker Registry中可以包含多个仓库(repository),每个仓库可以包含多个标签(Tag),每个标签对应一个镜像
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本,我们呢可以通过<仓库>:<标签>的格式来指定具体是这个软件哪个版本的镜像,如果不给出标签,将以latest(最新)最为默认标签
docker machine:是一个简化docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装docker,比如 Virtualbox,digital Ocean
虚拟机比较
Docker是一种虚拟化技术的产品,属于一种“容器”,“容器”这个东西有点像虚拟机,但是又很大的不同,理解容器和虚拟机的区别,最重要的一点,做一下对比
容器就是将软件打包成标准化单元,以便于开发,交付和部署,
区别
计算机简单模糊分一下层次,最底层是硬件,最上层是软件,中间的是操作系统,
虚拟机
虚拟机就是在物理硬件层抽象,运行在硬件之上:它向下 面对一套硬件和硬件接口,对其进行虚拟,然后向上 提供一套独立的操作系统,然后就可以在操作系统之上再运行各种软件等
这就导致虚拟机的非常庞大沉重,(因为包含了一整套操作系统,一般都好几G,还可能又一套单独的存储空间),启动时间长(好几分钟,又SSD固态硬盘不算),并且不容易移植,(再安装操作系统的时候,会根据硬件的不同,编译出不同的内核,每台电脑的硬件配置几乎不会完全一样,因而直接把一台电脑的操作系统文件拷贝到另外一台一般是没办法启动的)
容器
容器是一个应用层抽象,运行在操作系统之上的,确切的说是操作系统内核之上,面对的是操作系统提供的接口,属于进程级别,容器对我们的代码和依赖进行打包,比如一个docker只有一个python3,还有TensorFlow以及其他的package包。这样体积小,启动快,且容易移植,不同的硬件上的统一操作系统向上提供相同的接口