docker - 为什么 docker build 将构建上下文发送到 docker daemon 这么慢
问题描述
这是我的码头文件:
FROM nginx:1.21.1
ENV LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8 \
TZ=Asia/Shanghai
MAINTAINER huanghaihua
ADD build/ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
当我使用此命令在服务器端构建时:
➜ pc-super-open git:(5b89d40) docker build -f ./Dockerfile -t=hades-pro/pc-super-frontend:1.0.0 .
Sending build context to Docker daemon 357.1MB
发送构建上下文步骤需要超过 10 分钟。在我的本地机器上,它完成不到 2 秒。我是在 iMac (16GB RAM + 512GB) 上构建的,为什么需要这么长时间?我应该怎么做才能解决这个问题?我曾尝试将 nginx 镜像存储在阿里云中(避免从不同国家的 docker 下载大镜像):
docker tag nginx:1.21.1 registry.cn-hangzhou.aliyuncs.com/dabai_app_k8s/nginx:1.21.1
docker push registry.cn-hangzhou.aliyuncs.com/dabai_app_k8s/nginx:1.21.1
并像这样更改 Dockerfile:
FROM registry.cn-hangzhou.aliyuncs.com/dabai_app_k8s/nginx:1.21.1
仍然没有解决问题,仍然很慢。
解决方案
“发送构建上下文”步骤与基础映像下载无关。此步骤需要很长时间,因为您在远程构建器上运行,并且您的构建命令使用“.”。作为它的构建上下文。这意味着您的本地目录的全部内容必须通过网络发送到您正在构建图像的机器上。这也是为什么它在本地机器上要快得多的原因;它不需要转移您的本地目录。
如果您将 .dockerignore 文件添加到本地目录,则可以通过在其中列出任何不必要的文件/目录来限制传输的内容。这将加快这一步。
推荐阅读
- constraint-programming - 如何在 Flatzinc 输出中生成具体的“array_int_maximum”?
- python - 预处理给定图像后如何解码 QR 码?
- r - 使用“devtools”安装软件包时出错
- push-notification - 手机钱包基于位置的通知机制
- azure-devops - Azure Devops 管道在 ci 和 dev 部署阶段之间调用单独的 e2e 存储库
- javascript - 计算鼠标拖动不包括选择文本时
- django - DateField 的 Django 模型过滤器不起作用
- android-studio - 任务:app:lint FAILED - Lint 基础设施错误
- r - 如何使用 R 中的每日回报计算过去 12 个月滑动窗口的滚动偏度?
- hyperledger-fabric - 来自 ldap 的 fabric-ca-client csr.names