こちらは個人の備忘録になります。
みなさんこんにちは、steveです。最近dockerについて学ぶことがおおく、サーバーサイドについて、たくさんの知見を得る機会となりました。今回はその知見をアウトプットとして共有させていただきます。
今回読んだ書籍はこちらです
「linuxの仕組み」からは、OS周りの知識、docker、仮想化の章を参考にさせていただきました。
順序構成
1.Dockerとは何か
2. 他の独立ツールとの違い
3. Linuxとの関連
4. Dockerが動く仕組み
5. Dockerfile、docker-compose.ymlの使い方
6. まとめ
1.Dockerとは何か
Dockerとは、データやプログラムを隔離する仕組みです。
SQLや、OSなどを隔離させ、独立させて管理することができるというわけです。
サーバーに何かしらの要素を共同させており、片方のシステムのみにアップデートがかかり、別のシステムに影響が起こる。というような事態を避けるため、実行環境が独立してるサーバーを用意する必要がある、そこで使われるのがdockerというわけです。
2.他の独立ツールとの違い
dockerはその形態から「コンテナ型」と呼ばれます。
その対となる存在が「VM型」です。
dockerはlinux osを前提にengineを立ち上げ、各コンテナの中には「プロセス」と呼ばれるLinux OS の下っ端みたいなやつが配置され、その配置を、linux OSが中央集権的に管理するというものです。従って各コンテナの中にカーネルがないため、通信速度がVM型と比べて速いというのがあります
一方「VM型」(別名ハイパーバイザー型)は、ホストの物理マシンの上にハイパーバイザーと呼ばれるものを立ち上げ、その上に仮想マシンを立ち上げます。仮想マシンの中には、各種OSが配置され、windowsでもMac でもOSを利用可能となります、各種仮想マシンの中に各種OSが配置されるので、dockerと比べたらかなり動きが遅くなります
ハイパーバイザー型で有名なものはHyper-Vなどが挙げられます
3.Linuxとの関連
2で述べさせていただいたように、基本的にdockerはlinuxのものになります。
実際にエンジンを立ち上げる場合も
1.仮想環境下にlinux OSをダウンロード
2.最初からlinuxOSのPCを使う
3.Docker desktopを使う(これが主流)
しかありません。
docker desktopは仮想環境下に最低限のカーネルのみ導入して軽量で使うことが可能です
そもそも、linuxは、実行中のプログラム「プロセス」と、複数のプロセスを管理する「カーネル」からなります。dockerは、linux OSを基準に作られており、コンテナの中にも、プロセスが格納されています。
4 dockerが動く仕組み
ここまでの内容をまとめて、dockerの仕組みを言うと、dockerは
物理マシン→linuxOS →docker engine →containerと積み上がっています。
ここで、
物理マシン=ハードウェア
linux OS =OS
docker engine = ソフトウェアと考えることができます。
OS は3章で書いたように、SW → HW、HW→SWを翻訳するような役目を持っており、翻訳する過程は、カーネルを通して、プロセスにシステムコールを許可をすることで実現されています。
結果、docker engineがコンテナの土台となり、コンテナが動きます。
さらに、コンテナそれぞれは、「イメージ」と呼ばれるコンテナの模型から構成されます。
イメージの作成方法は主に二つで、
docker hub からイメージをインポートする。
dockerfileを用いて独自でイメージを作成する。
そして、イメージを作成してコンテナを構成し、docker engine を通じてRUNさせると、コンテナが作動すると言う訳です。
5docker-compose.yml とdockerfileの違い。
結論、マクロなcomposeとミクロなdockerfileは、個々のコンテナを作成するのに使い、composeは各コンテナを管理、接続するのに使います。
ここで、「え?でもデータベースの設計って、個々のコンテナなのに、なんで、Composeに書くの?」と思うかもしれませんが、それはdockerhub上に最適化されたイメージが用意されているため、それを用いるのが一般的なため、Composeに書くと言う訳です。
まとめ
Dockerは、アプリケーションとその実行環境を独立した形で動作させる技術で、Linuxを基盤に設計されています。これにより、複数のシステムが互いに干渉することなく実行可能になります。
コンテナ型であるDockerは、軽量かつ高速で、ホストOSのカーネルを共有する一方、VM型(ハイパーバイザー型)は仮想マシンごとにOSを持つため、リソース消費が多いという特徴があります。Dockerの仕組みは、物理マシン上でLinuxカーネルを活用し、Docker Engineを通じてコンテナを管理する構造に基づいています。
Dockerを活用する際には、Dockerfileで個々のコンテナを作成し、docker-compose.ymlを利用して複数のコンテナを連携させる方法があります。特にデータベースでは、Docker Hubの公式イメージを活用することで、設定を簡略化しつつ、迅速に環境を構築することが一般的です。
今回、Dockerを学んだことで、いろんなことが線になってきつつあると思います。
これからもインプットを続けていきたいと思います