容器精华问答 | Docker和虚拟机有什么差别?

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=png

容器技术是这两年热门的话题,因为容器技术给我们带来了很多方便的地方,节约了不少成本,不管是在运维还是开发上。今天,就让我们来看看关于容器更加有深度的问题吧。


640?wx_fmt=gif1

Q:宿主如果和容器系统不同的话,那不是和虚拟机一样,一层层的调用,那么Docker和虚拟机还有什么差别?


A:要把Windows和Linux分清楚,更要把内核(kernel)和用户空间(userland)分清楚。容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的userland不同,容器的 userland由容器镜像提供,也就是说镜像提供了rootfs。假设宿主是Ubuntu,容器是CentOS。CentOS 容器中的进程会直接向Ubuntu宿主内核发送syscall,而不会直接或间接的使用任何 Ubuntu 的 userland 的库。


这点和虚拟机有本质的不同,虚拟机是虚拟环境,在现有系统上虚拟一套物理设备,然后在虚拟环境内运行一个虚拟环境的操作系统内核,在内核之上再跑完整系统,并在里面调用进程。


还以上面的例子去考虑,虚拟机中,CentOS的进程发送syscall内核调用,该请求会被虚拟机内的CentOS的内核接到,然后CentOS内核访问虚拟硬件时,由虚拟机的服务软件截获,并使用宿主系统,也就是Ubuntu的内核及userland的库去执行。


而且,Linux和Windows在这点上非常不同。Linux的进程是直接发syscall的,而Windows则把 syscall隐藏于一层层的DLL服务之后,因此Windows的任何一个进程如果要执行,不仅仅需要 Windows内核,还需要一群服务来支撑,所以如果Windows要实现类似的机制,容器内将不会像Linux这样轻量级,而是非常臃肿。看一下微软移植的Docker就非常清楚了。


所以不要把Docker和虚拟机弄混,Docker容器只是一个进程而已,只不过利用镜像提供的 rootfs提供了调用所需的userland库支持,使得进程可以在受控环境下运行而已,它并没有虚拟出一个机器出来。


640?wx_fmt=gif2

Q:如果 Docker 升级或者重启的话,那容器是不是都会被停掉然后重启啊?

      A:在 1.12 以前的版本确实如此,但是从 1.12 开始,Docker 引擎加入了 --live-restore 参数,使用该参数可以避免引擎升级、重启导致容器停止服务的情况。

       默认情况该功能不会被启动,如需启动,需要配置 docker 服务配置文件。比如 Ubuntu 16.04 这类 systemd 的系统,可以修改 /etc/systemd/system/multi-user.target.wants/docker.service 文件,在 ExecStart= 后面配置上 --live-restore:


ExecStart=/usr/bin/dockerd \--registry-mirror=https://registry.docker-cn.com \--live-restore


    上面的格式中使用了行尾 \ 的换行形式,这点和 bash 脚本一样,systemd 支持这种换行形式,如对此不了解可以先去学习 bash 程序设计。


   需要注意的是,--live-restore 和 Swarm Mode 不兼容,所以在集群环境中不要使用。实际上集群环境也不用担心某个服务器重启的问题,因为其上的服务都会被调度到别的节点上,因此服务并不会被中断。


640?wx_fmt=gif3

      Q:怎么固定容器 IP 地址?每次重启容器都要变化 IP 地址怎么办?


      A:一般情况是不需要指定容器 IP 地址的。这不是虚拟主机,而是容器。其地址是供容器间通讯的,容器间则不用 IP 直接通讯,而使用容器名、服务名、网络别名。


    为了保持向后兼容,docker run 在不指定 --network 时,所在的网络是 default bridge,在这个网络下,需要使用 --link 参数才可以让两个容器找到对方。


       但这是有局限性的,因为这个时候使用的是 /etc/hosts 静态文件来进行的解析,比如一个主机挂了后,重新启动IP可能会改变。虽然说这种改变Docker是可能更新/etc/hosts文件,但是这有诸多问题,可能会因为竞争冒险导致 /etc/hosts 文件损毁,也可能还在运行的容器在取得 /etc/hosts 的解析结果后,不再去监视该文件是否变动。种种原因都可能会导致旧的主机无法通过容器名访问到新的主机。


       如果可能不要使用这种过时的方式,而是用下面说的自定义网络的方式。而对于新的环境(Docker 1.10以上),应该给容器建立自定义网络,同一个自定义网络中,可以使用对方容器的容器名、服务名、网络别名来找到对方。这个时候帮助进行服务发现的是Docker 内置的DNS。所以,无论容器是否重启、更换IP,内置的DNS都能正确指定到对方的位置。


640?wx_fmt=gif4

Q:如何修改容器的 /etc/hosts 文件?


A:容器内的 /etc/hosts 文件不应该被随意修改,如果必须添加主机名和 IP 地址映射关系,应该在 docker run 时使用 --add-host 参数,或者在 docker-compose.yml 中添加 extra_hosts 项。不过在用之前,应该再考虑一下真的需要修改 /etc/hosts 么?如果只是为了容器间互相访问,应该建立自定义网络,并使用 Docker 内置的 DNS 服务。


