为什么你需要Docker的基本图像?
我已经浏览了该文件的每一页 我仍然不明白,为什么在安装/创建应用程序环境之前,需要“基本映像”(例如,Ubuntu基本映像)来提供容器 我的问题是:为什么你需要Docker的基本图像?,docker,Docker,我已经浏览了该文件的每一页 我仍然不明白,为什么在安装/创建应用程序环境之前,需要“基本映像”(例如,Ubuntu基本映像)来提供容器 我的问题是: 什么是基础映像?为什么需要它 为什么不能像Python的virtualenv那样创建一个容器并将应用程序放入其中 事实上,它通过应用添加到基础图像的层来工作。由于您必须保持所有这些层之间的一致性,因此您不能将第一幅图像基于移动目标(即您的可写文件系统)。因此,您需要一个永远保持不变的只读映像 以下是关于以下内容的文档摘录: 由于Docker使用U
- 什么是基础映像?为什么需要它
- 为什么不能像Python的virtualenv那样创建一个容器并将应用程序放入其中
简单地说,我可以解释..当我们以类似的方式为应用程序使用某些库和节点包时,我们可以使用已经制作好的基本图像,并将其用于简单搜索。您还可以定义自己的基本图像并加以利用。来源: “容器只不过是一个正在运行的进程,它应用了一些附加的封装功能,以使其与主机和其他容器隔离 容器隔离最重要的一个方面是*每个容器都与自己的私有文件系统交互;该文件系统由Docker映像提供(就像任何Linux操作系统的映像一样,它也是基本映像。)。“最终映像可能包括多个层,这些层只是一些其他文件系统更改。与运行Java应用程序一样,您将JDK层放在基本Linux映像的顶部
*信用:从拍摄的图像图像只是文件系统和依赖项的快照,或者是特定应用程序/软件的特定目录集。我所说的快照,是指在容器环境中使用基本配置运行该软件(例如mysql、redis等)所需的文件的副本。当您使用映像创建容器时,系统中的一小部分资源在名称空间和cgroups的帮助下被隔离,然后映像中的文件被复制到这个隔离的资源环境中 让我们了解什么是基本图像: 基本图像是我们最终要创建的图像的起点或初始步骤 假设您想要一个运行redis的图像(这是一个愚蠢的示例,您可以通过另一种方式实现它,但为了解释起见,您认为您不会在docker hub上找到该图像),您需要一个起点来创建该图像。所以,让我们把阿尔卑斯山的图像作为基础图像。 Alpine是最轻的图像,其中包含仅用于运行基本命令的文件(例如:ls、cd、apk add in the container) 使用以下命令创建Dockerfile: 现在,当您运行
docker build.
命令时,它会给出以下输出:
此输出显示,在步骤1/3中,它获取基本alpine图像,在步骤2/3中,向其添加一层redis,然后在启动容器时执行步骤3/3中的redis server
命令。RUN
命令仅在生成映像时执行
对输出的进一步解释超出了本问题的范围
因此,当您从docker hub中提取图像时,它只有运行基本需求的配置。当您需要向映像添加自己的需求和配置时,您可以创建一个
Docker文件
,并在基础映像上逐层添加依赖项,以便根据需要运行它。那么,基础映像是一个与Docker容器一起打包的OS映像吗?这是否意味着使用Ubuntu基本映像创建的容器将在基于RHEL的系统上运行?谢谢是的,你可以使用任何风格的基础形象,无论是你的主机。
FROM alpine
RUN apk add --update redis
CMD ["redis-server"]
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM alpine
---> a24bb4013296
Step 2/3 : RUN apk add --update redis
---> Running in 535bfd2d1ff1
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-
cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/1) Installing redis (5.0.9-r0)
Executing redis-5.0.9-r0.pre-install
Executing redis-5.0.9-r0.post-install
Executing busybox-1.31.1-r16.trigger
OK: 7 MiB in 15 packages
Removing intermediate container 535bfd2d1ff1
---> 4c288890433b
Step 3/3 : CMD ["redis-server"]
---> Running in 7f01a4da3209
Removing intermediate container 7f01a4da3209
---> fc26d7967402
Successfully built fc26d7967402