1つのDockerfileで2つ以上のFROM命令を使用する方法・マルチステージビルドとは?
こんにちは、AIQ株式会社のフロントエンドエンジニアのまさぴょんです!
今回は、1つのDockerfileで2つ以上のFROM命令を使用する方法(マルチステージビルド)について解説します。
マルチステージビルド(Multi Stage Builds)とは?
マルチステージビルドとは、1つのDockerfileで2つ以上のFROM命令を使用する方法であり、いくつかのベースイメージを合わせて使いたい時に使用します。
ちなみに、公式の説明は、次のとおりです。
マルチステージ ビルドでは、Dockerfileで複数の
FROM
ステートメントを使用します。
各FROM
命令は異なるベースを使用でき、それぞれがビルドの新しい段階を開始します。
アーティファクトをあるステージから別のステージに選択的にコピーし、最終イメージに必要なものをすべて残すことができます。
引用元:Docker Docs マルチステージビルド
マルチステージビルド前のElasticSearch環境
まずは、マルチステージビルド前のElasticSearch環境の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環境は、次のような内容です。
# マルチステージビルドの初めに、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 /app /app
# ElasticSearch の日本語検索プラグイン「 analysis-kuromoji 」をインストールする
RUN elasticsearch-plugin install analysis-kuromoji
まとめ
マルチステージビルド(Multi Stage Builds)を知っていると、1つのDockerfile内で、複数のイメージを組み合わせた環境を構築することができます。
ぜひ活用してみてください。
個人で、Blogもやっています、よかったら見てみてください。
注意事項
この記事は、AIQ 株式会社の社員による個人の見解であり、所属する組織の公式見解ではありません。
求む、冒険者!
AIQ株式会社では、一緒に働いてくれるエンジニアを絶賛、募集しております🐱🐹✨
詳しくは、Wantedly (https://www.wantedly.com/companies/aiqlab)を見てみてください。
参考・引用
AIQ 株式会社 に所属するエンジニアが技術情報をお届けします。 ※ AIQ 株式会社 社員による個人の見解であり、所属する組織の公式見解ではありません。 Wantedly: wantedly.com/companies/aiqlab
Discussion