DockerfileのFROM,RUN,CMDについて学んだのでまとめ

プログラミング

DockerfileのFROM,RUN,CMDまとめ

どうも、てーやまです。

Ruby on Railsで何かWebアプリケーションを作ってみたいので、Dockerを使った環境構築について学んでいます。

その中で初めて『Dockerfile』を勉強したので、備忘録も兼ねてまとめておきたいと思います。

Dockerfileとは

DockerfileはDockerイメージを構築する際の一つひとつの命令(コマンド)が記載されたテキストファイルであり、設計書とも言えます。

コンテナからイメージを逆生成(Commit)することもできますが、Dockerhubからイメージを配布(プル)された人は、Dockerfileが無いと『どんなイメージなのか』が分からないので、必須で作成しておく必要がありそうです。

というよりも、Dockerfileからイメージを生成することが一般的なのだと思います。

※また、DockerhubにはDockerfileのgithubページのリンクを貼っておくのが一般的のようです。

FROM

Dockerfileを開くと、この『FROM』から始まっていると思います。

このFROM命令によって、ベースとなるイメージを決定します(OSのlatestタグのイメージがベースとなる場合が多いのでしょうか)

RUN

『RUN』は上記のベースとなるイメージの上に、イメージレイヤーを追加します。

FROM命令でベースとなるイメージを指定しておき、RUN命令で必要なパッケージをインストールする等することで、ベースのイメージレイヤーの上に、固有のイメージレイヤーが積み重なり、1つのイメージを構築していくようです。

当然イメージレイヤーが積み重なることでイメージ自体の容量が膨らむため、むやみやたらにRUN命令を発行せず、1行にまとめることがDockerfileのベストプラクティスとされているようです。

RUN apt-get update && apt-get install -y \
bzr \
cvs

例えば上記引用では、イメージレイヤーが複数作成されないよう、バックスラッシュで改行して一行にまとめています。

また、パッケージリストの更新(apt-get update)とインストールは必ず『&&』で繋いでおくのが良さそうです。

分けて記載してしまうと、リストの更新はキャッシュにより省略されてしまい、新たに追加しようとするパッケージが古くなってしまう事象が発生します。

CMD

『CMD』はイメージからコンテナを作る際に実行される命令(コマンド)を記載します。

例えばLinuxOSをベースにしたイメージからDockerコンテナの中に入って作業する際、予めbashが起動したら便利なので、CMDに記載しておくわけです。

例えばCMDをbashとしておくと、以下の画像のように引数としてbashを渡さなくても、デフォルトでbashが起動するようになります。

と、まぁここまでとなりますが、今後も勉強したことはどんどん追記していこうと思います。