Dockerfileの構造①

 Dockerfileは、Dockerコンテナの構成情報を記述するテキストファイルであり、Docker上で動作させるコンテナの設定を定義します。通常、DockerイメージはDockerfileに基づいて構築され、それによってコンテナの動作や環境が定義されます。このファイルは、docker buildコマンドを使用してDockerイメージを構築する際に使用されます。

 Dockerfileの基本構文は、各行に命令とそれに続く引数があります。命令は大文字で統一されることが一般的です。Dockerfileには、ベースとなるDockerイメージの指定、Dockerコンテナ内で実行するコマンド、環境変数の設定、およびデーモンの実行など、さまざまな設定が記述されます。

Dockerfileの基本構文

【構文】

 命令 引数

  • コメントには「#」をつける。
  • 慣例的に命令は大文字で統一する。

【指定する内容】

具体的には、以下のような内容を指定します。

  • コンテナのベースとなるイメージ
  • コンテナ内で実行するコマンドやスクリプト
  • コンテナ内で使用される環境変数
  • バックグラウンドで常に実行されるプロセスやデーモン

 これらの設定は、Dockerfile内の命令(例:FROMRUNCMDENVなど)を使用して指定されます。これらの命令は、Dockerイメージのビルド時に実行され、イメージの構築とカスタマイズを可能にします。

主なDockerfileの命令

主なDockerfileの命令には下表のようなものがあります。

命令説明
FROMベースイメージを指定する命令。Dockerイメージのベースとなるイメージを指定する。
例: FROM ubuntu:20.04
RUNコマンドを実行する命令。指定されたコマンドを実行し、その結果を新しいレイヤーとしてコミットする。
例: RUN apt-get update && apt-get install -y python3
CMDコンテナのデフォルトの実行コマンドを指定する。CMDはDockerコンテナが起動したときに実行されるコマンドを指定する。ただし、Dockerfile内に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.py /app/
COPYファイルやディレクトリをイメージにコピーする。ADDと同様にファイルやディレクトリをイメージに追加するが、ローカルファイルのコピーのみに使用される。
例: COPY app.py /app/
ENTRYPOINTコンテナが実行されるときに実行されるコマンドを指定する。CMDと同様に実行されるが、ENTRYPOINTはCMDで指定されたコマンドに引数を追加できる。ENTRYPOINTで実行するコマンドを固定し、CMDでデフォルトの引数を設定します。
VOLUMEボリュームをマウントする。ボリュームをコンテナにマウントし、永続的なデータの保存や共有が可能になる。
例: VOLUME /data
USERコンテナが実行される際のユーザーを指定する。通常はルートユーザーがデフォルトだが、セキュリティを向上させるために別のユーザーを指定することができる。
例: USER nobody
WORKDIRコンテナ内の作業ディレクトリを指定する。コマンドの実行やファイル操作が行われるディレクトリを指定する。
例: WORKDIR /app
ARGDockerfile内で使用される変数を定義する。ARGで定義された変数はDocker build時に引数として渡すことができる。
例: ARG VERSION=latest
ONBUILDイメージがベースイメージとして使用された場合に実行される命令を指定する。親イメージがビルドされた後に実行されるため、サブイメージの構築時に役立つ。
例: ONBUILD COPY . /app
STOPSIGNALコンテナの停止を検知するシグナルを指定する。デフォルトではSIGTERMが使用される。
例: STOPSIGNAL SIGINT
HEALTHCHECKコンテナのヘルスチェックを設定する。ヘルスチェックの方法を指定し、コンテナが正常に動作しているかどうかを定期的に確認する。
例: `HEALTHCHECK –interval=5s CMD curl -f http://localhost/
SHELLDockerfile内で使用するデフォルトのシェルを指定する。デフォルトでは/bin/shが使用される。
例: SHELL ["/bin/bash", "-c"]
主なDockerfileの命令

 これらの命令は、Dockerfile内で使用される主要な構成要素であり、Dockerコンテナの構築とイメージをカスタマイズを行う際に役立ちます。