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が起動するようになります。
と、まぁここまでとなりますが、今後も勉強したことはどんどん追記していこうと思います。
ディスカッション
コメント一覧
まだ、コメントがありません