一个 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 的“开发”Dockerfile(不重写它)吗?

原文由 Sylvain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 469
2 个回答

这正是您的 php 7-fpm FROM php:7-fpm 正在做的事情:使用 Dockerfile.

因此,在从 Dockerfile 构建映像之后:

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

您可以通过创建一个以以下开头的新 Dockerfile 来扩展它:

 FROM my-php-base-image

原文由 larsks 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 多阶段构建 绝对是这里答案的一部分。

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

码头工人-compose.yml

 version: '3.4'

services:
  php:
    build:
      context: ./
      target: php_base

  php_test:
    build:
      context: ./
      target: php_test

# ...

原文由 Cethy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进