我有一个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和其他东西。
我可以创建一个“dev”Dockerfile来扩展我的主Dockerfile(而不重写它)吗?
4条答案
按热度按时间iqjalb3h1#
使用multi-stage build绝对是这里答案的一部分。
docker-compose v3.4
target
是第二个也是最后一个。下面是一个例子,有2个容器(1个正常的和1个w/ xdebug安装)生活在一起:
Dockerfile
docker-compose.yml
ibrsph3r2#
如果你不想标记你的第一个Dockerfile,以便在下一个Dockerfile的
FROM
指令中使用它,并且你使用的是Docker 20.10+,你也可以这样做:INCLUDE+
指令由Dockerfile中的第一行导入。您可以在https://github.com/edrevo/dockerfile-plus上阅读更多关于dockerfile-plus的信息bmvo0sr53#
这正是您的
FROM php:7-fpm
正在做的事情:使用Dockerfile的内容从php
镜像(带有7-fpm
标签)扩展Dockerfile。因此,在从Dockerfile构建镜像之后:
您可以通过创建一个新的Dockerfile来扩展它,该文件以以下开头:
kcwpcxri4#
Sand是我编写的一个小型开源工具,通过允许您以类似Python的语法编写dockerfiles,使您能够在它们之间共享代码,来满足此需求(以及许多其他需求)。
给定以下目录结构:
你可以这样写你的
Sandfile
:这允许您在Dockerfiles之间共享代码,并保持它们DRY。
这类似于
add_subdirectory
在CMake中的工作方式