docker - Docker 多阶段构建复制前一阶段(取决于顺序)
问题描述
我有 Dockerfile:
FROM php:7.2.10-fpm-alpine as build
RUN apk upgrade --update && apk --no-cache add \
gcc g++ make git autoconf tzdata openntpd libcurl curl-dev coreutils \
freetype-dev libxpm-dev libjpeg-turbo-dev libvpx-dev \
libpng-dev ca-certificates libressl libressl-dev libxml2-dev postgresql-dev icu-dev rabbitmq-c-dev
RUN docker-php-ext-configure intl \
&& docker-php-ext-configure opcache \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
--with-xpm-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) \
gd \
pdo_pgsql \
xmlrpc \
zip \
bcmath \
intl \
opcache \
pcntl
# Install dependencies
RUN docker-php-source extract \
&& pecl install redis-4.1.1 apcu-5.1.12 amqp-1.9.3
RUN docker-php-ext-enable redis apcu amqp \
&& docker-php-source delete
# Add timezone
RUN rm /etc/localtime && \
ln -s /usr/share/zoneinfo/UTC /etc/localtime && \
"date"
# Install composer
RUN curl -sS https://getcomposer.org/installer | \
php -- --install-dir=/usr/local/bin --filename=composer
# Cleanup
RUN rm -rf /var/cache/apk/* \
&& find / -type f -iname \*.apk-new -delete \
&& rm -rf /var/cache/apk/*
ADD php.ini /usr/local/etc/php/php.ini
ADD opcache.ini /usr/local/etc/php/conf.d/opcache.ini
ADD www.conf /usr/local/etc/php/php-fpm.d/www.conf
ADD php-fpm.conf /usr/local/etc/php/php-fpm.d/php-fpm
EXPOSE 9000
CMD ["php-fpm"]
#Dev
FROM build as dev
ADD xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
RUN docker-php-source extract && pecl install xdebug-2.6.1
RUN docker-php-ext-enable xdebug && docker-php-source delete
#Production
FROM build as prod
ARG REPOSITORY_URL
ARG CHECKOUT_POSITION
RUN mkdir /var/www/project
RUN git clone $REPOSITORY_URL /var/www/project \
&& cd /var/www/project \
&& git reset --hard $CHECKOUT_POSITION \
&& env APP_ENV=prod composer install --no-dev --optimize-autoloader \
&& chown -R www-data:www-data /var/www/project
WORKDIR /var/www/project
USER www-data
当我docker build --target prod
从开发阶段使用依赖项时,进入生产阶段(xdebug 等)。
如果 prod 阶段移动到高于 dev 阶段,则 dev 阶段从 prod 复制依赖项。
它可以是什么?
Docker 版本 18.06.1-ce,构建 e68fc7a
UPD:Dockerfile 已更新
代码太多,无法保存。代码太多,无法保存。代码太多,无法保存。
谢谢。
解决方案
推荐阅读
- rsync - 来自远程服务器的并行 rsync 获得意外的远程 arg
- swift - 如何在 UIImageView 中支持 Ipad 上的横向模式?
- spring-boot - 带有连接工厂和 Req 标头的 Armeria WebClient 请求
- r - 如何按行数拆分数据框
- java - 打印机不创建文本文件
- javascript - 从数据库记录生成递归 JSON
- .net-core - 获取 QueueBackgroundWorkItem 的任务
- flutter - Flutter:当未来花费超过 5 秒时显示一些东西
- java - 使用 ElasticsearchRepository 和 RestHighLevelClient 的方法 saveAll(list) 时出错
- matlab - 使用挤压从 3D 数据中提取 2D