Linux上部署的docker服务可以部署windows容器么?
先回答:
1.大体正确。不能算对。
2.不正确。
3.不可能,只有Windows平台的Docker有Windows容器。
由于三个问题都是讲的容器占磁盘空间的问题。我就合并分析了。回答之前,还要做一件事就是灭掉B站。什么叫增量型的技术?那反过来什么技术用了以后服务器的功能减少了?新的减肥神教吗?不存在的名词,服务器里该有Apache服务就有,没有Docker,Apache还不吃饭了,Apache早就有了。
介绍一个爆炸型的技术,叫halt。
倒过来回答,免得被我啰嗦到。Docker容器占用磁盘小的原因是,没有文档及声明信息。容器里man命令是无法调用各个命令对应的操作手册的。/usr/include目录也没有内容。License和bannar也是没有的。只有程序和相关配置,容量减少约100M+。仅此而已。
可以通过包管理器命令加回来。
另外,选用的发行版一般是alpine、debian、centos或他们的衍生版本。为什么?因为他们的包不包含引用编译用的资料,通常来说就是不包含dev/devel类型的数据。
然后再讲一个问题,Docker内软件运行后,系统里是显示这个软件的进程,与平常系统运行的软件是无法区分的(默认,非内核隔离模式)。所以Docker并没有虚拟化,而是运行在系统内核下这个是没错的。
不过,一般来说Linux下各个发行版的软件并不通用。同一发行版各个版本之间的软件还是有不能通用的风险。Docker内部之所以可以畅通无阻地运行,主要是由于Docker翻译了软件对内核的System Call。Docker的价值和伟大便在此。
综上,Docker运行Apache,只是为了方便维护,避免各种服务软件间的环境冲突。运行效率是有损失的。由于Docker自带了环境(主要是网络),Apache通过Docker可以实现多开。
Docker挤压的是虚拟化的使用场景。
所以,Windows容器断不能出现在Linux Docker里。Windows不开源,要做到,必然是逆向工程的活,这是脏活,Wine干了,Docker不屑。于是,理所当然,Windows下Linux容器需要Hyper-V(默认,或VirtualBox)。鸡同鸭讲,Docker也不行了。
不但如此,Docker还不能跨架构,除非使用Rosetta或Qemu。这一点上苹果Silicon比较划算,属于超级两面派。
问题一:可以这么理解。
问题二:是的,Linux都是Linux,不要拘泥于发行版,Ubuntu,centos,opensuse...这些都是用的Linux内核,可能这个用了4.0那个用了3.7这种。
问题三:CentOS不能通过Docker直接部署Windows容器,这等于是跨了不同类型的操作系统了,需要注意的是,Linux的Docker本身需要Linux kernel功能的支持,如果内核不支持Cgroups、Namespace,那么也不用考虑了。
问题1 正确。 问题2 正确。
问题3: 好像没有windows容器吧,windowns上部署的docker也是有一个linux虚拟机的,其实还是部署到了linux上。
简单给你介绍下:
linux, linux有狠多发行版、还有linux内核有啥关系呢? linux发行版肯定用的是linux内核,发行版不过在linux内核上装了不同的程序,最重要的两套程序: 一个是桌面环境、另一个是包管理器。
docker: docker是linux的隔离机制实现的,为了方便使用,又增加了一部分功能。
docker版的ubuntu,其实就是把ubuntu使用的软件安装到了docker里面,它是不带linux内核的,也不带桌面环境。(docker还实现不了显示,即使安装了桌面环境也无法展示到显示器里面,所以大家都没安装桌面。估计后续也不会实现,毕竟它不是为了搞这个的。)
docker版的apache呢,其实就是把apache的程序和配置安装到了docker内部。但是有个前提,docker需要基于某个发行版,比如基于ubuntu,那么安装时就会下载ubuntu + apache,为啥要这么做呢,主要是apache可能依赖很多软件,这样可以复用ubuntu的包管理器安装。(golang语言是纯源码编译的,编译完就一个二进制程序 ,它的程序没有任何依赖,golang的程序的docker就可以直接使用linux内核,把容器做到很小)
apache的docker 本身就是运行apache程序的,你进入容器就只能看到apache相关的进程,不会也不应该包含其他进程。docker只是将apache这个程序隔离出来了,在宿主机上, 你也可以看到docker内运行的进程。所以docker是一种隔离机制,和虚拟机完全不同的东西,虽然很多人把docker看成虚拟化的一部分。
docker最明显的好处,程序你只需要安装到docker一次,就可以在不同的机器上运行,甭管它是啥内核版本的linux,不需要关系依赖问题。
----- 补充下----感谢评论区网友支持----
因为很长时间没接触win了,看了下win的容器文档。 win确实搞了一套容器。
win的容器和linux之间应该存在隔离的,linux目测应该无法直接部署win的容器应用,两者容器理论上是一致的。 两者还是存在一定的生殖隔离,毕竟容器内部还是各自的程序。
本来windows的linux子系统还想把namespace也实现了来支持docker,后来发现有修不完的兼容性问题还是用虚拟机支持了
docker内都是linux程序,不能直接裸跑在win上的。要么虚拟机、要么子系统,必须有linux环境。 mac系统下docker同样用的虚拟机。
-----------------
只有Windows平台的Docker有Windows容器------------ 虽然是几年前的话题,但时代变了,换句话说,就是聪明的人太多了,Dockur/Window 解决了linux 的docker无法跑windows,不过这个也是很蛋疼的方案,linux的docker跑kvm再虚拟化跑win...
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/10773.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~