Docker 是什么? Docker 基本观念介绍与容器和虚拟机的比较

发布于:2025-03-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:历代文学,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea


Docker 是什么?

Docker 是一种开源软件平台,它的构想理念是「Build and Ship any Application Anywhere」,意即让开发者在虚拟环境中,开发、部署和管理任的何应用程序。 Docker 的轻量化特性,提供应用程序独立的测试环境。 让用户只需专注于应用程序的开发,为他们省下建置环境的时间与精力。

docker logo

为什么要使用 Docker

(一)在主机上快速部署

由于 Docker 容器具有跨平台便携性,并且共享操作系统中的资源,它相较虚拟机更为轻量。 在相同资源下,能执行容器数大约是虚拟机的5到10倍,能够提高开发者的工作效率并节省资金。

此外,使用EDB提供的PostgreSQL Docker image,您可以快速地在开发、测试和生产环境中部署PostgreSQL数据库,而不需要担心环境配置和兼容性问题。 EDB 的 PostgreSQL Docker image 也针对 Docker 环境进行了优化,可以提供更高的性能和可靠性。

(二)版本控管和对象重复使用

Docker 让用户能够储存不同的版本的历史纪录,用户能够依照自己的喜好回滚(Roll Back)至最合适的版本。 开发人员只需将环境设定好,就能使用先前保存好的容器,达到重复使用的目的。

此外,使用 HashiCorp Vault 可以安全地管理 Docker image 中的 secrets 和配置信息。 Vault 可以将这些敏感信息加密存储,并提供安全的访问控制,确保只有授权的用户和应用程序才能访问这些信息,避免 secrets 泄露的风险,同时也能方便地重复使用这些安全的映像文件(Image)。

(三)更有效率的 CI/CD 流程

Docker 帮助开发人员在任何环境下测试代码,协助他们在应用程序开发初期就能找出错误。 利用 Docker 易与其他工具整合的优势,开发人员能将 GitHub 和 Jenkins 整合至 Docker 中。 只需将代码交付至 Github,再由 Jenkins 进行自动化布署,就能够快速地建立映像文件(Image)。 开发者还能将映像文件上传至 Docker Hub 来解决不同版本间环境不兼容的问题。 Docker 能够简化开发部署流程、减少环境建置的时间,以及让开发人员同时执行多个测试。

此外,在CI/CD流程中,可以使用ELK Stack来收集和分析Docker容器的日志和事件,例如建置日志、测试结果、部署状态等。 这些信息可以帮助开发人员快速识别和解决问题,并追踪应用程序的交付过程。 ELK Stack 的 dashboards 和可视化功能可以提供 CI/CD 流程的清晰概览,帮助团队更好地监控和管理整个流程。

Docker 结合 CI/CD 流程进行自动测试与部署

开发人员让 Docker 融入 CI 流程的一种方式是,开发者在建立完应用程序后,通过 CI 服务器建立 Docker 映像文件(Image),再将应用装入映像文件,最后再上传到 Docker Hub。 开发者能够在另一台主机上,不论是在QA、DEV或正式环境,从Docker Hub上接入映像文件并运行容器,在CI服务器中,开发者甚至能在创建映像文件的过程中,完成编辑和测试。

虚拟化技术是什么?

在认识 Docker 前,我们必须先了解何谓虚拟化? 简而言之,虚拟化技术想解决的核心问题是,不同电脑的操作系统与硬件资源配置不兼容。 举例来说,今天我开发了一款应用程序,经测试后,它能够在我的地端环境中正常运行,但如果我想将它安装至其他环境或部署至云端。 我就必须建置相同的环境,和配置相同硬件资源,例如:服务器、CPU、数据库、扩充程序等等。

然而,这种「例行公事」往往需要耗费大量时间,而且没人能保证你的程序在新环境中能够正常运作。 因为不同环境使用的操作系统不尽相同,即便同样使用 Linux,不同版本间也存在着些微的差异。 而虚拟技术的问世就是为了解决这种「明明在我的环境中能运作,但搬到其他地方就坏掉」的问题。

目前常见的虚拟技术有两种,一种是以处理操作系统为单位的虚拟化技术,我们将它称之为虚拟机(Virtual Machine),著名的代表有 VMware; 另一种是以 APP 为单位的虚拟化技术,我们将它称为容器化(Containerize),著名的代表有 Docker Container。 下文将为各位分别介绍这两种技术

