Dockerfileの書き方を整理しよう

Docker

やりたいこと

Dockerfileの基本的な書き方を、初心者にもわかりやすくまとめていきます。

Dockerfileの各コマンドの使い方

  • FROM
    FROM {イメージ名}:{タグ} の形式で、ベースとなるイメージを指定します。
    例えば、Python3.6をベースにしたい場合は、FROM python:3.6と書きます(イメージはDocker Hubで探せます)。
  • RUN
    RUN {コマンド} で、コンテナ内で実行したいコマンドを記述します。
    例えば、RUN pip install --upgrade pip で、Pythonのパッケージ管理ツールであるpipを最新バージョンに更新できます。
  • COPY
    COPY {コピー元ディレクトリ} {コピー先ディレクトリ} で、ホストマシンのファイルやフォルダをコンテナ内にコピーします。
    指定したコピー先のディレクトリが存在しない場合、自動的に作成されるので心配はいりません。
  • ENV
    ENV {キー}={値} で環境変数を設定します。
    これはコンテナ内で利用する設定を柔軟に変更できるようにするためです。
  • ARG
    ARG {キー}={デフォルト値(任意)} で、ビルド時に使用する変数を指定します。
    この変数はビルド中のみ有効で、コンテナ実行時には利用できません。
  • WORKDIR
    WORKDIR {ディレクトリパス} で、作業ディレクトリを変更します。以降のコマンド(RUN, CMD, COPYなど)はこのディレクトリを基準に実行されます。
  • CMD
    CMD ["実行ファイル", "パラメータ1", ... "パラメータN"] の形式で、コンテナが起動されたときに実行するデフォルトコマンドを指定します。
    複数のCMDがある場合、最後に記述したものだけが実行されます。
  • マルチステージビルド
    環境ごとに異なるイメージを使いたい場合、FROMを複数回使用してマルチステージビルドを行うことができます。
    例えば、--target development のようにビルド時にオプションを指定することで、特定のステージでビルドが可能です。

サンプルDockerfile

以下は、Python 3.6を使ったマルチステージビルドのサンプルです。

Dockerfile
# ベースとなるイメージを指定
FROM python:3.6 AS base
# 環境変数を設定
ENV env=dev
# ビルド時の引数を指定
ARG fuga=fuga
# pipを最新にアップグレード
RUN pip install --upgrade pip
# ホストマシンのファイルをコンテナ内にコピー
COPY . /app
# コンテナ実行時のデフォルトコマンドを指定
CMD ["python3", "main.py"]

# 開発環境用の設定
FROM base AS development
ENV env=dev

# 本番環境用の設定
FROM base AS production
ENV env=prod

このサンプルでは、まずPython 3.6のイメージをベースとして設定し、
その後、開発環境用(development)と本番環境用(production)に分けて環境変数を設定しています。

まとめ

Dockerfileでは、ベースイメージの指定から環境変数の設定、マルチステージビルドまでさまざまな操作が可能です。今回紹介したコマンドはDockerfileの基本なので、ぜひ覚えておくと便利です!

コメント

タイトルとURLをコピーしました