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技术交流群

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/it-abu/p/14175443.html
Copyright © 2011-2022 走看看