我有一个像这样的PHP Dockerfile:
FROM php:7-fpm
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y git libicu-dev libmagickwand-dev libmcrypt-dev libcurl3-dev jpegoptim
RUN pecl install imagick && \
docker-php-ext-enable imagick
RUN docker-php-ext-install intl
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install opcache
RUN docker-php-ext-install mcrypt
RUN docker-php-ext-install curl
RUN docker-php-ext-install zip
我想创建另一个Dockerfile,基于第一个,但添加了一些PHP扩展(用于开发目的):Xdebug和其他东西。
我可以创建一个扩展我的主Dockerfile的“dev”Dockerfile(不重写它)吗?
答案 0 :(得分:15)
这正是您的WHERE pkDistroID = @pkDistro AND vchrCustomer = @vchrCustomer
正在做的事情:将Dockerfile从FROM php:7-fpm
图像(带有php
标记)扩展到Dockerfile的内容。
所以在从Dockerfile构建图像之后:
7-fpm
您可以通过创建以:
开头的新Dockerfile来扩展它docker build -t my-php-base-image .
答案 1 :(得分:12)
如果您不想标记您的第一个 Dockerfile 以便在下一个 Dockerfile 的 FROM
指令中使用它,并且您使用的是 Docker 20.10+,您也可以这样做:
# syntax = edrevo/dockerfile-plus
INCLUDE+ Dockerfile.base
RUN whatever
INCLUDE+
指令由 Dockerfile 中的第一行导入。您可以在 https://github.com/edrevo/dockerfile-plus
答案 2 :(得分:8)
使用multi-stage build绝对是这里答案的一部分。
docker-compose v3.4 target
是倒数第二个。
这里有一个示例,其中有2个容器(1个普通容器和1个带xdebug的容器)在一起:
Dockerfile
FROM php:7-fpm AS php_base
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
apt-get install -y git libicu-dev libmagickwand-dev libmcrypt-dev libcurl3-dev jpegoptim
RUN pecl install imagick && \
docker-php-ext-enable imagick
RUN docker-php-ext-install intl
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install opcache
RUN docker-php-ext-install mcrypt
RUN docker-php-ext-install curl
RUN docker-php-ext-install zip
FROM php_base AS php_test
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
docker-compose.yml
version: '3.4'
services:
php:
build:
context: ./
target: php_base
php_test:
build:
context: ./
target: php_test
# ...