Dockerfile可以扩展另一个吗?

时间:2016-04-01 17:19:01

标签: docker dockerfile

我有一个像这样的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(不重写它)吗?

3 个答案:

答案 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

阅读有关 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

# ...