什么是容器?随着云计算、虚拟机的普及,用户经常会问什么是虚拟机。虚拟机有什么好处,性能怎么样?她如何提高硬件利用率?当然,我们还向客户介绍CPU 和内存虚拟化、资源超分配和分布式存储等概念。时至今日,虚拟机已经彻底普及,虚拟机带来的好处适合很多业务场景,人们对虚拟机的各种疑虑也逐渐打消。那么,许多激进的IT人士声称将取代虚拟机的容器是什么呢?互联网上对容器的介绍大部分都集中在Docker上。事实上,容器不是Docker。 Docker 简单来说就是容器技术的一种实现,或者说是以命令行形式提供的容器管理。之前有老外写了100行Golang代码实现了一个容器(https://www.infoq.com/articles/build-a-container-golang)。基于此代码实现的容器更能体现容器技术的本质。容器的核心有三个方面: 命名空间:隔离容器内部的应用程序只能看到容器内部的资源(用户信息、进程信息、网络信息、挂载信息等) Cgroup:各种资源限制定义容器并提供最大程度的限制主机资源(CPU、内存等)的使用情况。分层文件系统:基于写时复制(COW)和联合挂载的文件系统,为容器提供文件系统,我们看一下以Docker(Moby)为代表的容器官方解释:Containers Image 一种轻量级的、独立的软件可执行包,包含运行it: 代码、运行时、系统工具、系统库和配置所需的一切。容器化软件适用于基于Linux 和基于Windows 的应用程序,始终以相同的方式运行。容器将软件与其周围环境分开(例如,开发环境和暂存环境之间的差异)。有助于减少运行团队之间的冲突同一基础设施上的不同软件。
翻译:容器镜像是一个轻量级的、独立的、可执行的软件包。该软件包包含运行软件所需的代码、运行环境、系统工具、系统库和配置。基于Linux和Windows应用程序的容器化软件可以在Windows或Linux上透明运行。容器将软件与其他不相关的资源(例如开发和演示环境)分开,并减少不同团队在同一基础环境中运行不同软件而引起的冲突。
对于容器和镜像,请看下面最经典的Docker技术架构图。
按照此图中的三个命令来组织自己。
docker build 如上所述,Docker仅以命令行的形式提供容器管理。 Docker 对容器生态系统最大的贡献是它的镜像。容器镜像可以理解为应用+运行环境模板和虚拟机模板。但是,它们与虚拟机模板不同。该映像通常相对较小,并且通常仅包含应用程序可执行文件和特定操作环境,但不包含操作系统文件。要创建图像,您需要定义一个描述文件,如下所示:描述图像的内容。没关系。在Docker 中,它称为Dockerfile。无需在虚拟机模板等虚拟环境中安装操作系统。图像是独立于平台的。平台无关是指镜像可以运行在Windows、Linux、阿里云、VMware、华为云等平台上。与虚拟机不同的是,在阿里云上创建的虚拟机模板只能在阿里云上使用,在AWS上创建的虚拟机模板也只能在阿里云上使用。在AWS 上可用。容器镜像的平台独立性是容器快速发展的关键原因;这一特性解放了应用程序和服务开发人员,使平台提供商能够采取新的发展方向。回到这个命令,通常当你运行docker build 时,你需要创建一个Dockerfile 文件来创建大数据Ambari 服务器镜像,如下所示。定义此Dockerfile 后,使用以下命令运行docker build: -t 可以获得使用ambari-server:1.0创建的容器镜像。创建后,只需将其放置在本地计算机上即可。要保存镜像,需要运行docker push ambari-server:1.01命令。 docker pull命令从主机上的镜像仓库下载容器镜像,提供远程镜像检索和分发能力。此镜像下载不是完整下载,它仅下载主机上缺少的镜像。这涉及到容器镜像的分层性质,超出了本文的讨论范围。 docker run: 那么容器是如何从镜像变成容器的呢?只需运行docker run 命令docker run -itd ambari-server:1.0 bash 即可。 3.1 运行该命令后,Docker会在主机上分配一个目录,并将镜像文件挂载到该目录下
3.2 Docker在Docker daemon进程上fork出子进程。该子进程是命名空间的,不会显示容器内的主机信息。
3.3 Docker给这个容器分配一个IP地址
当您登录此容器时,您将看到进程和网络信息,如下所示。
容器和应用程序虚拟机专注于管理资源分配,而容器专注于管理应用程序。随着容器的出现,容器逐渐开始影响软件架构。容器相对于虚拟机有哪些优势呢?可以看下表的对比分析。上表中的比较通常是每个集装箱制造商的促销卖点。容器到底给应用带来了什么?或者说,是什么应用需求在推动其流行?应用部署容器给应用部署带来的变化主要是由于开发环境,体现在测试环境和生产环境的一致性。这些依赖于Docker 镜像。应用程序开发完成后,架构师可以定义应用程序映像。该镜像包含应用程序的执行环境(Tomcat、JDK、Nginx 等)和应用程序的可执行文件(WAR 文件、Jar 文件等),并允许您执行以前必须在项目站点上完成的任务。最著名的架构师和发行商,您所需要做的就是在您的项目站点上运行一个简单的docker run 命令。应用程序迁移将应用程序部署到虚拟机时,通常有两种迁移应用程序的方法: a. 将应用程序所在的虚拟机导出为虚拟机模板。对于跨云,更改虚拟机模板的格式,将虚拟机模板导入到其他云环境,更改各种参数设置b. 无法转换虚拟机模板的格式(例如从AWS到阿里云)。只能重新部署。如果你使用容器来重新打印你的应用程序,就不会有这样的问题。容器镜像和容器技术是平台无关的。只需复制图像并启动容器即可。应用程序升级对于复杂的系统来说,应用程序升级可能非常棘手。您应该在升级之前创建备份。如果升级失败,则需要恢复。使用容器使其变得更加容易。停止旧版本的容器并启动新版本的容器。如果升级失败,请停止新版本容器并启动旧版本容器。 IT领域最重要的是应用程序,或者用新术语来说SAAS。无论是云计算、大数据还是机器学习,这些实际上都为你的应用程序提供了支持,让它们更好地工作,并让你可以把它们做得更好。增加数据的价值并使应用程序能够自我学习等。云计算中的PAAS实际上为应用提供了多种支持,但由于种种因素,PAAS始终不冷不热。在容器之前,容器是为应用而生的,但到了云时代,容器才是应用的载体。
,