- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我需要 Docker
容器中的大型 *.zip
文件 (5 gb) 的内容来编译程序。 *.zip
文件位于我的本地计算机上。这样做的策略是:
COPY program.zip /tmp/
RUN cd /tmp \
&& unzip program.zip \
&& make
完成此操作后,我想删除解压缩的目录和原始 *.zip
文件,因为不再需要它们。问题是 COPY
(以及 ADD
指令)将向图像添加一个层,该层将包含文件 program.zip
是有问题的,因为图像可能至少有 5GB 大。有没有办法在不使用 COPY
或 ADD
指令的情况下将文件添加到容器中? wget
将不起作用,因为提到的 *.zip
文件在我的本地机器上并且 curl file://localhost/home/user/program.zip -o/tmp/program.zip
也不起作用。
最佳答案
这并不简单,但可以通过 wget
或 curl
完成,并得到 python
的一点支持。 (所有三个工具通常都应该在 *nix
系统上可用。)
url
并且
时,
wget
将不起作用
curl file://localhost/home/user/program.zip -o /tmp/
不能在 Dockerfile
的 RUN
指令中工作。因此,我们需要一个 wget
和 curl
可以访问和下载 program.zip
的服务器。
为此,我们设置了一个小型 python
服务器,它为我们的 http
请求提供服务。为此,我们将使用 python
中的 http.server
模块。 (您可以使用 python
或 python 3
。两者都可以使用。
python -m http.server --bind 192.168.178.20 8000
python
服务器将在它启动的目录中提供所有文件。因此,您应该确保在您要在镜像构建期间下载的文件所在的目录中启动服务器在或创建一个包含您的程序的临时目录。为了便于说明,让我们创建文件 foo.txt
,稍后我们将在 Dockerfile
中通过 wget
下载该文件:
echo "foo bar" > foo.txt
在启动 http 服务器时,指定 LAN 上本地计算机的 IP 地址很重要。此外,我们将打开端口 8000。完成此操作后,我们应该会看到以下输出:
python3 -m http.server --bind 192.168.178.20 8000
Serving HTTP on 192.168.178.20 port 8000 ...
现在我们构建一个 Dockerfile
来说明它是如何工作的。 (我们假设文件 foo.txt
应该被下载到 /tmp
中):
FROM debian:latest
RUN apt-get update -qq \
&& apt-get install -y wget
RUN cd /tmp \
&& wget http://192.168.178.20:8000/foo.txt
现在我们开始构建
docker build -t test .
在构建期间,您将在我们的 python
服务器上看到以下输出:
172.17.0.21 - - [01/Nov/2014 23:32:37] "GET /foo.txt HTTP/1.1" 200 -
我们图像的构建输出将是:
Step 2 : RUN cd /tmp && wget http://192.168.178.20:8000/foo.txt
---> Running in 49c10e0057d5
--2014-11-01 22:56:15-- http://192.168.178.20:8000/foo.txt
Connecting to 192.168.178.20:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25872 (25K) [text/plain]
Saving to: `foo.txt'
0K .......... .......... ..... 100% 129M=0s
2014-11-01 22:56:15 (129 MB/s) - `foo.txt' saved [25872/25872]
---> 5228517c8641
Removing intermediate container 49c10e0057d5
Successfully built 5228517c8641
然后,您可以通过从刚刚构建的镜像启动并输入容器来检查它是否真的有效:
docker run -i -t --rm test bash
然后您可以在 /tmp
中查找 foo.txt
。
我们现在可以将任何文件添加到我们的 image
中,而无需创建新层。假设您要添加一个大约 5 GB 的程序,如问题中所述,我们可以这样做:
FROM debian:latest
RUN apt-get update -qq \
&& apt-get install -y wget
RUN cd /tmp \
&& wget http://conventiont:8000/program.zip \
&& unzip program.zip \
&& cd program \
&& make \
&& make install \
&& cd /tmp \
&& rm -f program.zip \
&& rm -rf program
这样我们就不会剩下 10 GB 的垃圾了。
关于docker - 如何在不使用 ADD 或 COPY 指令的情况下将文件添加到 Dockerfile 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692708/
如何将 jQuery 代码转换为 React JS? 我有一个带有文本“复制”的按钮。当我单击它时,应将其文本更改为“已复制”并复制到剪贴板。复制后,几秒钟后我希望文本返回到“复制”。我相信以下功能将
在任何情况下我都想使用 NumPy 的 np.copy() 而不是 Python 的 copy.copy() 方法?据我所知,两者都创建浅拷贝,但 NumPy 仅限于数组。 NumPy 是否有任何性能
%python -m timeit -s "import copy" "x = (1, 2, 3)" "copy.deepcopy(x)" 100000 loops, best of 3: 10.1
我想制作一个列表的副本(字面意思是一个单独的克隆,与原始列表没有任何共享)。我使用了 copy.copy() 并创建了 2 个单独的列表,但为什么每个副本的元素似乎仍然共享? 这很难解释,请查看以下输
我不明白使用通配符时 COPY 命令的行为。 我在 C:\Source 中有一个文本文件叫 mpt*.asm我想把它复制到 C:\Dest .这是批处理脚本所需要的,我不能确定 mpt*.asm 的确
相关但不等同于:Golang: How to copy Context object without deriving 是否可以推导出 context.WithTimeout来自 context.Ba
您可以实现 Copy 特性来为类型提供复制语义而不是 move 语义。仅当其所有组成元素(产品类型的每个因素,或总和类型的每个变体的每个因素)也都是复制时,才能执行此操作。 这还允许您制作相当大的类型
我有一段代码,我需要确定编码值的类型,但我不知道它是字符串、无符号整数还是字符串的矢量。我想做以下几件事:。然而,来自弯曲板条箱的值不能实现复制,它在调用Decode_Bencode_Object之后
我需要复制一些对象,我读到 copy.copy 模块可以在 Python 上执行此操作。问题是,这些对象有一些属性是长数组。 那么这个方法效率高吗?由于性能在我所做的这项工作中很重要。 有更好的方法吗
我尝试高效地制作 lua 表的副本。我编写了以下运行良好的函数 copyTable()(见下文)。但我想我可以使用函数的“按值传递”机制获得更高效的东西。我做了一些测试来探索这个机制: functio
使用 pry 插件:pry-clipboard 当我输入“copy-history”来复制我历史的最后一行时,它实际上是在复制“copy-history”并粘贴“copy-history”。 我是不是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve this
我不了解Kotlin中通过访问器处理字段和复制方法之间的区别。就像这样: 访问者示例: class Person(val name: String, var age: Int
如何从节点复制一些属性。例如。我只想从节点“Extn”复制“Srno”,“RollNo”,“right”。
我有以下两个 XSL 转换,我希望将它们链接到一个 XSL 文件中。 第一次转换: 第二个转换(使用第一个转换的输出作为输入): 我的目标是从 WSDL
我是 Vertica DB 的新手,之前使用过 Mysql。我想在 vertica 表中插入唯一记录,但 vertica 在插入时不支持唯一约束。我通过 COPY 查询在表中插入记录。所以我无法在插入
std::copy 与执行策略参数之间是否存在正式关系?无论是在实践中还是在标准中。 例如,会不会只是这样, namespace std{ template It copy(std::
我用 root 运行了以下命令来备份同一主机上的文件夹:cp -r master 主备 size of master : 76GB size of master-backup : 71GB 知道为什么
我遇到过一段代码,乍一看似乎毫无意义。但我意识到这可能会产生一些我不知道的未知含义,因为 Python 不是我最熟悉的语言。 import copy node = copy.copy(node) 阅读
我正在设计一个基类,我希望它为 copy.copy 定义基本行为。此行为包括在控制台中打印警告,然后复制实例,就好像它没有 __copy__ 一样。属性。 当定义一个空白时Foo类并复制它的一个实例,
我是一名优秀的程序员,十分优秀!