640?wx_fmt=gif5

Q:怎么映射宿主端口?Dockerfile 中的EXPOSE和 docker run -p 有什么区别?

    A:Docker中有两个概念,一个叫做 EXPOSE ,一个叫做 PUBLISH 。

      EXPOSE 是镜像/容器声明要暴露该端口,可以供其他容器使用。这种声明,在没有设定 --icc=false的时候,实际上只是一种标注,并不强制。也就是说,没有声明EXPOSE的端口,其它容器也可以访问。但是当强制--icc=false的时候,那么只有EXPOSE的端口,其它容器才可以访问。


       PUBLISH则是通过映射宿主端口,将容器的端口公开于外界,也就是说宿主之外的机器,可以通过访问宿主IP及对应的该映射端口,访问到容器对应端口,从而使用容器服务。


       EXPOSE的端口可以不PUBLISH,这样只有容器间可以访问,宿主之外无法访问。而PUBLISH 的端口,可以不事先EXPOSE,换句话说PUBLISH等于同时隐式定义了该端口要EXPOSE。


     docker run命令中的-p, -P参数,以及docker-compose.yml中的ports部分,实际上均是指PUBLISH。


       小写-p是端口映射,格式为 [宿主IP:]<宿主端口>:<容器端口>,其中宿主端口和容器端口,既可以是一个数字,也可以是一个范围,比如:1000-2000:1000-2000。对于多宿主的机器,可以指定宿主IP,不指定宿主IP时,守护所有接口。


      大写 -P 则是自动映射,将所有定义 EXPOSE 的端口,随机映射到宿主的某个端口。


小伙伴们冲鸭,后台留言区等着你!

关于容器,今天你学到了什么?还有哪些不懂的?除此还对哪些话题感兴趣?快来留言区打卡啦!留言方式:打开第XX天,答:……

同时欢迎大家搜集更多问题,投稿给我们!风里雨里留言区里等你~


----------------    --------------


1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。



推荐阅读

  • Kafka学习笔记

  • “拼多多”惊爆重大 Bug!程序员的眼泪,羊毛党的狂欢

  • “黄鳝门”视频女主播一审宣判!

  • 12306能扛住明星出轨这种流量冲击吗?

  • V神说,解释以太坊2.0最好的文章就是这篇了

  • 以太坊升级的拖油瓶,竟只是这几行代码

  • 程序员有话说 | 程序猿在乘地铁的时候都在想什么?  推 荐 


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png喜欢就点击“好看”吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云漫圈 | finally到底是在return之前执行还是return之后执行?

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;程序员乔戈里作者&#xff1a;乔戈里qgl——下课后——public class Main { public static void main(String[] args) { query(); } public static void query() { int i 0; try { …

5G大规模商用来临之前,你必须知道的几个知识点

戳蓝字“CSDN云计算”关注我们哦&#xff01;大数据文摘授权翻译自纽约时报编译&#xff1a;雪清、蒋宝尚当人们在谈论人工智能和自动驾驶的时候&#xff0c;总是离不开5G。要说4G的侧重点是人与人之间不同方式的通信&#xff0c;那么5G将要形成的端到端生态系统&#xff0c;能…

趣挨踢 | 阿里员工吐槽:我在阿里工作五年,面试一个小公司竟然挂了

戳蓝字“CSDN云计算”关注我们哦&#xff01;来自&#xff1a;互联网坊间八卦一名阿里员工在互联网社区吐槽&#xff0c;称自己工作经验丰富&#xff0c;在阿里工作了五年&#xff0c;去面试一个小互联网创业公司竟然挂了&#xff0c;真是无力吐槽&#xff1a;我就郁闷了&#…

要闻君说:亚马逊也进击开源了吗?微软收购开源软件公司Citus Data,剑指云服务!投资15亿的数据中心忠德粤桂云来了!...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。工作日的最后一周&#xff0c;有没有很兴奋&#xff1f;边学习边听歌吧&#xff01;文/要闻君近日&#xff0c;AWS宣布推出Neo-AI项目…

Spark精华问答 | Spark的三种运行模式有何区别?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spark是一个针对超大数据集合的低延迟的集群分布式计算系统&#xff0c;比MapReducer快40倍左右&#xff0c;是hadoop的升级版本&#xff0c;Hadoop作为第一代产品使用HDFS&#xff0c;第二代加入了Cache来保存中间计算结果&#xf…

Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

戳蓝字“CSDN云计算”关注我们哦&#xff01;简书ID&#xff1a;我没有三颗心脏 github&#xff1a;wmyskxz 欢迎关注公众微信号&#xff1a;wmyskxz前言&#xff1a;由于之前没有接触过Hibernate框架&#xff0c;但是最近看一些博客深深被它的“效率”所吸引&#xff0c;所以…

云重磅 | 阿里云开源Blink;华为发布5G Cloud VR;AWS 将举行AI 大会 re;英伟达下调5亿美元业绩预期...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周二第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

