Docker镜像是否跟操作系统相关的?还是跨平台的?

镜像是跟操作系统相关的吧? 比如我要下载一个nginx的镜像,如果我在mac docker下运行,就应该下一个mac docker下的nginx镜像; 如果在linux docker运行,就下一个linux docker 的nginx镜像 ? 还是镜像运行在docker引擎下,引擎已经跨平台了?

参与41
  • 所有的镜像都是运行在,docker 引擎之上,但是docker 又依赖于操作系统内核,所以docker 软件自身是分操作系统部署的,但是镜像不需要,windows中也可以通过wsl来运行Linux 相关程序
    2016-11-03

5同行回答

linux_zcylinux_zcy技术总监希云cSphere
先给你答案,然后再给你说一下细节:Docker镜像和操作系统没关系,docker最大的价值就是提出了镜像打包技术。首先你的明白什么是docker,什么是镜像,什么是容器,然后你就能明白镜像和操作系统之间的关系。docker是一个引擎,是基于内核的一种技术。比如Linux内核,那么它就关心是不是L...显示全部

先给你答案,然后再给你说一下细节:

Docker镜像和操作系统没关系,docker最大的价值就是提出了镜像打包技术。

首先你的明白什么是docker,什么是镜像,什么是容器,然后你就能明白镜像和操作系统之间的关系。

docker是一个引擎,是基于内核的一种技术。比如Linux内核,那么它就关心是不是Linux内核,它不关心你是Ubuntu还是CentOS。所以docker也实现了和操作系统的解耦。

镜像呢是把服务的运行环境打成了一个包,比如tomcat,镜像里面是把除操作系统的内核以外,然后再加上tomcat的二进制包。然后通过docker引擎构建出来一个tomcat的镜像。

容器呢,比如我们想创建一个tomcat服务,之前的方式是在服务器中通过tar或者是rpm安装一个tomcat,然后在start tomcat;如果我们要安装多台的话我们需要多次手动去操作部署。现在有了tomcat镜像以后,我们可以直接利用镜像创建出多个tomcat来(关系是一个tomcat镜像可以创建出多个tomcat容器-即tomcat服务),把容器看成是tomcat的进程就行。

明白他们3个之间的关系,你应该就能明白镜像和操作系统之间的关系了吧。其实这个问题最好是换成docker和操作系统的关系,这样理解起来更容易。

收起
互联网服务 · 2016-11-03
浏览28206
  • 感谢耐心回答。我的困惑在于这两种理解。一种是镜像运行在Docker引擎上,然后由Dokcer for linux, Docker for windows, Docker for mac 来屏蔽操作系统层面的差异,从而做到了镜像是跨平台的。类比的机制是Java的JVM,Java可以跨平台运行,但不同操作系统得预先安装针对本操作系统的JVM。另一种理解镜像并没有发明类似Java的字节码,这种中间语言,我们追究下镜像到底是什么,按您刚才说的“镜像是抠除了Linux内核,留下Tomcat的二进制包”。它是个“二进制包”,还原后必须依赖于Linux内核。这里Linux内核或许可以说跨Ubuntu,跨CentOS,但不跨windows吧,mac吧?不少人会反馈说:mac下是需要运行在virtualbox虚拟主机上的。但docker最新推出的“docker for mac” 有句模棱两可的话 “Docker does not rely on Virtualbox but may not work properly on systems with VirtualBox versions prior to v4.3.30 VirtualBox v4.3.28 is currently installed. Please upgrade or uninstall Virtualbox.” 一方面明确说它不依赖virtual box,另一方面有它,如果版本低,很可能出问题。
    2016-11-03
  • 个人觉得引擎,镜像,容器 那些使用层面的概念是不足以解释是否跨平台的。使用层面的概念: https://mp.weixin.qq.com/s?__biz=MzA4MjQ0ODU2Ng==&mid=2247483655&idx=1&sn=c6e5ad9a256c99ec5b83b6a295cce7e5&chksm=9f84d8dea8f351c8b9f46c262b99f7cf48258a160f87c923e5eb1758de1d57e0a709f514c3dd&mpshare=1&scene=1&srcid=1102TN3ZIhwikPULNYAR0Z5V&pass_ticket=%2BRr6T6y57i3oOW7dFNvXyuUdkcnEnYnC60DLkkx5798%3D#rd
    2016-11-03
  • docker它是基于内核的一种技术,但不是虚拟化技术!运行在windows上需要下载for windows的版本,之前么有出windows,mac版本大家都是在上面安装一个virtualbox虚拟一个linux系统来跑docker,现在docker官方专门支持了mac系统,下载对应的包就行?微软也在研发windows docker,因为windows和linux内核不一样,所以现在大家都是用在linux上,微软的docker就支持2016,2008,2012,2016,这些版本我们公司希云cSphere支持了! docker的镜像其实是个tar文件,只要有对应的docker引擎,就可以通过镜像创建出容器来!
    2016-11-05
  • 现在docker官方专门支持了mac系统,不用再下载virtualbox就可以使用docker,下载对应的包安装就行。 微软的docker目前还不稳定,而且还就支持2016,国内企业大多是2008,2012,所以大家现在都用在linux上!
    2016-11-05
  • 对。后来在一个群里面讨论了。windows有原生docker,同时切换到linux 内核模式,还可以支持linux docker image。docker for mac 里面有类似linux内核的东西。所以结论是,不能笼统说docker image是否是跨平台。
    2016-11-16
