《第一本Docker书(修订版)》——第1章 简介 1.1Docker简介

简介: 那么Docker有什么特别之处呢?Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎。该引擎的目标就是提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,然后再部署到生产环境。

本节书摘来自异步社区《第一本Docker书(修订版)》一书中的第1章,第1.1节,作者:【澳】James Turnbull(詹姆斯•特恩布尔)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 简介

在计算世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。

由于“客居”于操作系统,容器只能运行与底层宿主机相同或相似的操作系统,这看起来并不是非常灵活。例如,可以在Ubuntu服务器中运行RedHat Enterprise Linux,但却无法在Ubuntu服务器上运行Microsoft Windows。

相对于彻底隔离的管理程序虚拟化,容器被认为是不安全的。而反对这一观点的人则认为,由于虚拟机所虚拟的是一个完整的操作系统,这无疑增大了攻击范围,而且还要考虑管理程序层潜在的暴露风险。

尽管有诸多局限性,容器还是被广泛部署于各种各样的应用场合。在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。最常见的一个例子就是“权限隔离监牢”(chroot jail),它创建一个隔离的目录环境来运行进程。如果权限隔离监牢中正在运行的进程被入侵者攻破,入侵者便会发现自己“身陷囹圄”,因为权限不足被困在容器创建的目录中,无法对宿主机进行进一步的破坏。

最新的容器技术引入了OpenVZ、Solaris Zones以及Linux容器(如lxc)。使用这些新技术,容器不再仅仅是一个单纯的运行环境。在自己的权限范围内,容器更像是一个完整的宿主机。对Docker来说,它得益于现代Linux内核特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好地共存。

容器经常被认为是精益技术,因为容器需要的开销有限。和传统的虚拟化以及半虚拟化(paravirtualization)相比,容器运行不需要模拟层(emulation layer)和管理层(hypervisor layer),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。

尽管有着光辉的历史,容器仍未得到广泛的认可。一个很重要的原因就是容器技术的复杂性:容器本身就比较复杂,不易安装,管理和自动化也很困难。而Docker就是为改变这一切而生。

1.1 Docker简介

Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由Docker公司(www.docker.com,前dotCloud公司,PaaS市场中的老牌提供商)的团队编写,基于Apache 2.0开源授权协议发行。
那么Docker有什么特别之处呢?Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎。该引擎的目标就是提供一个轻量、快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔记本部署到测试环境,然后再部署到生产环境。Docker极其简洁,它所需的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制文件最小限的宿主机。而Docker的目标就是要提供以下这些东西。

1.1.1 提供一个简单、轻量的建模方式
Docker上手非常快,用户只需要几分钟,就可以把自己的程序“Docker化”(Dockerize)。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到了“随心所至,代码即改”的境界。

随后,就可以创建容器来运行应用程序了。大多数Docker容器只需不到1秒钟即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户可以尽可能充分地利用系统资源。

1.1.2 职责的逻辑分离
使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境的一致性,从而降低那种“开发时一切都正常,肯定是运维的问题”的风险。

1.1.3 快速、高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。

1.1.4 鼓励使用面向服务的架构
Docker还鼓励面向服务的架构和微服务架构[1]。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。

注意
如果你愿意,当然不必拘泥于这种模式,你可以轻松地在一个容器内运行多个进程的应用程序。

相关文章
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
6月前
|
Docker 容器
01Docker简介
01Docker简介
23 0
|
6月前
|
SQL 关系型数据库 数据库
SQL Server 简介与 Docker Compose 部署
SQL Server 是由微软公司开发的一款强大的关系型数据库管理系统(RDBMS),广泛应用于企业级应用程序和数据存储。使用 Docker Compose,您可以轻松地将 SQL Server 实例部署到容器化环境中,并方便地进行数据库管理。在本文中,我将简要介绍 SQL Server 的基本概念,并详细阐述如何使用 Docker Compose 部署 SQL Server 容器。
213 2
SQL Server 简介与 Docker Compose 部署
|
1月前
|
Kubernetes Cloud Native 虚拟化
【docker】—— Docker 简介
【docker】—— Docker 简介
|
6月前
|
Oracle 关系型数据库 数据库
Oracle 简介与 Docker Compose部署
Oracle 数据库是一款由 Oracle 公司开发的关系型数据库管理系统(RDBMS)。它被广泛应用于企业级应用程序,提供了可靠的数据存储和强大的数据管理功能。
242 1
Oracle 简介与 Docker Compose部署
|
8月前
|
Docker 容器
Excalidraw 简介及 Docker Compose 部署指南
家人们好,我们在工作生活中经常需要画些图,我们往期了已经出过draw-io私有化部署的文章了,今天我要向大家介绍一款名为 Excalidraw 的绘图工具,这款工具了我个人非常喜欢使用,是因为它可以修改成类似于手写体的字体,并且可以直接绘画,这篇文章我将分享如何使用 Docker Compose 轻松部署 Excalidraw。
431 0
Excalidraw 简介及 Docker Compose 部署指南
|
5月前
|
jenkins 持续交付 数据安全/隐私保护
Jenkins简介及Docker Compose部署
Jenkins是一个开源的自动化服务器,用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统,支持各种编程语言和工具,使得软件开发流程更加高效和可靠。在本文中,我们将介绍Jenkins的基本概念,并展示如何使用Docker Compose轻松部署Jenkins服务。
184 3
Jenkins简介及Docker Compose部署
|
5月前
|
Linux 开发工具 git
淘东电商项目(07) -GitLab简介以及Docker部署
淘东电商项目(07) -GitLab简介以及Docker部署
69 0
|
6月前
|
Kubernetes 监控 Go
Docker实战专栏简介
Docker实战专栏简介
32 0
|
6月前
|
应用服务中间件 Linux nginx
Docker简介与云平台结合
Docker是一种开源的容器化平台,它通过将应用程序和其依赖项打包到一个独立的容器中,提供了一种轻量级、可移植和可扩展的软件交付解决方案。下面将介绍Docker的功能和优点:
183 1