【Docker】Docker ~ 基礎知識編 ~

■ はじめに

なんとなーくやっていて、いまいち自分の身になっていなかった
Docker の再入門してみる。

時間があるなら、以下の動画を流し見してみるといいかも。

https://www.youtube.com/watch?v=5d8O7jm7Q5c&t=586s

目次

【1】Docker (ドッカー) 
 1)キーワード
【2】仮想マシンとの違い
【3】Dockerに関するフロー
 1)コンテナが起動されるまでの流れ
 2)遷移図
【4】用語整理
 1)Docker Image (イメージ)
 2)Docker Container (コンテナ)  
 3)Dockerfile (ドッカーファイル)
 4)Docker Compose (ドッカーコンポーズ)  
 5)namespace (ネームスペース)

 【1】Docker (ドッカー)

 * 軽量仮想化環境を実現できるツール
 * コンテナ型仮想化

 1)キーワード

[1] Build once, run anywhere

[訳] 一度書けばどこでも実行できる 
 => Dockerは、「一度書けばどこでも実行できる」を実現

[2] IaC (Infrastructure as Code)

[訳] インフラのコード化
=> インフラ構成をコードで管理していくこと

[3] DevOps(デブオプス)

* 開発(Development)と運用(Operations)を組み合わせた造語
* 開発部門と運用部門が協力しあいながら、
 システムを作りあげていくソフトウェア開発手法

https://geechs-magazine.com/tag/tech/20160325
http://it.impressbm.co.jp/articles/-/12455
http://www.buildinsider.net/enterprise/devops/01

 【2】仮想マシンとの違い

仮想マシン(左側)、Docker(右側)

+------------------+ 
|    Application   |
+------------------+       +------------------+
|    Middle ware   |       |    Application   |
+------------------+       +------------------+
|     Guest OS     |       |    Middle ware   |
+------------------+       +------------------+
|    Hypervisor    |       |   Docker Engine  | <= ここに違い
+------------------+       +------------------+
|     Host OS      |       |     Host OS      |
+------------------+       +------------------+
|     Hardware     |       |     Hardware     |
+------------------+       +------------------+

 【3】Dockerに関するフロー

1)コンテナが起動されるまでの流れ

* 例えば、「docker container run hello-world」した際のフローは以下の通り。
 => 『』の部分は登場人物

[1] 『ユーザ』がコマンド操作

* 今回の場合、コマンド「docker container run hello-world」を入力

[2]『Docker クライアント』が受け取り『Dockerエンジン』に作業依頼

* 裏で勝手にやってくれる
* 「Dockerデーモン」は、『Dockerエンジン』の一部で
 外部からの命令をREST APIで受け付けてくれる

[3] ローカルにDockerイメージがなければ、外部の『DockerHub』からDockerイメージを取得

* 今回の場合、Dockerイメージ「hello-world」がなかったので、以下が表示
~~~~~
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
xxxxxxxxxxxxxx: Pull complete
~~~~~

[4] Dockerイメージから、Dockerコンテナを作成し、実行

* 裏で勝手にやってくれる

[5] コンテナの出力をクライアントにリアルタイムで送って表示

* 以下のように表示される
~~~~~
Hello from Docker!
This message shows that your installation appears to be working correctly.

・・・略・・・

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
~~~~~

2)遷移図

                       +------------+
                       | Docker Hub |
                       +------------+
                             | ↑
                        pull | | push
                             ↓ |
+------------+  build  +--------------+ rmi
| Dockerfile | ------> | Docker Image | ------> Deleted
+------------+         +--------------+
                  ↙ ↗  create | ↑ commit
          run ↙ ↗ commit      ↓ |
+-----------+  stop   +-----------+ rm
| Container | ------> | Container | ------> Deleted
| (Running) | <------ | (Stopped) |
+-----------+   run   +-----------+

【4】用語整理

1)Docker Image (イメージ)

