When defining a multi service environment with Docker and Docker Compose, the usual way was to use a Dockerfile for each service, starting with the base image and adding all custom needs:
FROM php:7.2-fpm-alpine3.7 RUN docker-php-ext-install opcache
FROM nginx:1.15-alpine ADD virtual-host.conf /etc/nginx/conf.d/default.conf
Then you could compose all services.
version: '3' services: php: build: context: ./env/php volumes: - ./:/app working_dir: /app restart: unless-stopped nginx: build: context: ./env/nginx volumes: - ./:/app ports: - "80:80" restart: unless-stopped
Then Docker 17.05 introduced multi-stage builds, allowing to use one Dockerfile. Continue reading Docker multi-stage builds with Docker Compose