0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么需要Docker容器?Docker容器和VM有什么区别?

jf_HnAzBl9o 来源:网络工程师笔记 2023-09-27 09:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

容器技术这几年,真的是特别火爆啊。

尽管容器技术已经出现很久了,却是随着Docker的出现而变得广为人知的。

Docker是第一个使容器能在不同机器之间移植的系统。

业内甚至经常出现一种声音:Docker将取代VM。

9d5c163e-5cc9-11ee-939d-92fbcf53809c.png

不得不说,还是夸张了。

容器的优势在于是它使得业务的上云部署更快,资源利用更高。但是在安全性上,不好说。

今天就给你展开说说,到底什么是Docker容器?Docker容器和VM有什么区别?

01

为什么需要Docker容器?

01这就得先说回到虚拟机了

虚拟机,也就是Virtual Machine,VM的发展,减轻了企业对硬件资源的依赖。

它将一台物理设备虚拟为多个逻辑设备,每个逻辑设备可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高设备的工作效率。

然而,传统VM需要安装操作系统才能执行应用程序,占用系统资源过多。

多数情况下,用户只需要运行简单的应用程序,采用VM技术操作繁琐且造成资源浪费。

假如需要迁移应用服务程序,则需迁移整个VM,因此企业迫切需要轻量级的虚拟化技术。

02灵活迁移部署,简直不要太香

容器,就是一种轻量级的虚拟化技术,目的和虚拟机一样,都是为了创造“隔离环境”。

但是它不像VM采用操作系统级的资源隔离,容器采用的是进程级的系统隔离。

Docker作为创建容器的主流工具,为啥发展这么迅速?

关键点就在于它可以让开发者将企业需要的各种应用及应用依赖文件封装在Docker镜像文件中。

然后在任何物理设备(Linux设备或Window设备等)上安装运行实现虚拟化;

让应用程序彻底脱离底层设备,可以在物理机之间灵活迁移部署,使运维工程师摆脱了繁琐的环境部署,极大的提高了工作效率,同时减少了部署过程中的潜在风险。

03Docker容器的3大特点

轻量化:

一台主机上运行的多个Docker容器可以共享主机操作系统内核;启动迅速,只需占用很少的计算和内存资源。

标准开放:

Docker容器基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。

安全可靠:

Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。

Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台主机。

02

Docker容器 VS VM

Docker容器和传统VM技术,在技术实现上有所不同。

01VM与Docker容器的逻辑组成

VM:

使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。

每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。

Docker容器:

使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。

9daa67b2-5cc9-11ee-939d-92fbcf53809c.png

02Docker容器的优势

相较于VM,Docker容器作为一种轻量级的虚拟化方式,在应用方面具有以下显著优势:

Docker容器可以在秒级时间内快速启动和停止,相较传统虚拟机显著提升。

Docker容器对系统资源要求低,数千个Docker容器可同时运行在同一个主机上。

Docker容器通过类似Git的操作来方便用户获取和更新应用镜像。

Docker容器通过Dockerfile配置文件实现自动化创建和灵活部署,提高工作效率。

Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。

下图可直观了解Docker容器与传统VM方式的区别:

9db2bf16-5cc9-11ee-939d-92fbcf53809c.png

03

Docker容器是如何工作的?

01Docker的三大组成要素

镜像:

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。

镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。

容器:

镜像创建的运行实例,Docker利用容器来运行应用。

每个容器都是相互隔离的、保证安全的平台。

我们可以把容器看做是一个轻量级的Linux运行环境。

镜像仓库:

集中存放镜像文件的地方。

用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。

02Docker容器的运行逻辑

如下图所示,Docker使用客户端/服务器 (C/S) 架构模式。

Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。

Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。

9dbfeaec-5cc9-11ee-939d-92fbcf53809c.png

Docker运行流程

接下来给你展开说说Docker的客户端、主机和守护进程。(根据上面这张图来看哈)

1、Docker客户端:

用于和Docker守护进程(Docker Daemon)建立通信的客户端。

Docker客户端只需要向Docker服务器或者守护进程发出请求(Docker构建、Docker拉取和Docker启动等指令),服务器或者守护进程将完成所有工作并返回结果。

