写点什么

Docker 的三言两语 - 基础篇

发布于: 2021 年 03 月 04 日
Docker的三言两语-基础篇

初识 docker 与镜像

是啥

常说的docker,指的是容器化技术,用于支持创建和使用 linux 容器。

linux容器能够让用户对应用以及其整个运行时的环境,一起进行打包或隔离。从而可以在不同的环境(例如开发、测试、生产等环境)之间轻松迁移应用。同时还可保留应用的全部功能。

有啥用

借助 docker,可将容器当做轻巧、模块化的虚拟机使用。可以获得高度的灵活性,从而实现对容器的高效创建、部署及复制。并能从一个环境顺利迁移到另一个环境。


原理

  • 使用 linux 内核和内核功能(例如 Cgroups 和 namespace)来分隔进程,以便个进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性

  • 可提供基于镜像的部署模式。这使其能跨多种环境,与其依赖程序共享应用或服务组。docker 还可以在这一容器环境中自动部署应用(或者合并多种流程,以构建单个应用)。

  • 由于这些工具基于 Linux 容器构建,使得 Docker 既易于使用,又别具一格——它可为用户提供前所未有的高度应用程访问权限、快速部署以及版本控制和分发能力。


docker 与传统的 linux 容器

docker 与传统 linux 容器是有区别的。docker 最初是基于 LXC 技术的(大多数人都会将这一技术与“传统的”Linux 容器联系在一起)。但后来它逐渐摆脱了对这种技术的依赖。就轻量级 虚拟化 这一功能来看,LXC 非常有用,但它无法提供出色的开发人员或用户体验。除了运行容器之外,Docker 技术还具备其他多项功能,包括简化用于构建容器、传输镜像以及控制镜像版本的流程。



传统的 Linux 容器使用 init 系统来管理多种进程。这意味着,所有应用都作为一个整体运行。与此相反,Docker 技术力争让应用各自独立运行其进程,并提供相应工具,帮助实现这一功能。这种精细化运作模式自有其优势。


容器与虚拟化

容器与虚拟化为互补关系。

  • 虚拟化使得操作系统(Windows 或 Linux)可同时在单个硬件系统上运行。

  • 容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。例如:ARM Linux 系统运行 ARM Linux 容器,x86 Linux 系统运行 x86 Linux 容器,x86 Windows 系统运行 x86 Windows 容器。Linux 容器具有极佳的可移植性,但前提是它们必须与底层系统兼容。


虚拟化会使用虚拟机监控程序模拟硬件,从而使多个操作系统能够并行运行。但这不如容器轻便。


为啥用了都说好


模块化

Docker 容器化方法非常注重在不停止整个应用的情况下,单独截取部分应用进行更新或修复的能力。除了这种基于微服务的方法,您还可以采用与面向服务的架构(SOA)类似的使用方法,在多个应用间共享进程。


层和镜像版本控制

每个 Docker 镜像文件都包含多个层。这些层组合在一起,构成单个镜像。每当镜像发生改变时,就会创建一个新的镜像层。用户每次发出命令(例如 runcopy)时,都会创建一个新的镜像层。


Docker 重复使用这些层来构建新容器,借此帮助加快流程构建。镜像之间会共享中间变化,从而进一步提升速度、规模以及效率。版本控制是镜像层本身自带的能力。每次发生新的更改时,您大都会获得一个内置的更改日志,实现对容器镜像的全盘管控。


回滚

回滚也许是层最值得一提的功能。每个镜像都拥有多个层。举例而言,如果您不喜欢迭代后的镜像版本,完全可以通过回滚,返回之前的版本。这一功能还支持敏捷开发方法,帮助持续实施集成和部署(CI/CD),使其在工具层面成为一种现实。


快速部署

启动和运行新硬件、实施部署并投入使用,这在过去一般需要数天时间。投入的心力和成本往往也让人不堪重负。基于 Docker 的容器可将部署时间缩短到几秒。通过为每个进程构建容器,您可以快速将这些类似进程应用到新的应用程序中。而且,由于无需启动操作系统即可添加或移动容器,因此大幅缩短了部署时间。除此之外,得益于这种部署速度,您可以轻松无虞、经济高效地创建和销毁容器创建的数据。


因此,Docker 技术是一种更加精细、可控、基于微服务的技术,可为企业提供更高的效率价值。


有啥缺点


大规模 docker 导致管理困难

Docker 本身非常适合用于管理单个容器。但随着使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得非常困难。最终,需要后退一步,对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务。于是,Kubernetes 应运而生。


安全问题

有些其它 Linux 子系统和设备也未指定命名空间。它们包括 SELinux、Cgroups 以及 /dev/sd* 设备。这意味着,如果攻击者控制了这些子系统,主机也将不保。为了保持轻量,主机与容器共享内核,也因此埋下了安全漏洞的隐患。


Docker 守护进程也可能成为安全隐患。为使用和运行 Docker 容器,您很可能需要使用 Docker 守护进程,来为容器提供持续运行时环境。Docker 守护进程需要根权限,所以我们需要特别留意谁可以访问该进程,以及进程驻留在哪个位置。例如,相比公共区域所用的守护进程(例如 Web 服务器),本地守护进程的受攻击面要小得多。

docker 安装

mac

windows

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。

Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。

因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。


发布于: 2021 年 03 月 04 日阅读数: 28
用户头像

多读书多看报,少吃零食多睡觉 2018.08.07 加入

还未添加个人简介

评论

发布
暂无评论
Docker的三言两语-基础篇