* オブジェクト指向的には、クラス
* テキストファイル(Dockerfile) からビルド

2)Docker Container (コンテナ)

* オブジェクト指向的には、インスタンス
* Image から作られる動作環境
* 原則、1コンテナ1アプリ

3)Dockerfile (ドッカーファイル)

* Image を自動で作成してくれるファイル
* Dockerfile の サンプルについては、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2020/04/14/000000
https://dk521123.hatenablog.com/entry/2017/09/23/235818

4)Docker Compose (ドッカーコンポーズ)

* 複数コンテナをまとめて管理するツール
 => YAMLファイルで複数コンテナを定義
* 詳細は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2020/04/11/000000

5)namespace (ネームスペース)

* プロセス、ファイル構造、ユーザーID、グループIDなどを
 一つのOSの中で分離するLinuxカーネルに実装された技術
 ⇒ コンテナ技術の基礎の一つとなっている

参考文献

初学者用サイト
https://y-ohgi.com/introduction-docker/

関連記事

Docker ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2017/09/23/235818
Docker Desktop / WSL2 ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/12/08/165505
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030
Docker ~ Proxy環境下でDockerを使用する ~
https://dk521123.hatenablog.com/entry/2023/11/30/004707
Docker ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/02/25/000000
Docker ~ 基本編 / docker network ~
https://dk521123.hatenablog.com/entry/2022/04/30/000000
 Docker ~ 基本編 / Data Volume ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100
Docker ~ 基本編 / Dockerfile ~
https://dk521123.hatenablog.com/entry/2020/04/14/000000
Docker ~ 基本編 / docker imageコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000
Docker ~ 基本編 / docker container コマンド ~
https://dk521123.hatenablog.com/entry/2022/01/20/000000
Docker ~ 基本編 / レポジトリに関するコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/21/000000
脆弱性エラー対応時に役立ったDockerコマンド
https://dk521123.hatenablog.com/entry/2024/02/03/020736
Docker ~ Docker Hub への登録 ~
https://dk521123.hatenablog.com/entry/2024/01/21/125706
Docker ~ ファイルをコンテナにコピー ~
https://dk521123.hatenablog.com/entry/2022/04/27/000000
Docker ~ クリーンアップ / prune ~
https://dk521123.hatenablog.com/entry/2023/07/17/230956
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ docker-compose.yml ~
https://dk521123.hatenablog.com/entry/2020/12/18/152949
Docker compose ~ Version 2 ~
https://dk521123.hatenablog.com/entry/2023/01/02/000000
Dockerfile / Docker Compose でシェルを実行する
https://dk521123.hatenablog.com/entry/2023/07/21/234509
Docker ~ トラブルシュート方法 ~
https://dk521123.hatenablog.com/entry/2023/12/12/034018
Docker によるトラブルシューティング
https://dk521123.hatenablog.com/entry/2017/09/24/162257
Windows / Docker Desktop でのトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/12/11/115814
Proxy環境下でdocker pullしたらエラー
https://dk521123.hatenablog.com/entry/2024/02/08/144941
Docker ~ GO言語 ~
https://dk521123.hatenablog.com/entry/2022/01/14/102719
Docker ~ Webサーバ ~
https://dk521123.hatenablog.com/entry/2022/02/22/000000
Docker ~ WordPress
https://dk521123.hatenablog.com/entry/2022/04/29/000000
Docker ~ Redmine
https://dk521123.hatenablog.com/entry/2023/01/09/000000
Docker ~ LAMP
https://dk521123.hatenablog.com/entry/2023/01/12/000000
Docker compose ~ PostgreSQL
https://dk521123.hatenablog.com/entry/2023/07/20/025544
Docker compose ~ Pgweb/pgAdmin ~
https://dk521123.hatenablog.com/entry/2023/08/10/111919
WSL ~ Windows Terminal ~
https://dk521123.hatenablog.com/entry/2020/12/10/094125