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

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

3天内不再提示

容器和虚拟机具有相似的资源隔离和分配方式

Q4MP_gh_c472c21 来源:华为云社区 作者:yixiaoer 2020-11-16 15:36 次阅读

容器技术起源于Linux,是一种内核虚拟化技术,提供轻量级的虚拟化,以便隔离进程和资源。尽管容器技术已经出现很久,却是随着Docker的出现而变得广为人知。Docker是第一个使容器能在不同机器之间移植的系统。它不仅简化了打包应用的流程,也简化了打包应用的库和依赖,甚至整个操作系统的文件系统能被打包成一个简单的可移植的包,这个包可以被用来在任何其他运行Docker的机器上使用。

容器和虚拟机具有相似的资源隔离和分配方式,容器虚拟化了操作系统而不是硬件,更加便携和高效。

图1 容器 vs 虚拟机

相比于使用虚拟机,容器有如下优点:

更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,容器对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间,大大节约了开发、测试、部署的时间。

一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些问题并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。

更轻松的迁移

由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机,其运行结果是一致的。因此可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

更轻松的维护和扩展

Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目团队一起维护了大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

Docker容器典型使用流程…

Docker容器有如下三个主要概念:

镜像:

Docker镜像里包含了已打包的应用程序及其所依赖的环境。它包含应用程序可用的文件系统和其他元数据,如镜像运行时的可执行文件路径。

镜像仓库:

Docker镜像仓库用于存放Docker镜像,以及促进不同人和不同电脑之间共享这些镜像。当编译镜像时,要么可以在编译它的电脑上运行,要么可以先上传镜像到一个镜像仓库,然后下载到另外一台电脑上并运行它。某些仓库是公开的,允许所有人从中拉取镜像,同时也有一些是私有的,仅部分人和机器可接入。

容器:

Docker容器通常是一个Linux容器,它基于Docker镜像被创建。一个运行中的容器是一个运行在Docker主机上的进程,但它和主机,以及所有运行在主机上的其他进程都是隔离的。这个进程也是资源受限的,意味着它只能访问和使用分配给它的资源(CPU、内存等)。

典型的使用流程如图2所示:

图2 Docker容器典型使用流程

(1)首先开发者在开发环境机器上开发应用并制作镜像。

Docker执行命令,构建镜像并存储在机器上。

(2)开发者发送上传镜像命令。

Docker收到命令后,将本地镜像上传到镜像仓库。

(3)开发者向生产环境机器发送运行镜像命令。

生产环境机器收到命令后,Docker会从镜像仓库拉取镜像到机器上,然后基于镜像运行容器。

使用示例…

下面使用Docker将基于Nginx镜像打包一个容器镜像,并基于容器镜像运行应用,然后推送到容器镜像仓库。

安装Docker

Docker几乎支持在所有操作系统上安装,用户可以根据需要选择要安装的Docker版本。在Linux操作系统下,可以使用如下命令快速安装Docker。

curl -fsSL get.docker.com -o get-docker.shsh get-docker.sh

说明:CentOS 8.0操作系统使用上述脚本安装Docker会出现问题,建议使用如下命令安装较低版本Docker。

wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo sudosed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repoyum install docker-ce-18.06.3.ce -ysystemctl restart docker

Docker打包镜像…

Docker提供了一种便捷的描述应用打包的方式,叫做Dockerfile,如下所示:

# 使用官方提供的Nginx镜像作为基础镜像FROM nginx:alpine# 执行一条命令修改Nginx镜像index.html的内容RUN echo "hello world" > /usr/share/nginx/html/index.html# 允许外界访问容器的80端口EXPOSE 80

执行docker build命令打包镜像。

docker build -t hello .其中-t表示给镜像加一个标签,也就是给镜像取名,这里镜像名为hello。. 表示在当前目录下执行该打包命令。

执行docker images命令查看镜像,可以看到hello镜像已经创建成功。您还可以看到一个Nginx镜像,这个镜像是从镜像仓库下载下来的,作为hello镜像的基础镜像使用。

# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello latest d120ec16dcea 17 minutes ago 158MBnginx alpine eeb27ee6b893 2 months ago 148MB

本地运行容器镜像…

有了镜像后,您可以在本地执行docker run命令运行容器镜像。

# docker run -p 8080:80 hellodocker run命令会启动一个容器,命令中-p是将本地机器的8080端口映射到容器的80端口,即本地机器的8080端口的流量会映射到容器的80端口,当您在本地机器访问 http://127.0.0.1:8080时,就会访问到容器中,此时浏览器中返回的内容应该就是“hello world”。

把镜像推送到镜像仓库

华为云提供了容器镜像服务SWR,您也可以将镜像上传到SWR,下面我们以华为云为例,演示如何将镜像推送到SWR。

首先登录SWR控制台,在左侧选择“我的镜像”,然后单击右侧“客户端上传镜像”,在弹出的窗口中单击“生成临时登录指令”,然后复制该指令在本地机器上执行,登录到SWR镜像仓库。

上传镜像前需要给镜像取一个完整的名称,如下所示:

# docker tag hello swr.cn-east-3.myhuaweicloud.com/container/hello:v1

详细解析如下:

swr.cn-east-3.myhuaweicloud.com是仓库地址,每个华为云区域的地址不同。

container是组织名,组织一般在SWR中创建,如果没有创建则首次上传的时候会自动创建,组织名在单个区域内全局唯一,需要选择合适的组织名称。

v1则是hello镜像分配的版本号。

然后执行docker push命令就可以将镜像上传到SWR。

# docker push swr.cn-east-3.myhuaweicloud.com/container/hello:v1当需要使用该镜像时,使用docker pull命令拉取(下载)该命令即可。

# docker pull swr.cn-east-3.myhuaweicloud.com/container/hello:v1

