gpt4 book ai didi

image - 我怎么能从无到有构建 docker 镜像?

转载 作者:行者123 更新时间:2023-12-01 11:15:18 27 4
gpt4 key购买 nike

我已经有一些 docker 经验,但是我构建的所有图像都基于其他图像。

我还是不知道第一个 docker 镜像是从哪里来的?
换句话说,如果我需要一个特定的图像,比如ubuntu,它与官方图像有很大的不同呢?

20180928更新:
根据目前的回答和评论,似乎是 scratch是非常原始的图像。每个图像都是从它构建的。那么问题来了:什么是划痕?请大家用普通话解释一下好吗?

20180929更新:
根据评论中链接的信息,确实,图像(例如 light/hello:latest)内置 FROM scratch没有额外的文件,但添加了什么。从 light/hello:latest 启动一个容器后,除了我们添加的文件,还有更多的文件和目录。

现在我知道了,由于每个容器都必须有一个根文件系统才能执行,这些额外的文件和目录是由容器运行时实现(runC/libcontainer)基于 runC libcontainer 规范 v1 创建的,该规范遵循 OCI 运行时规范。

现在回到我的困惑:什么是划痕?这是Docker保留的一些技巧吗?就像Java项目一样,总是从一个main函数开始:public static void main(String[] args) ?

更新 20181008:
现在我认为我应该弄清楚的第一种方法是 docker 图像实际上是什么。怎么做呢?如果可能和必要,你可以在这里放一些源代码。请给我亮光。

提前致谢。

最佳答案

A 基础镜像 要么在其 Dockerfile 中没有 FROM 行,要么有 发件人 划痕。

A 父图像 是您的图像所基于的图像。它指的是的内容发件人 Dockerfile 中的指令。

使用scratch创建一个简单的父图像

You can use Docker’s reserved, minimal image, scratch, as a starting point for building containers. Using the scratch “image” signals to the build process that you want the next command in the Dockerfile to be the first filesystem layer in your image.

While scratch appears in Docker’s repository on the hub, you can’t pull it, run it, or tag any image with the name scratch. Instead, you can refer to it in your Dockerfile. For example, to create a minimal container using scratch:


FROM scratch
ADD hello /
CMD ["/hello"]

Assuming you built the “hello” executable example by following the instructions at https://github.com/docker-library/hello-world/, and you compiled it with the -static flag, you can build this Docker image using this docker build command:


docker build --tag hello .

从头开始
一个明确的空图像,特别是用于“从头开始”构建图像

This image is most useful in the context of building base images (such as debian and busybox) or super minimal images (that contain only a single binary and whatever it requires, such as hello-world).



scratch 不会向您的 docker 镜像添加图层。但为什么要划伤?它因为

A root filesystem must be provided to a container for execution. The container will use this root filesystem (rootfs) to jail and spawn processes inside where the binaries and system libraries are local to that directory. Any binaries to be executed must be contained within this rootfs.



develop-images baseimages

关于image - 我怎么能从无到有构建 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52549826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com