webentwicklung-frage-antwort-db.com.de

Kann ein Dockerfile ein anderes erweitern?

Ich habe ein Dockerfile für PHP so:

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

Und ich würde gerne ein weiteres Dockerfile erstellen, das auf dem ersten basiert, aber mit einigen PHP Erweiterungen (für Entwicklerzwecke) hinzugefügt): Xdebug und andere Sachen.

Kann ich ein "dev" -Dockerfile erstellen, das mein Haupt-Dockerfile erweitert (ohne es neu zu schreiben)?

41
Sylvain

Genau das ist dein FROM php:7-fpm macht gerade: erweitere das Dockerfile vom php Bild (mit 7-fpm tag) mit dem Inhalt Ihrer Docker-Datei.

Nachdem Sie ein Image aus Ihrer Docker-Datei erstellt haben:

docker build -t my-php-base-image .

Sie können dies erweitern, indem Sie eine neue Docker-Datei erstellen, die mit Folgendem beginnt:

FROM my-php-base-image
14
larsks

Die Verwendung von mehrstufiger Aufba ist hier definitiv ein Teil der Antwort.

docker-compose v3.4 target als vorletzter und letzter.

Hier ist ein Beispiel für das Zusammenleben von 2 Containern (1 normaler & 1 mit installiertem 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

# ...
13
Cethy