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

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

3天内不再提示

容器、Docker、虚拟机的区别

璟琰乀 来源:华为云社区 作者:yixiaoer 2020-11-05 09:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

容器技术起源于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镜像打包一个容器镜像,并基于容器镜像运行应用,然后推送到容器镜像仓库。

安装DockerDocker几乎支持在所有操作系统上安装,用户可以根据需要选择要安装的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 hello

docker 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

-END-

本文摘自华为云社区

作者 | yixiaoer

责任编辑:haq

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

    关注

    88

    文章

    11627

    浏览量

    217888
  • 服务器
    +关注

    关注

    13

    文章

    10092

    浏览量

    90854
  • 虚拟机
    +关注

    关注

    1

    文章

    968

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    搭建自己的ubuntu系统之创建ubuntu虚拟机

    打开VMware软件,点击创建新的虚拟机。进入以下界面:选择自定义,点击“下一步”。选择对应VMware版本的兼容性,版本可在帮助->关于VMware Workstation中
    发表于 09-25 09:39

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

    Docker实战流程。1.Docker简介Docker本质是轻量级虚拟化技术,通过容器化机制打包应用及其依赖环境。与传统
    的头像 发表于 06-27 12:01 3174次阅读
    干货分享 | RK3588 Ubuntu系统<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>使用指南

    中软国际鸿云虚拟机安装指南

    鸿蒙电脑作为新一代分布式计算平台,凭借其卓越的多端协同能力和智能化特性,为高效办公提供了新选择。针对专业软件兼容性这一核心痛点,中软国际的鸿云虚拟机解决方案提供了务实的技术路径。作为专为鸿蒙生态打造
    的头像 发表于 06-23 16:31 2785次阅读

    TECS OpenStack资源池虚拟机网络二层地址无法互通的问题处理

    某运营商TECS OpenStack使用主机overlay SDN方案组网,运维人员在创建虚拟机测试虚拟机网络状态时发现问题:在其中一台主机上创建两台同网段虚拟机虚拟机之间二层地址无
    的头像 发表于 06-12 09:28 675次阅读
    TECS OpenStack资源池<b class='flag-5'>虚拟机</b>网络二层地址无法互通的问题处理

    hyper 备份,Hyper备份:虚拟机备份与恢复

    的解决方案。今天就为大家介绍Hyper备份:虚拟机备份与恢复。    在虚拟化环境中,备份和恢复虚拟机是确保数据安全和业务连续性的关键操作。Hyper-V提供了多种备份和恢复方法,帮助用户灵活地管理
    的头像 发表于 02-08 09:53 1408次阅读
    hyper 备份,Hyper备份:<b class='flag-5'>虚拟机</b>备份与恢复

    hyper-v虚拟机,为何需要用hyper-v虚拟机

    随着科技的飞速发展,各类任务与数据量急剧攀升,批量管理恰似航行在信息海洋中的坚固灯塔,照亮高效管理的航道。今天小编给大家分享为何需要用hyper-v虚拟机。 使用Hyper-V虚拟机的主要原因包括
    的头像 发表于 02-07 13:37 750次阅读
    hyper-v<b class='flag-5'>虚拟机</b>,为何需要用hyper-v<b class='flag-5'>虚拟机</b>?

    hyper v 上网,Hyper-V上网:虚拟机网络配置

    大家介绍Hyper-V上网:虚拟机网络配置。    在Hyper-V环境中,正确配置虚拟机的网络设置是确保虚拟机能够正常访问外部网络的关键。以下是详细的Hyper-V虚拟机网络配置指南
    的头像 发表于 02-06 10:29 4117次阅读
    hyper v 上网,Hyper-V上网:<b class='flag-5'>虚拟机</b>网络配置

    hyper cpu,Hyper CPU优化:提升虚拟机性能

    :提升虚拟机性能。    在虚拟化环境中,CPU性能优化对于提升虚拟机的整体性能至关重要。Hyper-V提供了多种工具和策略,帮助用户根据虚拟机的工作负载需求合理分配和优化CPU资源。
    的头像 发表于 02-06 10:25 1544次阅读
    hyper cpu,Hyper CPU优化:提升<b class='flag-5'>虚拟机</b>性能

    hyper-v 备份,hyper-v怎样进行虚拟机的创建

    虚拟机技术打破了传统计算机的限制,为我们带来了全新的计算机模式。今天给大家介绍hyper-v怎样进行虚拟机的创建?    hyper-v怎样进行虚拟机的创建?    使用PowerShell启用,以
    的头像 发表于 02-05 14:54 793次阅读
    hyper-v 备份,hyper-v怎样进行<b class='flag-5'>虚拟机</b>的创建

    hyper v 删除,怎么样删除hyper-v中的虚拟机

    对于任何追求卓越运营的企业而言,批量管理如同精密时钟的核心齿轮,精准地调控着各项业务的有序运转。今天小编要带来怎么样删除hyper-v中的虚拟机。    要删除Hyper-V中的虚拟机,可以按照以下
    的头像 发表于 02-05 13:39 1504次阅读
    hyper v 删除,怎么样删除hyper-v中的<b class='flag-5'>虚拟机</b>?

    hyper内存条,hyper-v 添加虚拟机还需要硬盘吗

    在计算机技术的浩瀚星空中,虚拟机犹如一颗璀璨的明星,散发着独特的光芒。今天给大家介绍hyper-v添加虚拟机还需要硬盘吗?    hyper-v添加虚拟机还需要硬盘吗?    Hyper-V是
    的头像 发表于 01-24 14:01 695次阅读
    hyper内存条,hyper-v 添加<b class='flag-5'>虚拟机</b>还需要硬盘吗

    vSAN数据恢复—异常断电导致虚拟机无法启动的vSAN数据恢复案例

    异常断电导致vSAN存储上层虚拟机无法启动。
    的头像 发表于 01-08 13:18 692次阅读
    vSAN数据恢复—异常断电导致<b class='flag-5'>虚拟机</b>无法启动的vSAN数据恢复案例

    Ubuntu系统的虚拟机安装步骤 如何在Ubuntu系统上编译软件

    Ubuntu系统上安装虚拟机的步骤 在Ubuntu系统上安装虚拟机是一个相对简单的过程,通常可以通过安装VirtualBox或KVM等虚拟化软件来实现。以下是使用VirtualBox在Ubuntu
    的头像 发表于 12-12 14:36 1857次阅读

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

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

    Hyper-V创建虚拟机配置IP等网络配置原理(Linux、Windows为例)

    大家知道Windows系统里面内置了Hyper-V管理器,用来创建和管理本地虚拟机环境。今天我创建了两台虚拟机,一台是CentOS7.9(Linux),另一台是Windows 11,然后发现
    的头像 发表于 12-09 10:24 5565次阅读
    Hyper-V创建<b class='flag-5'>虚拟机</b>配置IP等网络配置原理(Linux、Windows为例)