Dockerをさわりでとらえてみる
環境構築ってめんどくさいですよね?
今回、上記の理由からdockerに関しての備忘録として残しました。
今回は以下を対象に書いていますのでご確認ください。
・dockerの概要のみを書き出します
・用語や関係性について書き出します
・詳細のコマンドや実際にコンテナを作成したりはしません
Dockerとは
dockerとは簡単に説明すると環境構築をパッケージ化して管理・配布などをできるようにするアプリケーションです
良く比較として出てくるのは仮想PCですが、dockerは仮想コンテナと呼ばれておりゲストOSを持たないのが特徴です。
仮想PCとdockerコンテナの比較について
項目 | 仮想PC(Virtual Machine) | Docker コンテナ |
---|---|---|
アーキテクチャ | 各VMに独立したOSを持つ仮想ハードウェアを提供 | ホストOSのカーネルを共有する軽量な環境 |
構成要素 | ハイパーバイザー、ゲストOS、アプリケーション | Dockerエンジン、コンテナ、アプリケーション |
リソース使用 | 高い (OSごとにメモリやストレージを割り当て) | 低い (ホストのリソースを効率的に共有) |
起動速度 | 遅い (OSのブート時間が必要) | 速い (ホストOSのカーネルを利用し即時起動) |
独立性 | 高い (各VMは独自のOSを持ち、完全に独立) | 中程度 (カーネルを共有するが、アプリごとに隔離) |
適用例 | マルチOS環境のテスト、独立環境の強い分離が必要な場面 | マイクロサービス、開発/テスト環境の構築 |
オーバーヘッド | 高い (ゲストOSと仮想化による) | 低い (コンテナ技術のみによる) |
可搬性 | ハイパーバイザーに依存 | Dockerエンジンさえあれば、ほぼどこでも同じ動作が可能 |
スケーラビリティ | 制限あり (リソースの大幅な割り当てが必要) | 高い (複数のコンテナを軽量に実行可能) |
・抑える点としては以下で十分かと思います
①ゲストOSを持たないので仮想PCに比べると起動が早い
仮想PCを使用したことある人はご存じでしょう、ゲストOSがあるので立ち上がりが遅いです。
仮想コンテナはゲストOSを持たないので起動が早いです
Q、ではどのようにOSによる操作を行うのか?
↓
➁dockerはdockerエンジンによってホストOSのカーネルを使ってコンテナの操作/管理を行っている
カーネルとはOSに存在する司令塔のようなもので、リソース管理をしてくれてます。
この子のおかげでPCは常に効率よく動いています。
Q、windowsOSの人が作成したコンテナ※はMacOSでは使えない?
↓
③ゲストOSに依存しない
➁でお伝えしたようにホストOSのカーネルを使用するので異なるOS間での使用制限がありません。
※厳密にはイメージを配布します
dockerに関する単語
dockerを始めるといろいろな単語が出てきます。
必要な単語をまとめました。(全部ではありません)
実際にコンテナの作成と合わせて確認しましょう。
docker単語一覧
・docker Hub ・docker Registry ・docker Desktop ・docker Daemon ・docker file ・docker image ・docker Container ・docker Composedocker コンテナを管理する(docker Desktop・daemon)
docker Daemonとはdockerの中核プロセス、コンテナの作成、実行、管理を行ものです。
またdocker Daemonに対して簡単に操作できるのがdocekr Deaktopです。
docker コンテナを作成する(docker file・image・container)
コンテナ作成の順序としては
①定義→➁レシピ→③実物
となります。
①使用するアプリ、ミドルウェアの情報を設定します(docker file)
➁上記を確定させたレシピを用意します(docker image)
③レシピから実際に作成されたものです(docker container)
docker コンテナを作成・配布する(docker Registry・Hub)
docker fileで作成したイメージはほかのユーザに共有したり、逆にすでに作成されているイメージを使用することができます。
ここがdockerの一番の魅力かと思います、開発環境構築でテスト環境や本番環境をスムーズに用意することができ、バージョン違いなどによる不備を防止できます。
また配布することで同じチームのメンバ―も即座に環境構築できるのが魅力的です。
イメージを持ってくるだけでできるので、学習用にサクっと開発環境を用意できるのが素晴らしいです!
私が疑問に思ったこと
①imageを挟む理由って何?docker file→docker containerで良くない?
➁docker imageの中に例えばPHPやMySQLなどの情報が入っているの?
①→正解は×
docker fileとはあくまで定義している段階なので、例えば配布時にバージョンがズレてしまうなどのミスが起こりかねません。
docker fileをビルド段階で、作成されたイメージは不変です。
また、コンテナを起動する際は毎回docker image→docker containerの順で実行されます。
➁→コンテナは1つではない(docker compose)
実際のプロジェクトでコンテナを1つといった現場はほぼ無いかと思います。
コンテナが複数あり、それぞれ連携しています。
また1つのイメージには1つのアプリ情報があるので
1個目のコンテナ:php・laravel
2個目のコンテナ:Nginx
3個目のコンテナ:MySQL
上記のようなコンテナをそれぞれ連携させます、複数のコンテナを管理できるのがdocker composeなのです。
docker composeでは「docker-compose.ymlファイル」にそれぞれのアプリ・ミドルウェア情報を記載していきます。
最後に
dockerの概要について触れてみました。
私は先にdockerを触って、コンテナを作って触ってからこれらについて学習しました。
先に触ったので「あ、ここってそういう意味だったんだ」となることが多かったです。
使ってみると便利だと思うので、機会がありましたらご参考ください!