nexposenexpose其它阳光信保
所有的镜像都是运行在,docker 引擎之上,但是docker 又依赖于操作系统内核,所以docker 软件自身是分操作系统部署的,但是镜像不需要,windows中也可以通过wsl来运行Linux 相关程序显示全部

所有的镜像都是运行在,docker 引擎之上,但是docker 又依赖于操作系统内核,所以docker 软件自身是分操作系统部署的,但是镜像不需要,windows中也可以通过wsl来运行Linux 相关程序

收起
保险 · 2016-11-03
浏览26682
nexposenexpose其它阳光信保
跨平台是也是docker 最有价值的特点之一,无论什么平台,一个镜像,任意运行显示全部

跨平台是也是docker 最有价值的特点之一,无论什么平台,一个镜像,任意运行

收起
保险 · 2016-11-03
浏览26730
asdf-asdfasdf-asdf研究学者cloudstone
docker 镜像是  平台相关的  linux 镜像 可以用在   linux 和windows下面的docker 上而power系列  只能用在power系列上显示全部

docker 镜像是  平台相关的  linux 镜像 可以用在   linux 和windows下面的docker 上

而power系列  只能用在power系列上

收起
软件开发 · 2016-11-04
浏览26781
狄俄尼索斯狄俄尼索斯软件架构设计师UProject
看了一下上面的一些回答有点乱。Docker镜像是操作系统族相关的,外面所谓的build once run anywhere是有前提条件的,是在Linux这个操作系统族内才生效。不同操作系统族的镜像不能共用。微软从WinServer1709开始支持Windows容器,就是容器内跑Windows应用,Host主机是Windows。这...显示全部

看了一下上面的一些回答有点乱。Docker镜像是操作系统相关的,外面所谓的build once run anywhere是有前提条件的,是在Linux这个操作系统族内才生效。

  1. 不同操作系统族的镜像不能共用。微软从WinServer1709开始支持Windows容器,就是容器内跑Windows应用,Host主机是Windows。这写镜像只能在Windows跑,不能放到其他平台跑。
  2. 不同CPU体系的镜像不能共用。X86与ARM64的镜像是不能共用的,dockerhub官网专门有一个ARM64的镜像分类: arm64v8
收起
互联网服务 · 2019-07-20
浏览17006

提问者

tenebaul
网站架构师BAT
擅长领域: 容器引擎服务器云计算

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2016-11-02
  • 关注会员:6 人
  • 问题浏览:34378
  • 最近回答:2019-07-20
  • X社区推广