エンジニアのくせに、2025年だよ?なんて冷たいこと言わないでくださいね。。
はじめに
先日、時間が空いたのでAIに問うてみた。
Reactって流行っているけど、特徴は何なの??
その流れでインフラの話になり、Kubernetesの話が出てきた。
なんとなく「仮想化でしょ?」って知識しかなかった。
だって、ガリガリ開発してたのは仮想化出始め、VMが使えるかなーって頃。
AIと話しているうちに、VMとDockerの違いがわかってきた。
想定読者
- 「仮想化;VMでもDockerでも」をあまり自分で扱ってない
- 全盛期に仮想化なんてなかったよーってシニアエンジニア
- インフラと開発は関連がないと思っているそこのあなた
- 先進的でなく、中途半端なメーカー縛りの多い「中、中の上」くらいの企業で開発されているみなさま
に向けて。そして
Dockerのロゴはなぜ船のコンテナのように縦に積まれているのか?
ということに疑問を抱いている方、答えられない方はぜひ読んでみてください。
お願い
- IT業界に入った頃にはAWSやら仮想化があったエンジニアのみなさま、優しい目で見てやってください
なぜ「コンテナ」と呼ぶのか、Dockerのロゴはなぜ縦に積まれているのか
(docker.comより引用 https://www.docker.com/ja-jp/ )
公式ページでも仮想マシンとは言ってないんですよね。
ページを見ていると
- 開発環境
- 実行環境
という表現。
なのでVMから想像する仮想化とは違うんだなと気付く。
要はロゴが物語っていた
これですね、Dockerのロゴ。鯨にコンテナが積まれているやつ。
Dockerはコンテナなので自走しない
というのが僕の解釈。
コンテナは船に乗っけて運ぶためのもの。自走しないので、インフラ部分はホストOSに依存している。
VMのようにゲストOSの独立性は保たれない、コンテナはホストOSに依存する。
コンテナなので縦積みされている
個人的にはここが一番のキモであり、AWS等の活用の意味が深まったところ。
- 開発環境に使う
- 疎結合を実現する
これがAIに「Reactとは?」聞いた流れで繋がった点
WebシステムをReact、Pythonを使って開発すると
- React:フロントエンド
- Python:バックエンド
- MySql:データベース
を、それぞれのコンテナにし縦積みにして環境を作る。
疎結合なので、Pythonのバージョンアップをするにはバックエンドコンテナだけを新バージョンで作って動作確認すれば良い。
発端はMVCモデルの現在地
JavaでWeb開発全盛の頃はMVCモデルが常識というか、前提だった。
- Reactの話を聞いている中で、C:Controlって誰がしてるん?
- そもそもTomcatのようなミドルウェアって不要??
という疑問が生まれてきた。
AIに聞いたら
Reactがフロントの場合、バックエンドはPythonで作ってAPIインターフェースで繋げることが多いです
という驚きの発言。
APIインターフェースって別システム繋ぐ時に使うやつじゃないん?(前時代発想)
それだけ疎結合な環境になっているし、APIを作れる状況にあるということはインターフェースを増やせばビックデータにも使いやすい。
話をDockerに戻して
そういえば開発しててセキュリティパッチ当てるにもいきなり全環境を繋げた状態のものに当てるから、何かあった時にどこに問題があるかの切り分けで苦労したな。
なるほどね、プロセスごとにコンテナ(Docker)を使っていればコピって作ることも、差し替えて動作確認することも、なんなら違うものを当てても前後関係のインターフェースだけ合わせてれば動作確認できるのね。
ようやく理解できた、便利さも。
お付き合いくださり有難うございます。