che*_*yin 22 docker dockerfile
我听说 docker 在 linux 中不需要单独的操作系统,因为它与主机操作系统共享,但是在 hyper-v Windows 中它可以运行 Windows 操作系统,因为它可以超 linux 虚拟机,因此可以在其上运行 linux 软件。
但是,我FROM对 dockerfile 中的阶段感到困惑,所有指南都这样说:
FROM ubuntu:18.04
cp . /usr/local/bin
RUN make
CMD /usr/local/bin/youapp
Run Code Online (Sandbox Code Playgroud)
我可以理解这一步,首先你需要一个操作系统,然后你部署你的应用程序;最后你运行你的应用程序或其他什么。
但是 FROM 阶段的真正含义是什么?
它总是需要操作系统吗?nginx docker 映像中是否有操作系统?
如果我想构建自己的应用程序,我会编写它、编译它、运行它;但是我自己的应用程序需要操作系统吗?如果不是,我应该在FROM阶段写什么?
我得到了这张图片,它说 docker 容器不需要 os,但使用主机 os,现在 docker build 总是需要一个 os

Daz*_*kin 10
主机上的容器共享(主机的)内核,但每个容器必须提供它需要的操作系统(的子集)。
在 Windows 中,内核:OS 有 1:1 的映射,但在 Linux 中,内核被捆绑到各种操作系统中:Debian、Ubuntu、Alpine、SuSE、CoreOS 等。
该FROM语句通常引用一个操作系统,但它不需要,并且通常没有必要(也不是一个好主意)将操作系统捆绑在容器中。容器应该只包含它需要的东西。
NGINX 镜像使用 Debian ( Dockerfile )。
在某些情况下,容器进程没有内核之外的依赖项。在这些情况下,FROM: scratch可以使用不添加任何其他内容的特殊内容。这是一个空图像(链接)。
不,它不是那样的。要使用 DockerFile 创建任何 docker 镜像,您需要从基础docker 镜像开始。该基础 docker 图像可以是任何内容,也可以是空图像,在您示例中的 docker 文件中,FROM部分说的是 ubuntu,这意味着它假设 ubuntu 作为基础图像。它并不总是需要将操作系统作为基本映像。
按照此链接 - https://linuxhint.com/create_docker_image_from_scratch/ 这将消除您对基础映像的疑虑。
现在我得到答案了
From 阶段导入软件,但不导入带有内核的操作系统
它只是为你的应用程序提供一个平台,你在FROM阶段写的ubuntu、debian、centos只是一个软件,真正的内核与它们没有关系。
所以如果你的应用程序可以依赖运行,它必须像 hello-world 一样,只是一个二进制包,不依赖任何其他库。但大多数情况下你需要一个操作系统,因为他们有你需要的库。
| 归档时间: |
|
| 查看次数: |
5849 次 |
| 最近记录: |