如橙色流程所示,执行Docker构建指令会根据Docker文件构建一个镜像存放于本地Docker主机。

如蓝色流程所示,执行Docker拉取指令会从云端镜像仓库拉取镜像至本地Docker主机或将本地镜像推送至远端镜像仓库。

如黑色流程所示,执行Docker启动指令会将镜像安装至容器并启动容器。

2、Docker主机:

一个物理或者虚拟的机器用于执行 Docker守护进程和容器。

3、Docker守护进程:

接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对象,比如镜像、容器、网络和数据卷。

EC-IoT解决方案基于“边缘智能+云化管理”平台,物联网关开放边缘计算能力,快速适配不同行业边缘智能数据处理需求。

实现关键业务本地毫秒级实时响应,完成数据本地聚合优化,高价值数据主动回传云端。

边缘计算网关基于“硬件平台化,业务APP化”的设计理念,终端功能由APP软件定义,用户基于基础服务接口开发自定义APP,并实现在边缘计算网关的灵活部署,快速适应业务需求复杂多变的物联场景。

边缘计算网关支持部署Docker容器,用户可在部署的容器上安装自己的业务APP,同时网关设备提供各种eSDK接口供容器和APP调用其资源。

9dd2c504-5cc9-11ee-939d-92fbcf53809c.png

EC-IoT解决方案

9dda1f48-5cc9-11ee-939d-92fbcf53809c.png

网关开放性

04

容器的分类

容器技术架构主流的有两种:

01一种是Linux Container,即LXC

LXC起源于Linux内核中的Cgroup和namespace的开发,以支持轻量级虚拟化操作系统环境,是一种操作系统级别的轻量级Linux容器。

提供轻量级的虚拟化隔离进程和资源:

它将应用软件系统打包成一个软件容器,内含应用软件本身的代码,以及所需要的操作系统核心库。

它通过统一的名字空间和共用API(Application Programming Interface,应用程序编程接口)来分配不同软件容器的硬件资源。

创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。

02一种是Docker公司发布的Docker

Docker是在LXC基础上进一步封装的容器技术架构,它相当与一个应用程序级别的容器,也称为APP容器。

9de3dc68-5cc9-11ee-939d-92fbcf53809c.png

即每个Docker容器是一个独立的APP,Docker将APP打包成一个镜像,在其它地方需要使用此APP时,直接获取到此镜像即可,方便部署与安装。

