我正在将图像保存到tar文件中,如下所示
< code>docker保存我的图像:最新
FROM scratch
ADD myimage.tar.gz
但是构建失败了。有人能帮我一下吗?如何在Dockerfile中发送tar文件?
有趣的是,图像保存在< code>manifest.json中,其中包含一个图像层列表,以及每个< code>tar层的路径。您可以将层< code >添加到< code >暂存图像。
公共< code>ubuntu:20.04的< code>manifest.json包含在从< code>docker保存生成的< code>tar文件中:
[
{
"Config": "4e2eef94cd6b93dd4d794c18b45c763f72edc22858e0da5b6e63a4566a54c03c.json",
"RepoTags": [
"ubuntu:20.04"
],
"Layers": [
"6d0f49bfc6be64bfab1f9c1fd2ed975f1b31300932f6e6a58431eba145aeef1f/layer.tar",
"168251688b4a0d65c58c010d18c2e5e7bc7b1288e30e54f651e683fe7af5983c/layer.tar",
"a48aad357767ae0e674c26ed749956078c003949bcd931af931dfc272cc96a9c/layer.tar",
"a9d70cfea3838f5442dce79f10ea881c4705f3bbc1123a73317f90d0958341fb/layer.tar"
]
}
]
…图层可以添加到从零开始构建的新图像:
FROM scratch
ADD 6d0f49bfc6be64bfab1f9c1fd2ed975f1b31300932f6e6a58431eba145aeef1f/layer.tar /
ADD 168251688b4a0d65c58c010d18c2e5e7bc7b1288e30e54f651e683fe7af5983c/layer.tar /
ADD a48aad357767ae0e674c26ed749956078c003949bcd931af931dfc272cc96a9c/layer.tar /
ADD a9d70cfea3838f5442dce79f10ea881c4705f3bbc1123a73317f90d0958341fb/layer.tar /
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
CMD ["/bin/bash"]
注意:从父映像设置< code>CMD和< code > ENV ——配置可以在< code>manifest.json的< code>Config键引用的文件中找到。
...如果我们 Docker 检查
图像并将其与原始图像进行比较,则图层几乎完全相同:
…<code>ubuntu:20.04</code>映像的最后一层包含<code>/run/systemd/container</code>配置-生成映像中的文件<code>md5sum</code>与原始映像的文件相同,但层哈希不同-否则保存在配置文件中的映像历史记录将丢失(如果您从ubuntu:20.04</code>启动<code>,扩展图像,保存图像,解压缩文件并检查配置,则历史记录已完成)。
您可以随意扩展< code>docker图像:
FROM scratch
ADD 6d0f49bfc6be64bfab1f9c1fd2ed975f1b31300932f6e6a58431eba145aeef1f/layer.tar \
168251688b4a0d65c58c010d18c2e5e7bc7b1288e30e54f651e683fe7af5983c/layer.tar \
a48aad357767ae0e674c26ed749956078c003949bcd931af931dfc272cc96a9c/layer.tar \
a9d70cfea3838f5442dce79f10ea881c4705f3bbc1123a73317f90d0958341fb/layer.tar /
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
RUN apt-get update && \
apt-get install -y --no-install-recommends cowsay && \
rm -rf /var/cache/apt/lists/*
CMD ["cowsay"]
如果您有一个泊坞保存
压缩包,则需要在使用之前加载泊坞加载
它。当您这样做时,这将打印出已加载图像的名称和标签。然后,您可以在 Docker 文件的 FROM
行中使用它,就像任何其他本地映像一样。
$ docker load -i myimage.tar.gz
Loaded image: my/image:and-its-tag
$ head -1 Dockerfile
FROM my/image:and-its-tag
如果您< code>docker推送或< code>docker保存结果图像,它将拥有原始图像的完整副本。
(在正常操作中,您不需要Docker保存
,而更喜欢像Docker Hub这样的注册表服务,像GCR / ACR / ECR这样的云托管服务,或者运行自己的注册表服务。您不能真正直接将保存的图像 tarfile 用于任何内容。
我必须将一个在几个容器中运行的应用程序交付给一个客户。我可以用 我的目标是交付一个只有docker-compose.yml和图像(app1.tar,app2.tar...)的zip文件夹需要运行集装箱。
我想了解在使用内部文件时编写java项目的最佳技术或标准技术。准确地说,我想开发一个使用程序运行时需要的文本文件和图像的项目。我的目标是从项目中创建一个可运行的jar,其中用户不需要看到所有这些文件。因此,我决定创建一个名为resources的包,并将其放在包含源代码的文件夹中。即。它与其他包处于同一级别。现在,在我的代码中,当我想要使用图像时,我使用以下语句:URL URL=getClass()
我们使用构建docker图像。 我的maven项目包括3个模块(、和)。每个模块基于每个模块中存在的dockerfile构建一个docker映像。 如有任何帮助,不胜感激!
我正在Azure管道中构建Docker映像。现在,我想根据配置参数将此映像推送到多个aws帐户(dev,阶段,prod)。问题是,图像在发布工件中不可用。我在研究过程中偶然发现了这篇和这篇文章。我对保存docker映像的解决方案感到困惑,这样它就可以在发布工件中使用。我有两个具体问题: 在docker生成后,我将如何在Azure管道任务中使用命令。可用的docker任务没有这个命令。 除了保存图像
根据Docker文档,要生成自己的映像,必须始终使用指令指定基映像。 编辑:创建基本图像的官方文档
我想通过docker compose构建图像,并为其设置特定标记。文件说: Comment将构建并用生成的名称标记它,然后使用该映像。 但是我找不到指定标签的方法,对于构建的图像,我总是看到“最新”标签。