虚拟化精华问答 | 虚拟化会使管理更轻松吗?

戳蓝字“CSDN云计算”关注我们哦&#xff01;虚拟化是实现动态IT的重要基石&#xff0c;在虚拟化蓬勃发展的这些年里&#xff0c;虚拟化可以根据不同划分标准进行分类&#xff0c;包括全虚拟化&#xff0c;CPU 虚拟化&#xff0c;硬件虚拟化&#xff0c;服务器虚拟化等等&#…

Storm精华问答 | 为什么这么多人用Spark而不用Storm?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Storm被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍&#xff0c;以及大数据实时处理解决方案的应用日趋广泛&#xff0c;目前已是分布式技术领域最新爆发点&#xff0c;而Storm更是流计算技术中的佼…

聊聊云计算:为什么构建网站时常会用到负载均衡

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;疯子程序员来源&#xff1a;https://blog.csdn.net/qq_40196321/article/details/85075746 负载均衡可以将客户端请求分摊到多个操作单元上进行处理硬件负载均衡负载均衡有很多种不同的实现方式&#xff0c;总的来说…

要闻君说:阿里云联合8家芯片模组商推出“全平台通信模组”;北汽与小桔车服联合“京桔”;IBM要帮助印度公司打造5G战略!...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。盼望着、盼望着&#xff0c;放假的日子又临近了一步&#xff0c;抢先祝福各位看官们新年快乐哈&#xff01;文/要闻君近日&#xff0…

揭开容器的神秘面纱:帮助初学者深入了解容器技术

戳蓝字“CSDN云计算”关注我们哦&#xff01;本文转载自&#xff1a;Docker 简介无论你是学生&#xff0c;还是公司的开发人员&#xff0c;或是软件爱好者&#xff0c;相信你都听说过容器。 你可能还听说容器是轻量级虚拟机&#xff0c;但这究竟意味着什么&#xff0c;容器究竟…

微服务精华问答 | 微服务有什么优点和不足呢?

戳蓝字“CSDN云计算”关注我们哦&#xff01;过去几年来&#xff0c;“微服务架构”这个术语出现了&#xff0c;它描述了一种将软件应用程序设计为可独立部署的服务套件的特定方式。尽管这种架构风格没有确切的定义&#xff0c;但围绕业务能力&#xff0c;自动化部署&#xff0…

Gartner预测2019年全球IT支出将达到3.8万亿美元

戳蓝字“CSDN云计算”关注我们哦&#xff01;【2019年1月29日】全球领先的信息技术研究和顾问公司Gartner表示&#xff0c;2019年全球IT支出将达到3.76万亿美元&#xff0c;较2018年增长3.2%。Gartner研究副总裁John-David Lovelock表示&#xff1a;“尽管经济衰退传闻、英国脱…

4个最受欢迎的大数据可视化工具!

戳蓝字“CSDN云计算”关注我们哦&#xff01;想像阅读书本一样阅读数据流&#xff1f;这只有在电影中才有可能发生。 在现实世界中&#xff0c;企业必须使用数据可视化工具来读取原始数据的趋势和模式。大数据可视化是进行各种大数据分析解决的最重要组成部分之一。 一旦原始数…

边缘计算与物联网精华问答 | 边缘计算和物联网有什么关系?

戳蓝字“CSDN云计算”关注我们哦&#xff01;随着物联网时代到来&#xff0c;云计算平台将面临着海量设备接入、海量数据等高难度挑战,这使得云计算中心实时返回数据决策也变成了不可能的任务。于是&#xff0c;边缘计算开始进入到公众的视线。1Q&#xff1a;边缘计算和物联网有…

要闻君说:FaceTime的服务究竟坑有多大?CNCF 技术监督委员会首添中国面孔,来自阿里!高通华为暂和解……...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。终于等到了工作日的最后一天&#xff0c;内心狂喜&#xff0c;想必有的看官已经放假啦。十分感谢小伙伴们长达一月的陪伴&#xff0c…

C语言 fprintf 函数 - C语言零基础入门教程

目录 一.fprintf 函数简介二.fprintf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fprintf 函数简介 fprintf 是 C / C 中的一个格式化库函数&#xff0c;位于头文件 中&#xff0c;其作用是格式化输出到一个流文件中&#xff1…

云漫圈 | 漫画:什么是加密算法?

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;程序员小灰作者&#xff1a;小灰加密算法的历史加密算法最早诞生在什么时候&#xff1f;是在计算机出现之后吗&#xff1f;不不不&#xff0c;早在古罗马时期&#xff0c;加密算法就被应用于战争当中。在大规模…

深入浅出大数据:到底什么是Hadoop?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;小枣君来源&#xff1a;鲜枣课堂1998年9月4日&#xff0c;Google公司在美国硅谷成立。正如大家所知&#xff0c;它是一家做搜索引擎起家的公司。无独有偶&#xff0c;一位名叫Doug Cutting的美国工程师&#xff0c…