如上图所示,Docker与LXC实现容器都是通过Linux kernel的namespace与Cgroup机制实现。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    609

    浏览量

    29629
  • 虚拟机
    +关注

    关注

    1

    文章

    968

    浏览量

    30160
  • 裸机
    +关注

    关注

    0

    文章

    41

    浏览量

    6905
  • docker容器
    +关注

    关注

    0

    文章

    31

    浏览量

    3596
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—Docker容器部署方法说明

    本文围绕创龙科技研发的评估板,详细说明 Docker 容器部署方法,包括 Docker 架构介绍、安装步骤(依赖包安装、GPG 密钥添加等)、本地镜像仓库搭建,以及单个 / 多个镜像的构建、推送
    的头像 发表于 10-22 17:21 542次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法说明

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Docker容器部署方法说明

    本指导文档主要演示Docker容器部署的方法,并基于Docker运行led_flash例程。
    的头像 发表于 08-06 15:55 278次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法说明

    Docker容器安全攻防实战案例

    在云原生时代,Docker已成为现代应用部署的基石。然而,容器化带来便利的同时,也引入了新的安全挑战。作为一名在生产环境中管理过数千个容器的运维工程师,我将通过真实的攻防实战案例,带你深入了解
    的头像 发表于 08-05 09:52 1003次阅读

    创龙 瑞芯微 RK3562 国产 2GHz 四核A53 工业开发板—Docker容器部署方法说明

    Docker是一个开源的应用容器引擎,让开发者可打包他们的应用以及依赖包至一个可移植的镜像中,然后发布至任何流行的Linux或Windows机器上,亦可实现虚拟化。容器是完全使用沙箱机制,相互之间
    的头像 发表于 07-03 11:00 424次阅读
    创龙 瑞芯微 RK3562 国产 2GHz 四核A53 工业开发板—<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法说明

    干货分享 | RK3588 Ubuntu系统Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平台上运行Ubuntu系统时,Docker容器技术能极大提升开发部署效率。通过轻量级虚拟化实现环境隔离与快速迁移,本文将从零开始详解RK3588平台
    的头像 发表于 06-27 12:01 3177次阅读
    干货分享 | RK3588 Ubuntu系统<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>使用指南

    如何使用Docker部署大模型

    随着深度学习和大模型的快速发展,如何高效地部署这些模型成为了一个重要的挑战。Docker 作为一种轻量级的容器化技术,能够将模型及其依赖环境打包成一个可移植的容器,极大地简化了部署流程。本文将详细介绍如何使用
    的头像 发表于 05-24 16:39 789次阅读

    Docker Compose的常用命令

    大家好,今天给大家分享Docker Compose的常用命令,以及docker-compose文件的属性。Docker Compose 是一个用于定义和运行多容器
    的头像 发表于 04-30 13:40 920次阅读

    Docker常用命令大全

    Docker 是一种开源的应用容器引擎,广泛应用于开发、部署和运行分布式应用。掌握 Docker 常用命令对于开发人员和运维人员来说非常重要。本文将为大家整理常用的Docker 命令,
    的头像 发表于 04-22 12:47 672次阅读

    【技术案例】Android in Docker

    Docker介绍Docker是一个开源的容器化平台,用于打包、分发和运行应用程序。它通过将应用及其所有依赖打包到独立的容器中,确保应用在不同环境中一致运行。
    的头像 发表于 04-02 16:33 1448次阅读
    【技术案例】Android in <b class='flag-5'>Docker</b>

    使用Windows中的Docker容器运行DL Streamer出现报错怎么解决?

    使用 Windows* 中的 Docker 容器运行 DL Streamer。 遇到错误: gi.repository.GLib.GError: gst_parse_error: 无元素 “vaapih264enc” (1)
    发表于 03-05 07:04

    Docker-镜像的分层-busybox镜像制作

    docker hub里面查看busybox的Dockerfile, 知识点4:bootfs 和 rootfs  知识点5:为什么Docker镜像要采用这种分层结构? 如果多个容器共享一份基础镜像,当某个
    的头像 发表于 01-15 10:44 999次阅读
    <b class='flag-5'>Docker</b>-镜像的分层-busybox镜像制作

    在华为云上通过 Docker 容器部署 Elasticsearch 并进行性能评测

    前言   1. 华为云X实例介绍及优势   1.1 柔性算力   1.2 vCPU和内存的灵活配比   1.3 成本效益与性能   2. 安装并运行 Docker   2.1 修改仓库配置文件
    的头像 发表于 01-13 13:36 884次阅读
    在华为云上通过 <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>部署 Elasticsearch 并进行性能评测

    Dockerfile镜像制作与Docker-Compose容器编排

    Dockerfile镜像制作 docker/podman中, 镜像是容器的基础,每次执行docker run的时候都会指定哪个基本镜像作为容器运行的基础。我们之前的
    的头像 发表于 01-07 11:01 1140次阅读
    Dockerfile镜像制作与<b class='flag-5'>Docker</b>-Compose<b class='flag-5'>容器</b>编排

    在华为云 FlexusX 实例上实现 Docker 容器的实时监控与可视化分析

    前言 华为云 Flexus X,以顶尖算力与智能调度,引领 Docker 容器管理新风尚。828 企业上云节之际,Flexus X 携手前沿技术,实现容器运行的实时监控与数据可视化,让管理变得直观
    的头像 发表于 01-02 13:42 774次阅读
    在华为云 FlexusX 实例上实现 <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>的实时监控与可视化分析

    k8s和docker区别对比,哪个更强?

    部署、扩展、管理和应用生命周期管理能力,可实现高可用性和自动伸缩,两者常结合使用以优化容器化和应用管理。UU云小编将对k8s和docker区别进行详细对比:
    的头像 发表于 12-11 13:55 1114次阅读