【Docker】Docker ~ 基礎知識編 ~

■ はじめに

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

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

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

目次

【1】Docker (ドッカー) 
【2】Hello World
 1)nginxの起動
【3】仮想マシンとの違い
【4】作業の流れ
【5】用語整理
 1)Docker Image (イメージ)
 2)Docker Container (コンテナ)  
 3)Dockerfile (ドッカーファイル)
 4)Docker Compose (ドッカーコンポーズ)  
 5)namespace (ネームスペース)
【6】キーワード
 1)Build once, run anywhere
 2)IaC (Infrastructure as Code)
 3)DevOps(デブオプス)

 【1】Docker (ドッカー)

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

【2】Hello World

https://y-ohgi.com/introduction-docker/1_introduction/hello-docker/

で、「Play With Docker」っていう
Dockerを疑似体験できるサイト(※)を使って、
Hello World的なことを通して、
どれだけ Docker が便利なのかを体験する

※ DockerHubのアカウントが必要

お題

Dockerコマンドを使用して、nginxサーバを構築する

1)nginxの起動

# 以下の一行だけ(!!?)
 docker run -P nginx

解説:docker run [サービス]

 ... 対象サービスのコンテナを起動する

* docker run nginx => nginx起動
* -P => 設定されているポートを公開

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

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

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

 【4】作業の流れ

+-------+
| Image | <-----------------+
+-------+                   |
      ↓   docker pull       |
+-------+                   |
| Image |                   |
+-------+                   |
      ↓   docker run        |
+-----------+               |
| Container |               |
+-----------+               |
      ↓   docker commit     |
+-------+                   |
| Image | ------------------+
+-------+

【5】用語整理

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カーネルに実装された技術
 ⇒ コンテナ技術の基礎の一つとなっている

【6】キーワード

 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

参考文献

初学者用サイト
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
Windows Terminalを使ってWindows上にあるUbuntuでDockerを使えるようにする
https://dk521123.hatenablog.com/entry/2020/12/10/094125
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030
Docker ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/01/14/102719
Docker ~ 基本編 / Dockerfile ~
https://dk521123.hatenablog.com/entry/2020/04/14/000000
Docker ~ 基本編 / docker-compose ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker ~ 基本編 / docker-compose.yml の作成 ~
https://dk521123.hatenablog.com/entry/2020/12/18/152949
Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000
Docker ~ Data Volume ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100
Docker によるトラブルシューティング
https://dk521123.hatenablog.com/entry/2017/09/24/162257
Windows / Docker Desktop でのトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/12/11/115814