
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イメージを作れるようになります。
