🔖

1つのDockerfileで2つ以上のFROM命令を使用する方法・マルチステージビルドとは?

2023/11/26に公開

こんにちは、AIQ株式会社のフロントエンドエンジニアのまさぴょんです!
今回は、1つのDockerfileで2つ以上のFROM命令を使用する方法(マルチステージビルド)について解説します。

マルチステージビルド(Multi Stage Builds)とは?

マルチステージビルドとは、1つのDockerfileで2つ以上のFROM命令を使用する方法であり、いくつかのベースイメージを合わせて使いたい時に使用します。

ちなみに、公式の説明は、次のとおりです。

マルチステージ ビルドでは、Dockerfileで複数のFROMステートメントを使用します。
FROM命令は異なるベースを使用でき、それぞれがビルドの新しい段階を開始します。
アーティファクトをあるステージから別のステージに選択的にコピーし、最終イメージに必要なものをすべて残すことができます。
引用元:Docker Docs マルチステージビルド

マルチステージビルド前のElasticSearch環境

まずは、マルチステージビルド前のElasticSearch環境のDockerfileは、次のような内容です。

Dockerfile
# Base Image は ElasticSearch の 8系
FROM docker.elastic.co/elasticsearch/elasticsearch:8.10.2
# ElasticSearch の日本語検索プラグイン「 analysis-kuromoji 」をインストールする
RUN elasticsearch-plugin install analysis-kuromoji

マルチステージビルド後のElasticSearch & Python環境

続いて、マルチステージビルド後のElasticSearch & Python環境は、次のような内容です。

Dockerfile
# マルチステージビルドの初めに、Python 開発環境を構築 & 名前をつける
FROM python:3.8-slim-buster as python-builder

# Container内の /app を 作業ディレクトリとして指定する
WORKDIR /app
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# 続いて、ElasticSearchの環境を構築する (ElasticSearch 8系)
FROM docker.elastic.co/elasticsearch/elasticsearch:8.10.2 AS elastic-builder

# Container内の /app を 作業ディレクトリとして指定する 
WORKDIR /app

# Python 開発環境から必要なファイルをコピー
COPY --from=python-builder /app /app

# ElasticSearch の日本語検索プラグイン「 analysis-kuromoji 」をインストールする
RUN elasticsearch-plugin install analysis-kuromoji

まとめ

マルチステージビルド(Multi Stage Builds)を知っていると、1つのDockerfile内で、複数のイメージを組み合わせた環境を構築することができます。
ぜひ活用してみてください。

個人で、Blogもやっています、よかったら見てみてください。

https://masanyon.com/

注意事項

この記事は、AIQ 株式会社の社員による個人の見解であり、所属する組織の公式見解ではありません。

求む、冒険者!

AIQ株式会社では、一緒に働いてくれるエンジニアを絶賛、募集しております🐱🐹✨

詳しくは、Wantedly (https://www.wantedly.com/companies/aiqlab)を見てみてください。

参考・引用

https://docs.docker.com/build/building/multi-stage/

AIQ Tech Blog (有志)

Discussion