我对使用 docker 或任何容器还很陌生,所以如果我错过了其他人都已经知道的明显内容,请保持温和。我已经搜索了所有我能想到的地方,但还没有看到这个问题得到解决。
我试图评估在 docker 中运行基准测试的性能成本,我发现了令人惊讶的巨大差异,这些差异对我来说没有意义。我用这个 Dockerfile 创建了一个简单的 Docker 镜像:
FROM ubuntu:18.04
RUN apt -y -q update && apt -y -q install python3 vim strace linux-tools-common \
linux-tools-4.15.0-74-generic linux-cloud-tools-4.15.0-74-generic
ADD . /workspace
WORKDIR /workspace
Run Code Online (Sandbox Code Playgroud)
我有一个简单的python脚本用于测试:
$ cat cpu-test.py
#!/usr/bin/env python3
import math
from time import time
N = range(10)
N_i = range(1_000)
N_j = range(1_000)
x = 1
start = time()
for _ in N:
for i in N_i:
for j in N_j:
x += -1**j * math.sqrt(i)/max(j,2)
stop = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个 docker 镜像,避免不必要的批量处理,我遇到了一个我认为应该很常见的问题,但到目前为止我还没有找到一个简单的解决方案。(我正在 ubuntu 18.04 系统上构建 docker,并从一个FROM ubuntu
层开始。)
特别是,我需要在映像中安装一个非常大的 .deb 文件(超过 3G)。COPY
or ADD
it and then很容易RUN dpkg -i
,但这会导致我不需要的几 GB 空间重复。当然,仅删除文件并不会减小图像大小。
我希望能够挂载一个卷来访问.deb
文件,而不是COPY
它,这在运行容器时很容易做到,但在构建容器时显然不可能做到?
到目前为止,我想出的是将 docker 构建到我要ADD
文件的位置,然后在安装了卷的情况下运行它,这样我就可以从容器中访问它而无需COPY
ing 它,然后我dpkg -i
它,然后我做docker commit 从该容器创建映像。果然,我最终得到的图像比我第一次尝试小 3GB 以上,但这似乎是一种黑客行为,并且使构建脚本变得更加复杂。
我认为必须有更合适的方法来实现这一目标,但到目前为止,我的搜索还没有找到明显的答案。我错过了什么吗?