[Docker] イメージ構築の手順書「Dockerfile」

株式会社プライムストラクチャーのエンジニアのSayaです。

今回は、Dockerイメージを構築するためのファイルであるDockerfileについてまとめてみました。

Dockerfileとは

DockerDockerイメージを自動的に構築するときに読み込む、テキスト形式のドキュメントファイルです。

Docker buildコマンドによってDockerfileが読み込まれ、 Dockerfile内の命令通りにイメージを自動構築します。

Dockerfileの書き方

Dockerfile内は以下のように記述します。

# コメント
命令 引数
  • 一般的に命令は大文字で記述します。
  • Dockerfile内の命令を順番に実行していくため、1行目の命令はイメージを指定するFROMにします。
  • 記述が複数行に渡る場合はバックスラッシュ\で区切ります。

Dockerfileの主な命令リスト

以下の命令は主にイメージを作成するときに実行されます。

  • FROM
    ベースイメージの指定。
    一般的にDockerHubからパブリックリポジトリのイメージを取得する。
    Dockerfileの1行目に以下のように記述する。
    FROM
    FROM :
    FROM @

  • MAINTAINER
    作成者の名前の記述。
    MAINTAINER

  • RUN
    コマンドを実行する。
    RUN(シェル形式)
    RUN ["実行バイナリ", "パラメータ1", "パラメータ2"](exec 形式)

  • CMD
    Dockerfileで作成されたコンテナを起動するときに実行されるコマンド。
    CMDはイメージの作成時には実行されない。
    CMD ["実行バイナリ", "パラメータ1", "パラメータ2"](exec 形式、推奨する形式)
    CMD(シェル形式)

  • LABEL
    イメージにメタデータを追加する。
    バージョンや説明などを書く。
    LABEL = = = ...
    記述例)
    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates \
    that label-values can span multiple lines."

  • EXPOSE
    コンテナ実行時に開くポートの指定。
    EXPOSE [...]

  • ENV
    環境変数を変更できる。
    ENV
    ENV = ...

  • ADD
    ソースまたは”Https://~”などのリモートからコピーペーストする。
    圧縮ファイルも解凍する。
    ADD ...
    ADD ["", ... ""]

  • COPY
    ソースからコピーペーストする。
    COPY ...
    COPY ["",... ""]

  • ENTRYPOINT
    コンテナ起動時に実行するコマンドを定義する。
    ENTRYPOINT ["実行可能なもの", "パラメータ1", "パラメータ2"] (exec 形式、推奨)
    ENTRYPOINT コマンド パラメータ1 パラメータ2(シェル 形式)

  • VOLUME
    指定した名前でマウントポイントを作成し、他のホストやコンテナから外部マウント可能なボリュームにする。
    VOLUME ["/data"]

  • USER
    OS内のどのユーザで[RUN, CMD, ENTRYPOINT]を実行するか指定する。
    USER daemon

  • WORKDIR
    [RUN, CMD, ENTRYPOINT, ADD]実行時の作業ディレクトリを指定する。
    WORKDIR /path/to/workdir

  • ARG
    構築時に作業者がdocker buildコマンドで使う変数、--build-arg =フラグを定義する。
    ARG [=]

まとめ

今回はDockerfileについてまとめていきました。

Dockerfileを用いることでどの環境でもDockerさえあれば同じイメージの構築が出来ることが分かりました。

今後もDockerを使いこなせるように色々試していきたいと思います。

参考文献

Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
Dockerfile を書くベスト・プラクティス — Docker-docs-ja 17.06.Beta ドキュメント