
【Docker入門】Dockerfileの構造①
Dockerfileは、Dockerコンテナの構成情報を記述するテキストファイルであり、Docker上で動作させるコンテナの設定を定義します。通常、DockerイメージはDockerfileに基づいて構築され、それによってコンテナの動作や環境が定義されます。このファイルは、docker build
コマンドを使用してDockerイメージを構築する際に使用されます。
Dockerfileの基本構文は、各行に命令とそれに続く引数があります。命令は大文字で統一されることが一般的です。Dockerfileには、ベースとなるDockerイメージの指定、Dockerコンテナ内で実行するコマンド、環境変数の設定、およびデーモンの実行など、さまざまな設定が記述されます。
Dockerfileの基本構文
【構文】
命令 引数
- コメントには「#」をつける。
- 慣例的に命令は大文字で統一する。
【指定する内容】
具体的には、以下のような内容を指定します。
- コンテナのベースとなるイメージ
- コンテナ内で実行するコマンドやスクリプト
- コンテナ内で使用される環境変数
- バックグラウンドで常に実行されるプロセスやデーモン
これらの設定は、Dockerfile内の命令(例:FROM
、RUN
、CMD
、ENV
など)を使用して指定されます。これらの命令は、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 |
ARG | Dockerfile内で使用される変数を定義する。ARGで定義された変数はDocker build時に引数として渡すことができる。 例: ARG VERSION=latest |
ONBUILD | イメージがベースイメージとして使用された場合に実行される命令を指定する。親イメージがビルドされた後に実行されるため、サブイメージの構築時に役立つ。 例: ONBUILD COPY . /app |
STOPSIGNAL | コンテナの停止を検知するシグナルを指定する。デフォルトではSIGTERMが使用される。 例: STOPSIGNAL SIGINT |
HEALTHCHECK | コンテナのヘルスチェックを設定する。ヘルスチェックの方法を指定し、コンテナが正常に動作しているかどうかを定期的に確認する。 例: `HEALTHCHECK --interval=5s CMD curl -f http://localhost/ |
SHELL | Dockerfile内で使用するデフォルトのシェルを指定する。デフォルトでは/bin/shが使用される。 例: SHELL ["/bin/bash", "-c"] |
これらの命令は、Dockerfile内で使用される主要な構成要素であり、Dockerコンテナの構築とイメージをカスタマイズを行う際に役立ちます。