Dre*_*rew 19 php docker dockerfile docker-compose
我想我要疯了。我已经到处搜索,似乎无法在 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 网络,调整了我的撰写文件,调整了我的 docker 文件——什么都没有。
我的机器是 2018 款 MacBook Pro,配备四核 2.7GHz i7,运行 macOS 10.14.6,安装有 16GB RAM 和 Docker Desktop 2.1.0.5。
我已经允许 Docker Desktop 拥有高达 12gb 或 RAM。在构建过程中,我的机器 CPU 使用率在运行该com.docker.hyperkit过程时平均从 110% 飙升至 270% 。
需要明确的是,在任何事情真正开始之前,它都挂在“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
- ./logs:/var/log/nginx
ports:
- 80:80
- 443:443
depends_on:
- php
- db
Run Code Online (Sandbox Code Playgroud)
这是引用的php.dockerfile文件:
FROM php:7.2.26-fpm
LABEL maintainer="My Clients Name"
# Environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV COMPOSER_NO_INTERACTION=1
ENV COMPOSER_HOME=/usr/local/share/composer
# Working Directory
WORKDIR /var/www/web
WORKDIR /var/www/moodle
WORKDIR /var/www/moodledata
RUN rm /etc/apt/preferences.d/no-debian-php && apt-get update && apt-get install -y --no-install-recommends apt-utils \
build-essential \
php-soap \
libzip-dev \
libmagickcore-dev \
libmagickwand-dev \
libmagic-dev \
libpng-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libmemcached-dev \
zlib1g-dev \
nano \
sudo \
gnupg \
curl \
unzip && \
docker-php-ext-install soap pdo_mysql mysqli && \
docker-php-ext-install -j$(nproc) gd iconv && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
pecl install zip-1.15.2 imagick memcached-3.0.4 xdebug && \
docker-php-ext-enable memcached imagick zip xdebug
# Install Composer, Node, Gulp, and SASS
RUN curl -s https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer
RUN curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && apt-get install -y nodejs && npm install npm@latest -g && npm install --global gulp-cli && npm config set unsafe-perm=true
# Export composer vendor path
RUN echo "" >> ~/.bashrc && echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
和引用的nginx.dockerfile
FROM nginx:stable-alpine
RUN apk add --update bash && rm -rf /var/cache/apk/*
WORKDIR /var/www/web
Run Code Online (Sandbox Code Playgroud)
这让我很生气……我到底做错了什么?如果我遗漏了任何你们都想知道的内容,请告诉我,我会更新帖子。
更新
感谢@BMitch 和到目前为止所有评论过的人。我把我的整个 /docker build 目录移到一个 test 文件夹中,然后在运行build命令之前创建了空的 /web、/moodle 和 /moodledata 目录。它立即开始编译。
令我好奇的是,其他同事 DL 使用了与我相同的 Git 存储库,但没有任何相同的问题。哦...仔细想想...我敢打赌我知道问题是什么。
BMi*_*tch 34
这是来自您的构建上下文(通常是您运行构建的目录,但可以像您在撰写文件中所做的那样被覆盖)。在执行构建之前发送的上下文目录中有大量文件或大文件。
您可以使用.dockerignore具有几乎相同格式的 which.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/
| 归档时间: |
|
| 查看次数: |
18046 次 |
| 最近记录: |