0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dockerの低レイヤー知識

Last updated at Posted at 2025-02-01

こちらは個人の備忘録になります。

みなさんこんにちは、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と比べたらかなり動きが遅くなります

image.png

ハイパーバイザー型で有名なものは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を学んだことで、いろんなことが線になってきつつあると思います。

これからもインプットを続けていきたいと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?