そもそもDockerfileとは?
Dockerイメージをそのまま使うのではなく、必要なパッケージやアプリ、各種設定を含んだDockerイメージを自分で作成して使用するケースが出てくる。
その場合、Dockerfileを作成し、それを使用して必要なDockerイメージを作成することができる。
Dockerfileには、ベースとするDockerイメージに対して実行する内容を記述する必要がある。
Dockerfileメリット
・Dockerコンテナの仕様をファイルで管理することができる
・Dockerコンテナの変更プロセスを自動化することができる
・コンテナイメージに、変更内容を履歴として保持することができる
・コンテナイメージの履歴を層(レイヤー)として管理することで、イメージを最小化することができる
・元となるコンテナのバージョンアップにもすぐに対応できる
Dockerfile作成
Dockerイメージを作成する方法は2つ
・「docker commit」コマンドで「コンテナ」からイメージを作成
・「docker build」コマンドで「Dockerfile」からイメージを作成
「コンテナ」からイメージを作成
ベースとなるイメージからコンテナを起動して、そのコンテナに対して、docker execでシェルに入って操作したり、docker cpでファイルをコピーしたりして調整を加える。最終的にdocker commitコマンドでイメージ化。
「Dockerfile」からイメージを作成
ベースとなるイメージと、そのイメージに対して、どのような操作をするのかを記したDockerfileと呼ばれるファイルを用意し、そのDockerfile通りにコンテナに対して変更やファイルコピーを加えることによって、イメージ作成をする。その際のコマンドはdocker build
。
Dockerfileを使用して、Dockerイメージを作成
作成したDockerfileを使ってDockerイメージを作成。Dockerfileのあるディレクトリに移動して、Dockerビルド(Dockerイメージを作成するコマンド)を実行。
なるべくまとめて実行する
ファイルの容量を減らしたと言われたが、はて?どのように?と疑問がうまれた。容量が大きくなる原因は、Dockerfileの各コマンドごとにレイヤーが作成されるため、その分Dockerイメージのサイズが大きくなってしまうのが原因。
なので、今回の答えは なるべく1コマンドで実行できるものは、まとめて実行する である。
(これはメリットの一つでもある)
作成できるレイヤーには上限(128レイヤー)があることも注意!!
Docker Compose
Docker Composeとはオーケストレーションツールで、複数のコンテナから構成されるアプリをどう展開するかを定義することができる。
このときに、設定を書くファイルをdocker-compose.yml
と言う。
Docker Composのメリット
・長い引数からの解放
・複数コンテナの連動
・まとめての停止・破棄
・コンテナの起動時の初期化やファイルコピー
docker-compose.ymlの書き方
「サービス」「ネットワーク」「ボリューム」の3つを定義
(1)サービス
全体を構成する1つ1つのコンテナのこと。Docker Composeにおいてサービスとは、コンテナのことだと言い換えてほぼ問題ない。
※ここでほぼというのは、scaleオプション指定をすると、1つのサービスに対して複数のコンテナを起動することができるため。つまり、サービスに対してコンテナが1対多の関係である。
(2)ネットワーク
サービス(コンテナ)が参加するネットワークの定義
(3)ボリューム
サービスが利用するボリュームを定義
用語集
・オーケストレーションツール:コンピュータシステム、アプリケーション、およびサービスにおける、設定、管理、調整の自動化
・レイヤー:何らかの装置やソフトウェア、システム、ネットワークの構造を説明する際、構成要素が階層状に積み上がった構造になっている場合にそれぞれの要素のこと