最終更新日: 2026-08-02
TOP(About this memo)) > 一覧(Docker) > Dockerfile・ビルド
FROM: ベースとなるイメージMAINTAINER: 作成者の情報。(?) 現在は非推奨で、代わりに LABEL の使用が推奨されている。RUN: コマンドの実行(イメージ作成時に実行される)ADD: ファイル・ディレクトリの追加CMD: コンテナの実行コマンド(1つのみ有効)ENTRYPOINT: コンテナの実行コマンド
docker run やdocker-composeの command で上書きできるのは CMD のみで、ENTRYPOINT は上書きできない点が異なる。WORKDIR: 作業ディレクトリの指定(存在しない場合は作成される)COPY <コピー元> <コピー先>
<コピー元> で指定したファイル・ディレクトリを、イメージのファイルシステム上の <コピー先> に追加する。COPY hom* /mydir/ のように、「hom」で始まるファイルすべてを追加することもできる。COPY ./app ./ のように書くと、./app の中身が ./ へ展開される。app ディレクトリごとコピーしたい場合は COPY ./app ./app とする。ENV: 環境変数の指定ARG: Dockerfile内で使用できる変数。ENV と異なり、Dockerfile内でのみ使用できる。
ADD, COPY, WORKDIR, RUN, USER, ENV などで使える。FROM busybox
ARG hoge # ARG hoge="world" のようにデフォルト値も設定できる
RUN echo $hoge
docker build ./ --build-arg hoge=hello
FROM busybox
ARG user
USER ${user:-some_user}
EXPOSE: ポートのエクスポートVOLUME: ボリュームのマウントUSER: 実行ユーザーの指定EXPOSE
EXPOSE に記述しておくことで、どのポートをpublishすればよいかが分かりやすくなる。--publish-all(-P)を指定すると、EXPOSEしておいたポートをすべてホストマシンへ公開できる。--expose
--publish(-p)
-p 8080:80 のように指定すると、コンテナの80番ポートをホスト側の8080としてpublishできる。-p オプションだけで済ませることもできる。test.txt は「/tmp」配下ではなく「/」配下に作成される。
RUN cd /tmp # (1)
RUN touch test.txt # (2)
cd /tmp が実行されるが、(2)の処理は新しく起動したコンテナで実行されるため、結局「/」配下で実行される。COPY --from=composer /usr/bin/composer /usr/bin/composer
COPY --from=node /usr/local/bin/node /usr/local/bin/node
COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules