为了账号安全,请及时绑定邮箱和手机立即绑定

超级慢的 Docker 构建

超级慢的 Docker 构建

PHP
开心每一天1111 2022-07-16 16:33:12
我想我要疯了。我已经到处搜索了,似乎在 Stack、GitHub 和其他远距离互联网上都找不到有效的解决方案。在这个特定的项目中,运行docker-compose build需要FOREVER。以前不是这样的,在其他使用 Docker 的项目上,这根本不是问题。并且永远......我说的是大约 10-15 分钟的构建时间,而过去它只需要大约 2 分钟。我有两个不同的同事 DL同一个 repo(一个在 Ubuntu 18 上,另一个在 macOS 14.x 上)。当他们运行build命令时,整个过程大约需要 2 分钟。这两个人以前从未构建过这个项目,所以他们完全从头开始。我已经卸载/重新安装了 Docker,运行了一个完整的docker system prune -a,通过 wifi 连接,通过以太网连接,尝试了不同的 wifi 网络,调整了我的 compose 文件,调整了我的 docker 文件——什么都没有。我的机器是 2018 款 MacBook Pro,配备四核 2.7GHz i7,运行 macOS 10.14.6,安装了 16gb 的 RAM 和 Docker Desktop 2.1.0.5。我已允许 Docker Desktop 拥有高达 12gb 或 RAM。在构建过程中,我的机器 CPU 使用率平均从 110% 上升到 270% com.docker.hyperkit。需要明确的是,它在任何事情真正开始之前就挂在“Building php”(或“Building web”)状态消息上。之后,实际的构建过程会顺利快速地运行。这是我的 docker-compose.yaml文件:version: '3.1'services:  db:    container_name: clientsname.db    hostname: db    image: mariadb:10.4.1-bionic    volumes:      - ./db-data:/var/lib/mysql:delegated    ports:      - 3307:3306    environment:      MYSQL_DATABASE: my_database      MYSQL_USER: my_user      MYSQL_PASSWORD: my_pass      MYSQL_ROOT_PASSWORD: my_pass  php:    container_name: clientsname.php    hostname: php    build:      dockerfile: php/php.dockerfile      context: ./    environment:      XDEBUG_CONFIG: remote_host=${REMOTE_HOST}    volumes:      - ../web:/var/www/web      - ../moodle:/var/www/moodle      - ../moodledata:/var/www/moodledata      - ./php/custom.ini:/usr/local/etc/php/conf.d/zzz-custom.ini      - ./php/z-errors.ini:/usr/local/etc/php/conf.d/z-errors.ini:delegated      - ./php/z-upload.ini:/usr/local/etc/php/conf.d/z-upload.ini:delegated      - ./php/z-xdebug.ini:/usr/local/etc/php/conf.d/z-xdebug.ini:delegated    depends_on:      - db  web:    container_name: clientsname.web    hostname: web    build:      dockerfile: nginx/nginx.dockerfile      context: ./    volumes:      - ../web:/var/www/web      - ../moodle:/var/www/moodle      - ../moodledata:/var/www/moodledata      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf      - ./nginx/ssl:/etc/nginx/ssl
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这来自您的构建上下文(通常是您运行构建的目录,但可以像您在撰写文件中所做的那样被覆盖)。在执行构建之前发送的上下文目录中有大量文件或大文件。

您可以使用.dockerignore其具有几乎相同的格式.gitignore来排除在构建时发送的文件。并且使用 BuildKit(如果您export DOCKER_BUILDKIT=1在最新版本的 docker 中启用)它只会在您显式复制文件时发送上下文,然后只有当这些文件从缓存中的可用文件发生更改时才会发送上下文。

有关构建上下文的更多信息,请参阅:https ://docs.docker.com/engine/reference/commandline/build/

还有最佳实践:https ://docs.docker.com/develop/develop-images/dockerfile_best-practices/


查看完整回答
反对 回复 2022-07-16
  • 1 回答
  • 0 关注
  • 266 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号