プログラミング学習記録#16 Dockerfile②

Dockerfile記法


●COPY

ホスト(ローカル)のファイルやディレクトリをDockerイメージにコピーする

COPY <コピー元> <コピー先>
ex}
COPY index.html /  mydir/index.html  # ファイルをファイルに
COPY  index.html  /mydir/    # ファイルをディレクトリに
COPY  src/   /mydir/            #  ディレクトリをディレクトリに

・コピー先は絶対パスか、DORKDIR(作業ディレクトリ)からの相対パス

・ソースコードや設定ファイルをローカルで作成して、COPYを使ってDockerイメージにコピーして使用する

・似たようなインストラクションにADDがあるがCOPYを使用することが推奨されている


●ENV

環境変数を設定する

ENV <キー>=<値>

ex)
ENV MYSQL_USER=admin

ENV MY_NAME=“Taro Yamada”

・Dockerfileの中でその値を使いまわしたり、イメージに値が渡されるので作成されたコンテナの中で環境変数の値を使うことができる


●WORKDIR

コマンドを実行する作業ディレクトリを指定する

WORKDIR <ディレクトリのパス>

ex)
WORKDIR /app

WORKDIRを設定しておくとRUNの際にcdコマンドを使わなくて良くなり読みやすくトラブルも起きにくくなる


●ENTRYPOINT

コマンド実行時に実行したいコマンドを指定する

ENTRYPOINT [“実行ファイル”, “パラメータ1”, “パラメーター2”]

ex)
ENTRYPOINT [“apachectl”, “-D”, “FOREGROUND”]

・役割としてはCMDによく似ている

○CMDとENTORYPOINT

共通点

・コンテナ実行時に実行される

・docker container run 実行時に引数を渡すとコマンドを上書きできる

違い

・CMD : docker container時の引数でCMD[”command”]のcommand部分を上書きして実行する

・ENTRYPOINT: docker container時の引数がENTRYPOINT[“command”]のcommandの引数として実行される

・併用した場合

CMDに書かれている場合はCMDに書かれている内容がENTRYPOINTに書いてあるcommandのオプションとして実行される


Dockerfile作成時のベストプラクティス


●ビルドコンテキストを理解する

ビルドコンテキスト:docker build時のワーキングディレクトリのこと

Dockerfileとビルドコンテキスト以下のファイルを使ってビルドする


●.dockerignoreファイルを使う

Dockerのビルド時に無視するファイル/ディレクトリを指定できる

・コンテナ内に不要な情報やイメージのビルド時に追加されるファイルは.dockerignoreで無視

・ビルド時間を短縮できる


●コンテナ毎に一つのプロセスだけを実行する

・1つのコンテナの中では一つのプロセスだけを実行する

メリット

・コンテナの再利用がしやすくなる

○イメージのサイズはできる限り小さくする

イメージのサイズが小さいほどディスク容量を圧迫せずに配布も楽にできる

・不要なパッケージをインストールしない

必須でないパッケージはインストールしない

ベースイメージを小さいものにする

・RUNをまとめる

RUN実行の度にイメージのレイヤーが作成され、キャッシュに利用される

レイヤーを作るほどイメージサイズが大きくなる

1つのRUNの中で&&で繋げると余計なレイヤーが作られない

この記事が気に入ったらサポートをしてみませんか?