分享

什么是Docker容器?(全面了解使用)

 dakawang 2023-10-13 发布于北京

一:为什么需要Docker容器?

1.引入

1.1麻烦的环境部署

  1. 1.在软件开发中,最麻烦的事情之一就是环境配置。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。
  2. 2.举例来说,要运行一个Python程序,计算机必须要有 Python 引擎,还需要安装好程序的各种依赖,甚至还要配置特定的环境变量。假设你有两个程序都需要部署在同一个服务器上,一个需要软件是基于Python2.0,一个是Python3.0,那么在部署上就很容易造成混乱。因为不同版本的Python模块可能互不兼容,况且不同开发环境上的库也需要额外的配置。如果要部署很多程序,而开发环境和部署环境各不相同的话,可想而知配置得多么麻烦。
  3. 3.为了更好地将软件从一个环境移植到另一个环境上,必须从根源上解决问题,那么如何在移植软件的时候,将一模一样的原始环境迁移过来呢?

1.2虚拟机(Virtual Machine)

虚拟机是移植环境的一种解决方案。虚拟机本质上也是一个软件,在这个软件中,我们可以运行另一种操作系统。比如我们想要在 MacOS 上运行 Linux 系统,我们就在电脑上安装 Linux 镜像,并使用虚拟机打开此镜像,就能创建出一个镜中镜了。这个方案非常方便,想要新环境,就安装镜像,然后使用虚拟机打开,不想要直接删除。但是这个方案有几个缺点:
  1. 占用资源多:虚拟机需要安装整个操作系统,自然会消耗大量内存和硬盘空间。如我们只需要运行1MB的软件,有时候也不得不安装几个G的环境才能运行。
  2. 运行步骤冗余:虚拟机安装的是完整的系统,每次运行程序都需要按部就班,打开系统、登入用户等等之类麻烦的步骤,很不方便。
  3. 运行速度慢:为了运行特定环境中的软件,虚拟机必须先运行系统,而系统占用的资源往往很多(网络,GUI,IO等等),自然也会影响运行速度。

1.3Linux容器(Container)

为了解决虚拟机存在的这些缺点,Linux发展出了另一种虚拟化的技术:Linux容器。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,就是在正常进程的外面套用了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层程序的隔离。由于容器是进程级别的,相比虚拟机有更多优势:

  1. 占有资源少:容器只占用需要的资源,不占用那些用不到的资源。相比于虚拟机安装完整的操作系统,容器需要消耗的空间自然就少了很多。
  2. 资源利用率高:虚拟机都是独享资源,电脑需要为每个虚拟环境单独分配资源,不仅仅占用空间大,而且资源的利用率很低。而容器之间可以共享资源,最大化资源的利用率。
  3. 运行速度快:容器里面的应用就是底层系统的一个进程,所以启动容器相当于直接运行本机的一个进程,而不是一个完整并臃肿的操作系统,自然就快很多。

二:Docker是什么?

1.Docker简介

  1. Docker属于Linux容器的一种封装,提供简单易用的容器使用接口,它也是目前最流行的Linux容器解决方案。Docker 将软件代码和其依赖,全打包在一个文件中。运行单个文件,就会生成虚拟容器。在这个虚拟容器中,不管本地的操作系统是如何的不同,此容器都能照常运行。
  2. 简而言之,Docker的接口非常简单,可以帮助用户更好地创建和使用容器,让相同的代码在不同的环境上正常运行。

2.Docker的用途

Docker目前主要有以下三个用途:

  1. 提供一次性的环境:本地测试别人的软件、持续集成的时候提供单元测试和构建的环境。
  2. 提供弹性的云服务:因为Docker容器可以随时启动或关闭,所以非常适合动态规划和缩容。
  3. 组建微服务构架:通过多个容器,服务的部署能更加灵活,帮助实现微服务构架。
  4. 不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快

3.Docker容器 VS VM

Docker容器和传统VM技术,在技术实现上有所不同。下图显示的是VM与Docker容器的逻辑组成:

  • VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
  • Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。

  1. Server:相当于云服务器
  2. Host OS:为操作系统
  3. Docker Engine:可以认为我们在这个操作系统上安装了一个docker的软件
  4. App A:在Docker组件中运行App A
  5. App B:在Docker组件中运行App B
  6. # 所以docker完全没有操作系统的概念,用的还是宿主机的操作系统,但是它做出了隔离。也实现了虚拟化。

虚拟机与Docker容器对比

三:Docker容器是如何工作的?

1.Docker的三大组成要素:

  • 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。
  • 容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
  • 镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。

Docker容器的运行逻辑如下图所示,Docker使用客户端/服务器 (C/S) 架构模式,Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。

2.Docker运行流程

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多