1 什么是Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。
思想:集装箱、标准化、隔离
核心:镜像、容器、仓库
1) 镜像-复制的程序
定义
Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
作用
类似于虚拟机的快照,用来创建新的容器。
特点:
镜像不包含任何动态数据,其内容在构建之后也不会被改变。
2)容器-集装箱
运行程序的地方
镜像是静态的,每一层都只是可读的,而容器是动态的,里面运行着我们指定的应用。
3)仓库-存放镜像的地方
存放镜像的地方,和git类似
用docker运行一个程序的过程,简单的可以这么理解:去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。
2 Docker架构与内部组件
LXC: Linux容器技术,共享内核,容器共享宿主机资源,使用namespace和cgroups对资源限制与隔离。
Cgroups( control groups): Linux内核提供的一种限制单进程或者多进程资源的机制;比如CPU、内存等资源的使用限制。
NameSpace:命名空间,也称名字空间, Linux内核提供的一种限制单进程或者多进程资源隔离机制;一个进程可以属于多个命名空间。 Linux内核提供了六种NameSpace: UTS、 IPC、 PID、 Network、 Mount和User。
AUFS( advanced multi layered unification filesystem):高级多层统一文件系统,是UFS的一种,每个branch可以指定readonly( ro只读)、 readwrite(读写)和whiteout-able( wo隐藏)权限;一般情况下, aufs只有最上层的branch才有读写权限,其他branch均为只读权限。
UFS( UnionFS):联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟文件系统的一个分支( branch) 。
3 Docker有什么优点
轻量资源使用:
相对于虚拟化整个操作系统,容器只是在流程级别进行隔离,使用的还是主机内核kernel.
可移动:
应用的所有依赖都打包到容器内部,这样可以运行在任何支持Docker的主机系统上。
可预测:
主机并不关心容器内部运行什么,容器也不关系主机运行在什么平台上,是单机还是云平台都不关心,这些接口都是标准的,因此它们之间的交互行为都是可以预期的。
简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
4 虚拟机与容器的区别
以KVM举例,与Docker对比
-
启动时间
- Docker秒级, KVM分钟级。
-
轻量级
-
容器镜像大小通常以M为单位,虚拟机以G为单位。
-
容器资源占用小,要比虚拟机部署更快速。
-
-
性能
-
容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机;
-
虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
-
-
安全性
- 由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全隐患。
-
使用要求
-
KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持;
-
容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。
-
5 Docker的应用场景有哪些
-
应用打包与部署自动化
-
构建标准化的运行环境;
-
现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。
-
-
自动化测试和持续集成/部署
- 自动化构建镜像和良好的REST API,能够很好的集成到持续集成/部署环境来。
-
部署与弹性扩展
- 由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。
-
微服务
- Docker这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。之前说过,PHP方面的技术点很多,也是因为太多了,实在是写不过来,写过来了大家也不会看的太多,所以我这里把它整理成了PDF和文档,如果有需要的可以
更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的 PHP技术交流群