zoukankan      html  css  js  c++  java
  • 【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) 。

    在这里插入图片描述

    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+「平台」

    在这里插入图片描述

    在这里插入图片描述


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

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

  • 相关阅读:
    js 判断是否包含
    react-navigation-easy-helper
    mobx 小结
    react native使用 mobx , can't find variable:Symbol
    react-native 极光推送(jpush-react-native)
    react-native 启动页(react-native-splash-screen)
    react-native Android 全面屏手机 底部留有一大块黑屏
    RAP + MOCK
    ES7新特性
    POP动画[2]
  • 原文地址:https://www.cnblogs.com/it-abu/p/14175443.html
Copyright © 2011-2022 走看看