Dockerについて様々なサイトを参考にさせていただき、あくまでも自分の備忘録としてまとめました。
なのでわかりやすく書いてはいないので詳細を知りたい方は参考URL欄にあるリンクに飛ぶようお願いします。
#image
コンテナを起動するのに必要な設定ファイルをまとめたもの。
「imageはコンテナの元であり、imageからコンテナを起動する」と理解すると良いと思います。
・イメージの構造
一度作成されたイメージは読み取り専用であり、イメージからコンテナを起動した際に作成されるコンテナレイヤーのみが編集可能になっている。
イメージレイヤの内容を変更する際は変更対象のレイヤを1度コンテナレイヤにコピーしてから変更内容を反映する。これをコピーオンライト
と呼ぶ。
また同一のホスト上で動く複数のコンテナがある場合はイメージレイヤを共有することができます。
これにより、ホストのストレージ容量の圧迫を抑制することができる。
#Dockerfile
Dockerfileはコンテナの構成情報を定義したファイル。
何回もDockerコマンドを打たなくても1回コマンドを打てばDocker imageを生成できる。
Dockerfileからベースイメージを作成することをビルド
といい、Dockerコンテナからイメージを作成することをコミット
と呼びます。
#Dockerにおけるデータ管理
起動したコンテナ内で扱う動的なデータは、読み書き可能な最上レイヤー(コンテナレイヤー)に置くことも可能ですが、
→コンテナが削除された時点でそのコンテナ内のデータは消える
→コンテナ間でデータ共有できない
→コンテナレイヤーへのデータ書き込みは、通常のファイルシステムと異なるユニオンファイルシステムが使われているため、書き込み速度が遅いというデメリットがあり、Dockerではホストマシン上にデータを管理し、それをコンテナにマウントする方式がとられている。
#volume
ホストマシン上に自動生成される指定ディレクトリをコンテナにマウントする手法。
#コンテナの性質
コンテナはホストOS上のプロセスとして扱われます。なのでデータ処理が途中で削除されるとデータが保存されないようにコンテナが削除されるとデータは保存されず再度起動しても削除前のデータが戻りません。このような性質のことを『ステートレス』といいます。
一方、コンテナが削除されてもボリュームがあればデータを残すことができます。
データをコンテナの削除から退避させることを「データの永続化」といいます。また、コンテナが削除されても退避していたデータに引き続きアクセスできることを「ステートフル」といいます。
Dockerではコンテナを明示的に削除しない限りデータは保持されます。(一時停止や停止コマンドではデータは保持される)
#複数のコンテナの管理方法
Dockerには『1つのコンテナが扱うプロセスは1つのみ』という考え方があります。
2つの異なるプロセスを1つのコンテナに内包した場合に片方のプロセスにアップデートがあった場合にもう片方のプロセスにも影響が出てしまうためです。
#Dockerネットワーク
複数立ち上げたコンテナ間を通信する方法。
例えば、Webページの運用を行う場合、WordpressコンテナとMySQLコンテナを立ち上げとすると、WordpressコンテナはMySQLコンテナと通信する必要があります。
その手段としてDockerネットワークが使用される。
##Bridgeネットワーク
デフォルトで存在するネットワークで、作成されたコンテナがデフォルトで接続されるのがbridge network。
同じネットワーク内に存在するコンテナとIPアドレス指定で通信はできるが、DNSが定義されていないのでコンテナ名では他のコンテナには通信できない。
##独自ネットワーク
独自のネットワークを作成することで、コンテナ名でコンテナ通信が可能になる。
#Docker Compose
Docker Comaposeは複数コンテナのDockerアプリケーションを事前定義して実行するためのツール
またWebサービスの実行環境をDockerで構築している場合にWebサーバー、DBサーバー、Cacheサーバーなどの定義を1つのdocker-compose.ymlファイルに記述しておくことによって、それを元に実行に必要なコンテナをまとめて起動・設定することがでそれを元に実行に必要なコンテナをまとめて起動・設定することができる。
#Docker Machine
Docker Machineは、Docker Engineを搭載した仮想マシンの管理(作成、起動、停止、再起動など)をコマンドラインから実行できるツール。
Mac OSの場合は、仮想化ソフト(Virtul Box)をドライバーに使用して、Docker Engine を搭載した仮想マシンを管理するのがDocker Machineです。
#AWSにDockerを組み込む
Docker Machineを使用してlocalのコマンドラインからAWSやGCPなどにDocker Engineを搭載した仮想マシンを作成・管理する。
#DockerSwarm
複数台のDockerホストマシンの間でコンテナ間通信の設定・管理を自動化する手法の1つ。
Docker Swarmには動作モードの1つとしてSwarm Modeがあり、下記を持ちます。
・クラスタ管理機能:複数台のマシンをネットワーク接続してひとまとまりのシステムとして管理する機能。
・オーケストレーション機能:複数のマシンを自動で管理する機能(負荷分散、コンテナ起動など)
###まとめるとDocker Swarmは、
・Dockerホストマシン同士をネットワーク接続する
・その上で「複数のホストマシン」と「その中で動作するコンテナ達」を管理・運用する様々な機能を提供する
##参考URL
【図解】Dockerの全体像を理解する -前編-
https://qiita.com/etaroid/items/b1024c7d200a75b992fc
コンテナにもエンジンが必要! ―その代表格と言える「Docker」とは
https://thinkit.co.jp/article/17349