gpt4 book ai didi

laravel - 减少 Laravel 5.8 的 Docker 镜像大小

转载 作者:行者123 更新时间:2023-12-02 18:03:53 24 4
gpt4 key购买 nike

我需要减小 Laravel 5.8 项目的 Docker 镜像大小。

我现在有这个

FROM composer:latest
COPY . /src
ADD .env.example /src/.env
WORKDIR /src
RUN composer install
RUN php artisan key:generate
RUN chmod -R 777 storage/
CMD php artisan serve --host=0.0.0.0

docker-compose.yml

version: '3'
services:
johnywalker5g:
container_name: johnywalker5g
build:
context: .
dockerfile: Dockerfile
ports:
- 8000:8000

首先,我运行了 docker-compose up。我的网站正在运行。

然后,我运行了我看到的 docker images

docker images  

我明白了

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE           
johnywalker5g latest c404551006c7 About an hour ago 193MB
composer latest 520372566db9 2 weeks ago 157MB

大小有点太大193MB + 157MB


docker history c404551006c7

520372566db9        2 weeks ago         /bin/sh -c #(nop)  CMD ["composer"]             0B                                                                                      
<missing> 2 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/bin/sh" "/d… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) WORKDIR /app 0B
<missing> 2 weeks ago /bin/sh -c #(nop) COPY file:098af1c9d6ed00c2… 1.13kB
<missing> 2 weeks ago /bin/sh -c curl --silent --fail --location -… 1.91MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV COMPOSER_VERSION=1.8.4 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV COMPOSER_HOME=/tmp 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV COMPOSER_ALLOW_SUPERU… 0B
<missing> 2 weeks ago /bin/sh -c apk add --no-cache --virtual .bui… 1.83MB
<missing> 2 weeks ago /bin/sh -c echo "memory_limit=-1" > "$PHP_IN… 34B
<missing> 2 weeks ago /bin/sh -c apk --no-cache add --virtual .com… 75.5MB
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["php" "-a"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["docker-php-e… 0B
<missing> 2 weeks ago /bin/sh -c docker-php-ext-enable sodium 167kB
<missing> 2 weeks ago /bin/sh -c #(nop) COPY multi:03970f7b3773444… 6.45kB
<missing> 2 weeks ago /bin/sh -c set -xe && apk add --no-cache --… 58MB
<missing> 2 weeks ago /bin/sh -c #(nop) COPY file:ce57c04b70896f77… 587B
<missing> 2 weeks ago /bin/sh -c set -xe; apk add --no-cache --v… 12MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_SHA256=6bb03e79a1… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_URL=https://secur… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_VERSION=7.3.3 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV GPG_KEYS=CBAF69F173A0… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_LDFLAGS=-Wl,-O1 -… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_CPPFLAGS=-fstack-… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_CFLAGS=-fstack-pr… 0B
<missing> 2 weeks ago /bin/sh -c set -eux; mkdir -p "$PHP_INI_DIR… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHP_INI_DIR=/usr/loca… 0B
<missing> 2 weeks ago /bin/sh -c set -x && addgroup -g 82 -S www-… 4.85kB
<missing> 2 weeks ago /bin/sh -c apk add --no-cache ca-certifica… 2.71MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV PHPIZE_DEPS=autoconf … 0B
<missing> 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:38bc6b51693b13d84… 4.41MB

如何进一步缩小它的大小?

最佳答案

您的 docker 图像的图层位于 compose docker 图像的图层之上,总计 157MB。您的图像是 193MB,您唯一可以减少的是 36MB(193 - 157),您在 合成图像。让我们看看可以挤压什么。

复制。/src

复制。/src 会将你工作目录下的所有内容放到容器/src目录下。这可能比你想要的更多。限制将复制到容器的内容的一种方法是使用 .dockerignore文件(here 是一篇关于该主题的精彩文章)。

此类文件的内容通常类似于:

.dockerignore

.git
.gitignore
README.md
Changelog.md
Dockerfile
docker-compose.yml
docs

在某些项目中,.git 目录可能非常大。如果您还有一个目录包含数据库转储或 docker 镜像中不需要的其他大文件,请确保将它们添加到 .dockerignore 文件中。


运行 Composer 安装

RUN composer install 还将安装镜像中不需要的开发依赖项。改成

运行 composer install --no-dev

在这条路上走得更远 this所以回答建议使用

运行 composer install --no-ansi --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader


深入了解您的形象

使用dive探索您的每个图像层,并找出是否添加了不必要的文件或在某个时候遗留下来。


利用 Docker 多阶段构建

如果 composer 只对下载和安装您的 PHP 库有用,那么一旦这些库被下载和安装,您可能想要摆脱 composer。这不能从经典的 Dockerfile 中完成,因为每个 RUN/COPYADD 指令都会在前一个层之上生成一个新层。

假设您有一个包含 100MB 文件的层,如果您稍后在同一个 Dockerfile 中删除该文件,删除将发生在新层中。具有 100MB 的前一层仍然存在于您的层三明治中。

docker 让我们战斗的一种方式是 multistage build Dockerfile.

然后您的 Dockerfile 可以按如下方式构建(未测试):

FROM composer:latest as build_stage
COPY . /src
ADD .env.example /src/.env
WORKDIR /src
RUN composer install
RUN php artisan key:generate

FROM php:7-fpm-alpine
COPY --from=build_stage /src /var/www/html

RUN mkdir /var/www/html/storage/ \
&& chmod -R 777 /var/www/html/storage/

警告:这只是 Dockerfile 的主要结构,您可能需要对其进行更多调整以添加缺少的 php 扩展。引用official php docker image guide .

关于laravel - 减少 Laravel 5.8 的 Docker 镜像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55386169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com