小编Old*_*ide的帖子

Docker 在 CPU 密集型代码上性能下降 50%

我对使用 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)

performance docker docker-privileged

7
推荐指数
2
解决办法
1775
查看次数

docker build - 避免添加仅在构建时需要的文件

我正在尝试构建一个 docker 镜像,避免不必要的批量处理,我遇到了一个我认为应该很常见的问题,但到目前为止我还没有找到一个简单的解决方案。(我正在 ubuntu 18.04 系统上构建 docker,并从一个FROM ubuntu层开始。)

特别是,我需要在映像中安装一个非常大的 .deb 文件(超过 3G)。COPYor ADDit and then很容易RUN dpkg -i,但这会导致我不需要的几 GB 空间重复。当然,仅删除文件并不会减小图像大小。

我希望能够挂载一个卷来访问.deb文件,而不是COPY它,这在运行容器时很容易做到,但在构建容器时显然不可能做到?

到目前为止,我想出的是将 docker 构建到我要ADD文件的位置,然后在安装了卷的情况下运行它,这样我就可以从容器中访问它而无需COPYing 它,然后我dpkg -i它,然后我做docker commit 从该容器创建映像。果然,我最终得到的图像比我第一次尝试小 3GB 以上,但这似乎是一种黑客行为,并且使构建脚本变得更加复杂。

我认为必须有更合适的方法来实现这一目标,但到目前为止,我的搜索还没有找到明显的答案。我错过了什么吗?

docker dockerfile docker-build

6
推荐指数
1
解决办法
955
查看次数