虚拟机(VM)

VM 是一种体积庞大且耗能高的软件套件。 VM 会模拟底层的主机资源(CPU、RAM、Storage),将资源分配给上层的应用程序使用。 在 VM 的架构中有一层名为 Hypervisor 的平台。 这种平台被用于管理硬件资源的使用和分配。 简单来说,Hypervisor 让用户能够在操作系统上(Host OS)增加另一个操作系统(Guest OS),并且让这两种操作系统相互协作。 每个 VM 包含操作系统、应用程序、必要的二进制文件和系统库的完整副本-容量大约为 10 GB,因此 VM 启动的时间会较为缓慢。

container-vm-whatcontainer

容器化(Containerize)

容器化是一种在概念上相似于虚拟机,但在原理上略有不同的技术,其主要目的在于提供开发者用于测试应用程序的沙盒环境。 开发者将想测试的应用程序与 Dependency(相依性资源)封装于容器进行测试。 容器化与 VM 的相异之处在于,由于容器不会模拟系统底层的基础架构,因此需耗费的资源也相对较低。 开发者能够在容器内配置不同的资源,因为每个容器都独立运行且彼此之间不会互相影响。

译注: Dependency(相依性资源): Dependency (相依性资源)在这边泛指 system libraries(系统函式库)、External Third-Party Code Package(第三方代码套件)。

docker-containerized-appliction-blue-border_2 (Demo)

容器(Container)VS 虛擬機(VM)

雖然容器和虛擬機具有類似的功能及優勢,但其實它們被用於處理不同面向的問題,VM 的主要功能是作業系統的虛擬化,容器主要的功能是虛擬化操作系統,因此容器相較於 VM 更容易攜帶,也更高效。

以下表格為容器與虛擬機的對比

功能 Virtual Machine Docker Container
虛擬化的目標 作業系統 應用系統
啟動時間 久(幾分鐘) 短(幾秒)
容量 GB MB
耗費資源 較多 較少
複製相同環境
服務內容 大型專案服務 多使用於微服務中

组成 Docker 的重要元素

在了解虚拟技术的基本观念后,我们将在这段剖析构成Docker的重要元素,让大家对Docker元素间的工作流程有更全面的了解。

Dockerfile

开发人员在使用 Docker 时发现,大多现成的 Docker 映像文件无法满足他们的需求,因此需要一种能够生成映像档的工具。 Dockerfile 是一种简易的文件文件,里面包含了建立新映像文件所需的指令。

Dockerfile 语法主要由 Command(命令)和 Argument (参数选择)两大元素组成。 以下是一个简易的 Docker file 示意图:

命令式语法+选择参数(Command + Argument)

dockerfile

以这张图来说 From 是命令式,而 nginx 是选择参数

Image (映像文件)

Docker 映像文件是创建容器的模板,我们能将它想象为一种虚拟机快照(snapshot),映像文件包含了开发者需要部署的应用程序、操作系统和编译环境。 开发者能透过映像文件建置不同的容器,在容器中,每个应用程序都是独立运行的,彼此互不影响。

image

Container (容器)

容器是映像文件建立出来的实例(Instance),我们能将它比喻为一个轻量级的沙盒,Docker 利用容器运行和隔离应用程序,能够在容器中将应用程序启动、开始、停止、删除。 由于映像文件是唯读(Read Only)的模板,因此容器在运行后映像文件的上层会增加一个能够修改的读写层(Read and Write),而映像档本身则不变。

docker-inside-container

Repository(仓库)

Repository 是储存映像档的地方,用户可以将自己完成的映像文件上传至仓库上储存,仓库上也有许多现成的映像文件供用户存取,仓储的种类被分为公开与私人两种,目前官方最大的公开仓库是 Docker Hub。 在上面储存了超过 15,000 个映像文件供用户下载。

docker-flow

Docker 的运作流程

步骤一、撰写 Dockerfile,步骤二、将 Dockerfile 建立为 Image,步骤三、将 Image 运行为容器。 透过这三个简单的步骤,就能创建自己的 Docker 容器啰!

创建运行 Docekr

 


网站公告

今日签到

点亮在社区的每一天
去签到