【PHP】学习Docker之前,先搞懂这几个问题

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) 。

【PHP】学习Docker之前,先搞懂这几个问题

3 Docker有什么优点

轻量资源使用:

相对于虚拟化整个操作系统,容器只是在流程级别进行隔离,使用的还是主机内核kernel.

可移动:

应用的所有依赖都打包到容器内部,这样可以运行在任何支持Docker的主机系统上。

可预测:

主机并不关心容器内部运行什么,容器也不关系主机运行在什么平台上,是单机还是云平台都不关心,这些接口都是标准的,因此它们之间的交互行为都是可以预期的。

简化程序:

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

避免选择恐惧症:

如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

节省开支:

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

4 虚拟机与容器的区别

【PHP】学习Docker之前,先搞懂这几个问题

以KVM举例,与Docker对比

  • 启动时间

    • Docker秒级, KVM分钟级。
  • 轻量级

    • 容器镜像大小通常以M为单位,虚拟机以G为单位。

    • 容器资源占用小,要比虚拟机部署更快速。

  • 性能

    • 容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机;

    • 虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。

  • 安全性

    • 由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全隐患。
  • 使用要求

    • KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持;

    • 容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。

5 Docker的应用场景有哪些

  • 应用打包与部署自动化

    • 构建标准化的运行环境;

    • 现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。

  • 自动化测试和持续集成/部署

    • 自动化构建镜像和良好的REST API,能够很好的集成到持续集成/部署环境来。
  • 部署与弹性扩展

    • 由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。
  • 微服务

    • Docker这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性。

点关注,不迷路

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。之前说过,PHP方面的技术点很多,也是因为太多了,实在是写不过来,写过来了大家也不会看的太多,所以我这里把它整理成了PDF和文档,如果有需要的可以

点击进入暗号: PHP+「平台」

【PHP】学习Docker之前,先搞懂这几个问题

【PHP】学习Docker之前,先搞懂这几个问题


更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的 PHP技术交流群

【PHP】学习Docker之前,先搞懂这几个问题

上一篇:JWT(JSON Web Token)简介


下一篇:LeetCode 445. 两数相加 II(Add Two Numbers II)