docker基础 (基本组成和虚拟机的比较)

本文介绍了Docker的基本概念、价值、与虚拟机的不同之处以及其核心组成部分——镜像、容器和仓库。Docker作为轻量级的容器虚拟化技术,解决了环境配置不一致的问题,实现了快速部署和资源高效利用。与虚拟机相比,Docker启动快、占用资源少,是现代应用部署的首选方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开宗明义,什么是docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
这是比较官方的定义,我们可以用一些简单通俗的话来揭示什么是docker,docker的宗旨理念能给我们很多解释: Build and Ship any Application Anywhere,这就是docker所做的,每个人都可以从镜像文件中,找到容器实例来运行,
这就是docker。

在这里插入图片描述

背景

在讨论什么是docker时,我们要了解docker为什么会出现,他解决了什么问题。一个应用程序的开发和运维是两个模块,开发要先把代码或war包做好,然后交给运维进行维护,但其中很容易出现问题,因为配饰环境,运行环境,操作系统不同,很容易出现在开发环境中可以运行,但在运维环境中无法运行的偏差。
这个时候就需要一个容器,不仅仅把代码运输过去,也要能把开发环境也搬运过去,这个大抵就是docker办的事情。一句话解释就是,docker是解决了运行环境和配置问题的软件容器,方便持续集成并有助于整体发布的容器虚拟化技术

价值

docker的价值主要就是有

  1. 解决了运行环境等不同导致的运营问题,实现了一次搭建,可以处处运行。
  2. 大大缩减了内存空间的占有。
  3. 加快了操作时间,缩减掉了不必要的过程,让整套流程轻简起来。

与虚拟机的不同

docker是容器虚拟化技术,看起来和虚拟机是非相似,事实上,我们可以理解docker是一个升级优化后的轻简版docker。
以往的docker主要有以下的几个问题,

  1. 启动时间长(分钟级别),而docker是秒级别的
  2. 资源占用多,以centOS为例,在虚拟机上安装大约有4G,而在Docker上只占有170M的内存。
  3. 冗余步骤多。

那么,为什么docker能够做到相对轻简,而虚拟机不行呢?
首先,虚拟机是通过软件模拟出完整硬件系统,运行在一个完全隔离环境中的完整计算机系统,你可以理解为这是一个装在计算机里面的计算机,所以他的内存占有量必然是极大地,就像是之前所有的算法一样,这个看起来相对粗暴一点,就必然有简化的可能,于是docker应运而生了。

Docker基本组成

Docker主要是有三个部分:镜像(image),容器 (container),仓库 (repository)
镜像是一个只读的模版,镜像可以用来创建docker容器
容器是镜像创建的容器实例,docker利用利用容器进行一个或者一组应用。它可以启动,删除,停止,是相互隔离独自运行的平台。
仓库是储存镜像的地方。

我们可以分开理解这些部分,关于镜像和容器的理解我们可以参照一下以下代码:

public static void main(String[] args) {
        // TODO code application logic here
        StockPrice sp1;
        sp1 = new StockPrice("AAPL", "2006-12-01", 91.8, 92.33, 90.1, 91.32, 28395700);
        StockPrice sp2 = new StockPrice("AAPL", "2006-12-04", 91.88, 92.05, 90.5, 91.12, 25340600);
        StockPrice sp3 = new StockPrice("AAPL", "2006-12-05", 91.655, 92.33, 90.87, 91.27, 23672800);
 }
class StockPrice {
    String Ticker;
    String Date;
    double Open;
    double High;
    double Low;
    double Close;
    int Volume;
    public StockPrice(String Ticker, String Date, double Open, double High, double Low, double Close, int Volume) {
        this.Ticker = Ticker;
        this.Close = Close;
        this.Date = Date;
        this.High = High;
        this.Low = Low;
        this.Open = Open;
        this.Volume = Volume;
    }

如图,在Java的运行环境之中,StockePrice()相当于镜像,它是一个储存数据的模版,sp1,sp2,sp3则相当于容器,他们是镜像文件中的运行实例。
至于仓库就是储存镜像的地方,有公开(public)和私人(private)之分,类似于GitHub,也有Docker Hub,值得一提的是,由于国外的网站(官网)访问比较缓慢,官网的中文网站现在又不能用,只能跳转到英文版官网,所以可以从阿里云镜像加速或网易云加速中下载镜像文件。
官网网址
阿里云镜像加速
镜像,容器和仓库的关系大致如下图一样:docker本身是一个容器运行载体,将应用程序和配置一起打包形成一个可交付的运行环境,这个运行环境就像是一个image文件。
我们通过image文件可以生成不同的容器实例,,这就是容器文件,image就是容器实例的模板
我们从仓库中下载镜像文件,我们可以在仓库中发布这些文件,需要的时候再拉下来。

在这里插入图片描述

为什么docker比虚拟机要好

就像之前说的,虚拟机是模拟出完整的整套硬件系统的,而docker不是把所有的部分都模拟出来,而是和宿主机公用一些共有的部分,比如说内存。我们打开一个虚拟机可以看见如下的配置:

在这里插入图片描述

  1. 首先,docker比虚拟机少更多的抽象层,他不需要用hypervisor虚拟出硬盘资源,是直接使用宿主机的硬件资源,所有极大程度的优化了内存。
  2. 其次,docker直接利用的是宿主机的内核,虚拟机模拟系统的时候,要模拟出新的系统的内核,而doctor直接利用内核,就省略了很多过程。
    如下图我们可以进行两者的对比:
    红框所示部分就是抽象层,黑框的部分就是虚拟机模拟出来的系统内核,而这些在doctor中被docker引擎所代替。

在这里插入图片描述
资料参考来源:https://www.bilibili.com/video/BV1Vs411E7AR?p=11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值