これは何?
長い間Docker
の名前は聞き及んでいたものの、公式ドキュメントの難解さからなかなか手が出せずい、今回重い腰を上げてその習得に勤しんだんですね。
そういうわけで、本稿は、私がDocker
に対して抱いていた誤解を含めその勉強をメモしたものです。間違っている可能性は悪しからず、むしろ指摘してくれたらうれしいです。
そもそも仮想化技術とは
仮想化とは、一般的に物理的なコンピュータリソースを抽象化し、複数の独立した環境を作り出す技術のことを指します。
『図解まるわかり仮想化の仕組み』翔泳社、2024年 p16。
とにかく目の前にあるコンピュータをソフトウェアの力でさも複数のコンピュータがあるように見せかける技術、と理解して始めました。割とこの理解で何とかなります。
仮想化技術の何がうれしいかといえば、
- 実行環境を独立させてお互いの干渉を抑えたり、
- 複数のハードをソフトのレベルで一つのハードのように見せかけることができたり
- 持っていないOSを差もそこにあるかのように模倣できたり
してとにかく管理が楽になり、限りあるリソースを効率よく割くことができるようになったりすることです。
サーバー仮想化の種類、Dockerとは何者?
仮想化を使ってできることは幅広いので、とりあえず「どうサーバーを仮想化するの?」という方法論の観点から分類してやると、主に次の三種類に分かれます。
- Host型
- Hypervisor型
- Container型
上二つについては省略して、ここで取り上げるのがContainer型仮想化です。Container型は、アプリの実行環境や依存関係を詰め込んだ「小さなコンピュータ」である"Container"を作り上げる仮想化技術です。
さて、DockerはこのContainerを管理するアプリです。何ができるかといえば、先ほど述べた「もろもろを詰め込んだContainer」を作るということに加え、これを配布、実行までしてくれます。すごい(感嘆)
Dockerの強み
いろいろ言いましたが、その上Dockerならではの強みがさらにあります。
その強みとは、可搬性と収縮性です。
まず可搬性(いろいろな環境で使える)についてです。DockerではどのようにContainerを生成するかといえば、それはDockerfileというファイルにどのような環境を作るかをテキストとして記述し、これをDockerに食わせることで実現します。
これが革新的で、実際このDockerfileさえ共有してしまえば、いつでもどこで環境を再現、実行できるわけですね。これが可搬性です。
次に収縮性(設定の調整のしやすさ)についてです。DockerではそのContainerを管理するための機能がいくらか用意されており、例を挙げればネットワーク通信の統制、ストレージの手配、セキュリティの保障などがあります。これらの機能により利用者は仮想的なContainerという抽象的で扱いずらい存在を簡単に扱うことができるようになり、各種の設定、調整などが手軽になります。これが収縮性です。
仕組み
Container仮想化の仕組みです。
TODO
で、実際どうやるのさ
ここまで書いといてなんですが実際の使い方なんかは有用な記事がごろごろ転がってるのでそちらに任せた方がいいかな…
これあれじゃん、この記事いらないね
まあ書いてるうちに理解してくることもあるから....