2025/05/02 Updated by

Custom Docker Image

Docker Image を自作する


[Up] Japanese English
まず初めに、「 Dockerfile のベストプラクティス 」 にざっと目を通しておくこと。

概要



Dockerfile


Dockerfile に、Docker Image を構築するための手順を記述する。 命令 (ディレクティブ) は以下の通り。


基本構成命令

命令 説明
FROM ベースイメージを指定する FROM ubuntu:24.04
LABEL メタデータを付与する LABEL maintainer="root@example.com"
ARG ビルド時の引数を定義する (--build-arg で渡せる) ARG VERSION=1.0
ENV 環境変数を定義する。ビルド時もContainer生成時も参照可能。 ENV PATH="/app/bin:$PATH"
WORKDIR 作業ディレクトリを指定する。 WORKDIR /app

ファイル・パッケージ関連命令

命令 説明
COPY ビルドコンテキスト (Dockerfileを置いたディレクトリ) 内からファイルやディレクトリをコピーする COPY entrypoint.sh /entrypoint.sh

コマンド実行命令

命令 説明
RUN ビルド時にコマンドを実行する。 RUN apt update && apt install -y curl
CMD コンテナ実行時のデフォルトコマンドを指定する。 ENTRYPOINT が無い場合のみ実行される。 CMD ["python", "test.py"]
ENTRYPOINT Container 実行時の実行ファイルを指定する。 CMD は ENTRYPOINT の引数として与えられる。 ENTRYPOINT [ "bash", "/entrypoint.sh" ]
SHELL RUN などで使うデフォルトのシェルを指定する。 SHELL [ "/bin/bash", "-c" ]

ユーザ・権限関連命令

命令 説明
USER 実行ユーザを変更する。 USER guest

ポート・ボリューム・メタ命令

命令 説明
EXPOSE Container が listen するポート番号を指定する。 実際に公開するには -p オプションが必要。 EXPOSE 22
VOLUME マウントするボリュームを定義する。 実際にマウントするには -v-mount オプションが必要。 VOLUME /data
STOPSIGNAL Container に送るシグナルを指定する。 STOPSIGNAL SIGKILL
LEALTHCHECK Container のヘルスチェックを定義する。 HEALTHCHECK CMD curl -f http://localhost

EXPOSEVOLUME は指定した値を Image の使用者に伝えるという意味を持つ。 指定したからといって何か起きるわけではない。 指定した値は、作成した Image に対して docker image inspect を実行することで確認できる。


その他の命令

命令 説明
ONBUILD 子イメージのビルド時に実行される命令を定義する。 ONBUILD COPY abc.sh /app
COPY --chown=user:group 所有者権限付きでファイルをコピーする。 (古いバージョンの Docker では使えない) COPY --chown=root:admin httpd.conf /etc/apache2