【发布时间】:2018-08-10 12:27:07
【问题描述】:
我有一个想要 dockerise 的 laravel 应用程序。
https://kyleferg.com/laravel-development-with-docker/
https://medium.com/@shakyShane/laravel-docker-part-1-setup-for-development-e3daaefaf3c
https://www.codementor.io/patrickfohjnr/developing-laravel-applications-with-docker-4pwiwqmh4
这是我用于开发的 Dockerfile:
FROM php:7.1.14-fpm
WORKDIR /app
COPY . /app
RUN apt-get update -y && apt-get install -y openssl zip unzip git npm \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
libmagickwand-dev --no-install-recommends \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& docker-php-ext-install pdo pdo_mysql mbstring \
&& docker-php-ext-install zip \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& touch ./resources/assets/less/_main_full/main.less \
&& apt-get purge --auto-remove -y g++ \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& composer install && php artisan key:generate && php artisan migrate:fresh --seed \
&& npm cache clean -f && npm install -g n && n stable && npm install cross-env && npm install && npm run dev
有 1 件事我不明白:
我应该在容器中安装我所有的依赖项(composer install + npm install)吗?即使它使我制作了一个 1GB 的图像,对我来说似乎也是必要的,而且构建时间很长,但是很多教程都没有这样做。它是如何工作的?
注意:我不想使用 laradock,因为目标是学习和实践 Docker。
【问题讨论】:
-
我不安装镜像本身的依赖,只安装必要的构建工具。然后在容器中我将安装 composer 和 npm 依赖项。很可能您最终会更改/更新
composer.json和package.json,因此最好不要将所有内容直接安装到映像中并节省构建时间/映像大小。 -
其实我也是 docker 新手。但是在我的日常使用中,我将依赖项安装在容器内。为什么,因为在容器中我们已经定义并安装了一个 php 版本。依赖项应该基于容器内的 php 对吗?如果我在主机上运行,它可能有不同的php版本。
-
@btl composer.json 不会改变,你的意思是 composer.lock 吗?但是,如果不每次执行 composer install 等,你就不能直接部署你的容器……我错了吗?
-
是的,容器应该是具有所有必要依赖项的隔离环境。在主机上运行而不是在容器内运行肯定会遇到麻烦
-
这取决于您的部署策略。我已经在两个版本之间安装了新包,并删除了过时/弃用的包,所以
composer.json确实发生了变化。