J'ai un Dockerfile pour PHP comme ceci:
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
Et je voudrais créer un autre Dockerfile, basé sur le premier, mais avec quelques PHP ajoutées (à des fins de développement): Xdebug et d'autres trucs).
Puis-je créer un Dockerfile "dev" qui étend mon Dockerfile principal (sans le réécrire)?
C'est exactement ce que votre FROM php:7-fpm
fait: étendre le Dockerfile à partir de l'image php
(avec 7-fpm
tag) avec le contenu de votre Dockerfile.
Donc, après avoir construit une image à partir de votre Dockerfile:
docker build -t my-php-base-image .
Vous pouvez étendre cela en créant un nouveau Dockerfile qui commence par:
FROM my-php-base-image
L'utilisation de build multi-stage est certainement une partie de la réponse ici.
docker-compose v3.4 target
étant le deuxième et dernier.
Voici un exemple pour avoir 2 conteneurs (1 normal et 1 avec xdebug installés) vivant ensemble:
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
# ...