もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

Dockerのマルチステージビルドを試してみた

はじめに

こんばんは。

Dockerネタです。

前々からローカル環境・検証環境でDockerfileを分けたいなと思っていて、ファイルを分けずにどうにかできないかと考えていたのですが、マルチステージビルドというのがあり、今回試してみました。

docs.docker.jp

本題

Dockerfile

# ローカル & 検証どちらも
FROM php:8.3-apache AS base

RUN apt-get update \
  && apt-get install -y libzip-dev \
  && docker-php-ext-install zip

RUN apt-get update \
  && apt-get install -y libicu-dev \
  && docker-php-ext-install intl

RUN docker-php-ext-install pdo_mysql

# 検証のみ
FROM base AS staging
RUN docker-php-ext-install opcache
COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/

docker-compose.yml

services:
  web:
    platform: linux/amd64
    build:
      context: .
      dockerfile: Dockerfile
      target: base

docker-composeでは targetを base にすることによりopcacheは入らず 検証環境では targetを staging にすることで opcacheがinstallされます。

終わりに

今まで .local とか .staging とかのDockerfileを作ってたので、これはとても助かります。

もっと積極的に使っていこうと思いました。

現場からは以上です。