🔖

ざっくり理解するシリーズ「Docker」

2022/04/07に公開

ざっくり理解するシリーズ、始めます。

これは「流行ってるらしいけどどんなものか分からない、調べたいけど何から調べれば良いか分からない」人向けに、技術を「ざっくりと」説明します。
「ざっくり」なので、その技術の深い所までは追求しません。そこは各自調べてもらう想定です。
しかし、全体像をざっくりとでもいいので理解していないと「まず何から調べていいのか分からない」という事になりますので、それを補えるようなものを作りたい。という事で始めます。

Dockerとは?

コンテナプラットフォームの名前です。Docker社が開発しています。
アプリケーション本体とアプリケーションが動く環境を1つの「コンテナ」という入れ物に入れて稼働させます。このコンテナの事を「Dockerコンテナ」、Dockerコンテナが動く為にOS上で動いているのが「Dockerエンジン」です。ちなみに「Dockerコンテナ」は「Dockerイメージ」から生成されます。イメージを元にコンテナを生成する感じです。
コンテナを使う事でアプリケーションとOSを限りなく隔離する事ができます。元々コンテナ技術は昔からあったのですが色々使いづらいという問題がありました。そこでコンテナの実行、イメージの作成や配布といったコンテナに関するプロセスをひとまとめにしたのが「Docker」です。

なんでDockerを使うの?

「Dockerエンジン」が動いている環境であれば、それが自分のラップトップだろうがデータセンターのサーバーだろうが、クラウドサービスだろうがどこでも動くようになります。理論上、自分のラップトップできちんと動いている事が確認できれば、サーバーでも問題なく動きます。これが先程述べた「アプリケーションとOSの隔離」です。

これは実世界の「コンテナ」を思い浮かべると分かりやすいです。トラックとか貨物列車とかで運ばれたり、船に山のように積まれているあの「コンテナ」です。
実世界では物を運搬する時に使われますが、「コンテナ」に入れれば、運搬手段がトラックでも貨物列車でも船でも運ぶ事ができるようになります。
中身が食品だろうがトイレットペーパーだろうがグランドピアノだろうが、きちんとコンテナに入れてあげれば運搬手段に依存しないというわけです。また運搬する側も「コンテナ」がちゃんと運べれば良いので、中身が異なっていたとしても同じ運搬手段でまとめて運ぶ事ができます。
なので実世界のコンテナは大きさなどがISO規格で標準化されています。

アプリケーションにも同じ事が言えます。多くのアプリケーションはアプリケーション本体だけでは動かず、動く為の環境構築が必要です。例えば特定のライブラリが必要だとか。これらをひとまとめに「コンテナ」に入れる事で色んなところで動かす事ができ、異なるアプリケーションも同じ環境で動かす事ができます。
よくあるのが、Aのアプリはこのライブラリのバージョン1以上じゃないといけないが、Bというアプリを動かすには1だと上手く動かないといった問題です。こういう場合でもそれぞれ動くライブラリを「コンテナ」に含めておけば解決です。

最近流行ってますね

これはクラウドサービスが一般的に使われるようになってきた事が背景としてあるかもしれません。
Dockerを使う事で、アプリケーションをどこでも動かせるようになったので、あとは動くサーバーさえ用意できれば瞬時にスケールアウトできます。
クラウドサービスはボタンポチポチで簡単にサーバーを増やしたり減らしたりできます。なのでアプリケーションをコンテナで動くようにしておけば、アクセスが集中する時はサーバーを増やして、終わったら減らすみたいな事が簡単にできるようになります。仮想マシンと異なり、ホストOSの一部機能を使ってコンテナが動くので起動時間がとても早いので、こういったスケールアウトもすぐ実施できます。

他にもこんな使い道が

ネットで公開されているライブラリを検証で使いたい時にもDockerは便利です。
コンテナの中で環境構築して検証し、終わったらコンテナを破棄すれば開発環境に影響を与える事なく検証を行う事ができます。検証の為にインストールしたものが原因で自身の開発環境が壊れるのは避けたいですからね。

Discussion