web-dev-qa-db-fra.com

Un Dockerfile peut-il en étendre un autre?

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)?

41
Sylvain

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
14
larsks

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

# ...
13
Cethy