docker - Docker镜像共享OS系统文件和配置?
问题描述
考虑一下我有以下来自 ubuntu 旧版本的 Dockerfile 说 14.0.4
FROM php:7.2-apache
COPY ./ /var/www/html/
EXPOSE 80
我从最近的 docker 学习中了解到,docker 将所有必需的文件保存在映像中,我们可以在任何地方作为容器运行,而与环境无关。
我的问题是这个图像是否还包含操作系统(Ubuntu 14.0.4)特定的文件/库(内核除外)?现在,如果我在 Ubuntu 16.0.4 上运行此映像,它会在 14.0.4 操作系统和 16.0.4 内核上运行吗?
解决方案
Docker 镜像包含所有文件系统相关文件,您可以将其视为没有内核的系统。
从您的 dockerfile 中,您的图像基于php:7.2-apache
,因此对于您的情况:
您在一台 14.0.4 主机上运行容器:
它使用 的文件
php:7.2-apache
,共享你主机的内核,也就是 14.0.4 的内核。您在一台 16.0.4 主机上运行容器:
它使用 的文件
php:7.2-apache
,共享你主机的内核,也就是 16.0.4 的内核。
总结一下:
Docker 容器只共享主机内核,从不共享主机文件。
对于您的场景,php:7.2-apache
dockerfile 在这里,所以它只使用debian:stretch-slim
.
下一张图片可能会让你明白。在这张图中,你可以看到ubuntu:15.04
是在 的块内Image layers
,所以在构建了一个镜像之后,容器将使用的系统已经固定,Container layer
只需从 共享内核即可host machine
。
推荐阅读
- c# - 无法将成分对象传递给新的配方对象
- javascript - 将变量属性新值添加到以前的值(javascript)
- angular - ngrx 9 不给我数据
- python - NOT NULL 约束 Django
- javascript - 将 JavaScript 限制为仅在元素内部工作
- angular - Angular 8:“typeof Observable”类型上不存在属性“of”
- openssl - OpenSSL Libarary:ECDSA:如何将未压缩的公钥转换为压缩的`
- r - 如何在 R 中不使用均值函数计算均值?
- vba - 按存储在用户定义字段中的用户名过滤共享收件箱邮件
- tfs - 如何将 Visual Studio 2019 连接到 TFS 服务器