■ はじめに
なんとなーくやっていて、いまいち自分の身になっていなかった 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 ~ Docker 環境をクリーンにする ~
https://dk521123.hatenablog.com/entry/2024/07/25/230911
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