责任编辑:lq

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

    关注

    0

    文章

    479

    浏览量

    21874
  • 虚拟机
    +关注

    关注

    1

    文章

    851

    浏览量

    27339
  • Docker
    +关注

    关注

    0

    文章

    435

    浏览量

    11593

原文标题:容器、Docker、虚拟机,别再傻傻分不清!(建议收藏)

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    虚拟机的ip地址和主机一样吗

    虚拟机的ip地址和主机一样吗  虚拟机的IP地址和主机的IP地址通常不相同。虚拟机是在主机上通过虚拟化技术创建的虚拟化实例,它可以在同一台物
    的头像 发表于 03-26 15:34 318次阅读

    虚拟机ubuntu怎么联网

    与外部网络通信。本文将详细介绍虚拟机Ubuntu的网络连接方法以及一些常见的网络问题解决办法。 一、虚拟机网络概述 虚拟机的网络连接有多种方式,包括桥接模式(Bridge)、NAT模式
    的头像 发表于 12-27 16:51 534次阅读

    虚拟机和模拟器有哪些异同点和区别

    虚拟机和模拟器有哪些异同点和区别  虚拟机和模拟器是计算机领域中常用的技术,它们可以在一台计算机上同时运行多个操作系统或环境。虚拟机和模拟器虽然功能相似,但是在定义、实现、性能、
    的头像 发表于 12-27 16:26 1312次阅读

    虚拟机怎么进入root用户

    进入虚拟机的root用户,需要通过以下步骤完成。首先,我们需要明确一点,root用户是Linux系统下的超级管理员,具有最高权限。 第一步:打开虚拟机 首先,要确保已经安装了虚拟机软件
    的头像 发表于 11-23 10:51 6231次阅读

    怎么安装linux虚拟机

    在计算机领域,虚拟机是一种软件程序,它允许在主操作系统上运行多个虚拟操作系统。Linux虚拟机在开发、测试和学习等环境中得到广泛应用。本文将详细介绍如何安装Linux虚拟机,并提供一个
    的头像 发表于 11-23 10:50 601次阅读

    Docker与虚拟机的区别

    的操作系统实例来实现虚拟化的技术。其实现方式是通过Hypervisor来实现的。Hypervisor是一个运行在物理机上的软件或硬件,负责管理和分配虚拟机的硬件
    的头像 发表于 11-23 09:37 2113次阅读

    一种提升存储资源利用率的方法

    和带宽。为了提高云平台中的资源效率,供应商提供可驱逐的虚拟机(即Spot VMs或Harvest VMs)。这些可驱逐的虚拟机允许用户以低优先级使用未分配
    的头像 发表于 11-21 10:15 373次阅读
    一种提升存储<b class='flag-5'>资源</b>利用率的方法

    虚拟机如何运行c程序

    虚拟机(Virtual Machine,VM)是一种模拟了物理计算机的软件,可以在计算机上创建虚拟的硬件平台,使得用户可以在其中运行操作系统和应用程序。在虚拟机中运行C程序需要进行多个步骤,下面将给
    的头像 发表于 11-17 10:14 1987次阅读

    linux虚拟机怎么运行代码

    虚拟机中,你就可以开始运行代码了。在Linux中,有多种方式可以运行代码,下面将介绍几种常见的方法。 使用终端(Terminal)运行代码: 终端是Linux系统中最基本的工具之一,可以用来执行各种命令,包括运行代码。在终端中,你可以直接键入代码,
    的头像 发表于 11-17 10:12 2048次阅读

    linux虚拟机系统基本指令

    Linux虚拟机系统是一种通过虚拟化技术在物理服务器上部署多个独立的虚拟机实例的操作系统。它可以帮助用户更有效地利用硬件资源,并方便地部署和管理多个操作系统环境。本文将介绍一些常用的L
    的头像 发表于 11-17 10:04 590次阅读

    linux虚拟机怎么调出命令行

    命令行的方式可以因不同的虚拟机软件而异,下面将介绍几种常用的虚拟机软件以及它们调出命令行的方法。 VMware虚拟机 VMware是一个功能强大的
    的头像 发表于 11-17 09:55 2013次阅读

    资源虚拟机时钟跳变异常的问题处理

    资源池在运行过程中一台虚拟机出现业务异常,通过查看日志和异常记录,判断为虚拟机发生时钟跳变问题,如下图所示。
    的头像 发表于 09-20 11:08 575次阅读
    <b class='flag-5'>资源</b>池<b class='flag-5'>虚拟机</b>时钟跳变异常的问题处理

    如何在KVM上使用CCA RME虚拟机

    之前介绍了CCA设计的一个目的是让hypervisor可以创建和调度RME虚拟机和vCPU,并且给它分配内存等资源,但是一旦这些资源分配给R
    的头像 发表于 09-11 14:59 762次阅读
    如何在KVM上使用CCA RME<b class='flag-5'>虚拟机</b>?

    虚拟机下载与安装的步骤有哪些

    是一种将计算机硬件虚拟化的技术,它可以在一台物理计算机上创建一个或多个独立的虚拟计算机,每个虚拟计算机都有自己的操作系统和应用程序,并且独立于其他虚拟机运行。
    的头像 发表于 09-04 10:16 1004次阅读
    <b class='flag-5'>虚拟机</b>下载与安装的步骤有哪些

    虚拟机容器的性能损耗评测

    本文选自极术专栏“软硬件融合”,授权转自微信公众号软硬件融合,本篇将详细评测虚拟机容器的性能损耗在相关的应用场景下的性能对比。
    的头像 发表于 05-16 09:38 6431次阅读
    <b class='flag-5'>虚拟机</b>和<b class='flag-5'>容器</b>的性能损耗评测