Docker超入門:Dockerfileの構造と主要命令を徹底解説

 Dockerでコンテナを動かすとき、その設計図となるのが Dockerfile です。Dockerfileはシンプルなテキストファイルですが、ここに書かれる命令一つ一つがコンテナの挙動や環境を決めるとても重要な要素です。この記事では、Dockerfileの基本構造と主要な命令について、具体例や表を使ってわかりやすく解説します。

Dockerfileの基本構造

Dockerfileは「命令」と「引数」の組み合わせで構成されます。基本構文は以下のとおりです。

命令 引数

  • コメントは # を先頭につけて記述します
  • 命令は慣習的に 大文字 で書きます

指定できる内容

Dockerfileで定義する代表的な要素は次の通りです。

内容説明
ベースイメージどのOSや環境を元にするかを決める。
実行コマンドコンテナ内で自動実行する処理を定義
環境変数コンテナ内で使う環境設定を記述
常駐プロセスコンテナ起動時に動かすサービスやアプリ

 つまりDockerfileは「ベースOSを選び、その上にアプリをセットアップして、最終的にどう動かすか」をまとめたレシピのようなものです。

主なDockerfileの命令一覧

Dockerfileに書ける命令はたくさんありますが、ここでは代表的なものを解説します。

命令説明使用例
FROMベースイメージを指定する。Dockerfileの最初に書かれることが多い。FROM ubuntu:20.04
RUNコマンドを実行してレイヤーを作成する。パッケージのインストールなどで利用。RUN apt-get update && apt-get install -y python3
CMDコンテナ起動時に実行するデフォルトコマンドを指定。1つだけ記述可能。CMD ["python3", "app.py"]
LABELメタデータ(作者や説明)をイメージに付加。LABEL maintainer="example@example.com"
EXPOSEコンテナが使用するポートを示す。実際に公開するには docker run -p が必要。EXPOSE 80
ENV環境変数を設定。ENV API_KEY=123456
ADDファイルを追加。URLや圧縮ファイルも対応。ADD app.tar.gz /app/
COPYローカルファイルをコピー。ADDよりシンプルで推奨。COPY app.py /app/
ENTRYPOINTコンテナ起動時に必ず実行するコマンドを固定。CMDで引数を追加できる。ENTRYPOINT ["python3"]
VOLUME永続データ保存のためのボリュームを指定。VOLUME /data
USERコンテナ実行ユーザーを指定。セキュリティ強化に有効。USER nobody
WORKDIR作業ディレクトリを指定。以降の命令はここを基準に実行される。WORKDIR /app
ARGビルド時の引数を設定。ARG VERSION=latest
ONBUILDこのイメージをベースにした子イメージで実行する命令。ONBUILD COPY . /app
STOPSIGNALコンテナ停止時に送るシグナルを指定。STOPSIGNAL SIGINT
HEALTHCHECKコンテナが正常に動作しているかを定期的に確認する。HEALTHCHECK --interval=5s CMD curl -f http://localhost/
SHELLデフォルトシェルを変更する。SHELL ["/bin/bash", "-c"]

コマンドの解説(例:RUN、CMD、COPY)

例えばよく使う3つの命令をもう少し詳しく見てみましょう。

RUN

RUN コマンド

イメージのビルド時にコマンドを実行して新しいレイヤーを作ります。
実行例

RUN apt-get update && apt-get install -y nginx

これによりNginxがインストールされた状態のレイヤーが追加されます。

CMD

CMD ["実行ファイル","引数1","引数2"]

 コンテナ起動時に実行されるデフォルトのコマンドを指定します。docker run の後にコマンドを指定すれば上書きされます。

COPY

COPY コピー元 コピー先

 ローカルにあるファイルやディレクトリをイメージ内にコピーします。ADD よりシンプルで推奨されます。

まとめ

 Dockerfileはコンテナ環境を自動で構築するための設計図であり、各命令は新しいレイヤーを作成しながらイメージを組み上げていきます。主要命令を正しく理解すれば、効率的に軽量で使いやすいDockerイメージを作れるようになります。