精选 学习Docker之前先搞懂这几个问题

2020-12-13 18:00 PHP自学中心

文章来自:https://www.cnblogs.com/nnnnnn/p/10648225.html

作者:博客园

点击加入:PHP自学中心技术交流微信群


商务合作: 请加微信(QQ):2230304070



精选文章正文

视频教程推荐:【Docker技术入门与应用实战 
链接: http://www.mano100.cn/thread-418-1-1.html



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自学中心 ,学习与交流少不了一个圈子,点击加技术群:PHP自学中心交流②群


本文章转载自公众号:phpCenter

首页 - PHP 相关的更多文章: