Dockerの本を読んでみました。
今までLinuxの検証を行うときにも、複数台のサーバーを立てて検証しておりましたが、
毎回同じ設定を行うのがめんどくさいと感じ、今まで避けてきたDockerに手を出してみました。
この記事は、今回読んだ本のアウトプットとしての記事となります。
参考文献
仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん 単行本
背景
この本を買った背景として、いままでWEB上から仕入れた情報を基にコンテナを作成したことがあり、Dockerの基本的な考え方、使い方に間違いがないかを確認したいと感じていました。
また、使い方を調べていく中で断片的な情報を得ていくことになり、最適な方法が何かがわからない状態となったり、公式のドキュメントを読んで使い方を調べようにも知らない単語が多いことなどが重なり、本来やりたかった検証どころではないという問題に至ることが多く、体系的に学ぶ必要性を感じたことが本著を読む背景となります。
同じような思いを抱えている方には、本著を読まれることを強くお勧めします。
Chapter1
Dockerとは
ApacheやMysql等のプログラムやデータ、OS(正確にはOSではない)をそれぞれ隔離することができる仕組み。
この隔離したものをコンテナといい、コンテナはDocker Engineによって作成されている。
このDocker Engineによって、それぞれのプログラムやデータなどを隔離することができるようになる。
Docker Engineによって隔離されたプログラムやOSは、それぞれが独立してDocker Engine上に積みあがるように隔離される。
なぜ隔離するのか
複数のサービスで同じプログラムを利用していると、片方のサービスをアップデートしたときに、もう片方のサービスに影響を及ぼす可能性がある。Dockerを利用することで、もう片方のサービスへ影響を及ぼさずにアップデートが可能となる。
また、Apache等のサービスは、基本的にサーバー内で一つしか稼働できないのに対して、Dockerを使用してプログラムを隔離することで、複数稼働させることが可能になる。
これにより、サーバーの台数を減らすことが可能となる。
Chapter2
Dockerの仕組み
基本的にDockerはLinux上でしか動作しないものであり、Linux上でDocker Engineを動作させ、その上にコンテナを作成し、コンテナ内でプログラム等が動作している仕組みとなっている。
コンテナ内にはLinux OSのようなものがはいっており、その上でプログラムが稼働していることになる。
動作の流れとしては、コンテナ内のプログラムからの指示が、Linux OSのようなものを通じ、Docker Engine、サーバー上のLinuxのカーネル部分という流れで指示を飛ばすことで動作してる。
Linux OSのようなものとは
このコンテナ内にあるLinux OSのようなものとは、Linux OSの中のハードウェアへ指示を飛ばすカーネルという部分以外の部分が入っており、これによりコンテナ内のプログラムの指示を理解し、Docker Engineを通じてサーバー本体のカーネルへ指示を飛ばすことが可能となる。
つまり、複数のコンテナでサーバー本体のLinux OSのカーネルを共有している状態となり、これにより軽い動作を実現している。
イメージとDockerHub
イメージとは、コンテナの設計書のようなもので、本著では「金型」と表現されている。
つまり、イメージを用いて、コンテナを作成し、作成したコンテナからイメージを作成することが可能であるということ。
この「金型」の機能により、自分で作ったアレンジしたコンテナをイメージにして、複数同じ設定のコンテナを作成することや、他のサーバー内へ同じ設定のコンテナを持ち運ぶことが可能となる。
このイメージはDockerHub上に公開することが可能で、多くの人がイメージを作成しているので、それを利用してコンテナを作成することも可能。
Dockerの基本的な考え方
Dockerは基本的に作っては捨てるという考え方で運用していく。
イメージを利用してコンテナを複製することが可能なため、同じ環境をアップデートしていくというより、新しくアップデートされたコンテナを作って古いコンテナは捨てるという流れで運用していくもの。
この時大切なデータはコンテナ外に保存することで、コンテナを破棄してもデータは消えずに運用することが可能となる。
最後に
今回は、仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん 単行本を読み学んだことをまとめてみました。
Chapter3からはハンズオンとなりますので、実際に買ってみてやってみるとよいと思います。
本著はDockerについて広く学ぶことができるように思いました。知識のある方としては、浅く感じるかもしれませんが、初学者や初めてDockerを触る方としては、ずらずらと知らない単語を並べられるより読み進めやすく、概念を理解しやすいと感じました。
本記事については、私の理解をまとめて記載しております。誤った情報を記載しておりましたら、申し訳ございません。