Docker、今では当たり前の技術で、エンジニアであれば普通に使っていると思います。
もちろん私も使ってきたのですが、
「なんとなく」という雰囲気で使ってきたんです。
それでも特に困ったことはなかったのですが、基礎をしっかり固めたい!という思いで、
Dockerについてもちゃんと勉強することにしました。
「今までDockerを使ってきたけど、ちゃんと理解してないなー」というエンジニアの方には、
結構わかりやすく書けてると思います!
最近「基礎固め」のために記事を書いているので、
「エンジニアをしてるけど、基礎が弱いかも…」と思っている方には役に立つ記事が多いと思います。
せっかくですし、役に立ったらいいと思うので、参考にしてみてくださいねー!
Dockerの仕組み
Linuxがないと動かない
まず、Dockerというのは、Linuxがないと動きません。
Linuxありきのものなのです。
意識したことはないかもしれません、私は意識していませんでした。
(それだけ便利なものだということか)
Linux OSが積まれたマシーンに、Dockerを入れることで、Dockerはちゃんと動く。
Dockerがちゃんと動くから、Docker上にコンテナを作成していけるというわけ。
イメージはこんな感じ。
コンテナの中にもLinuxの一部が入っている
なんなら、コンテナの中にも、実はLinuxの一部が入っています。
コンテナを作ったばかりで空っぽだと思っていても、実は勝手にLinuxの一部が入れられています。
そうでないと、そのコンテナを動かせないからです。
どういうことかというと…
LinuxつまりOSの役割として、プログラムの内容をハードウェアに伝えることがあります。
通常は、プログラム → OSのカーネル周辺 → OSのカーネル → ハードウェア の順番で、
「次はこれしてー」と指示が伝えられます。
コンテナというのは、独立した環境で、それぞれのコンテナ内にプログラムが入っているので、
それぞれのコンテナ内に、OSを入れておけば、指示をハードウェアに伝えることができます。
ただ、OSの核を成すカーネルは、核が故に結構重たいものなので、
コンテナごとにカーネルを置いておくと、かなり重たくなってしまい、1つのPCで複数のコンテナを立てるなんて、とてもじゃないですが厳しいのです。
そこで、OSのうち、カーネル周辺の部分だけコンテナに置いておき、
プログラム → コンテナ内のカーネル周辺 → カーネル → ハードウェア という順番で、指示を伝え、
かつ、軽量化を実現しているというわけです。
文章が長くなってしまいました。
イメージはこんな感じ。
WindowsやMacでなぜ動くのか
いやいや、私のPCはMacだけど、開発にDockerを使ってるよ。
そもそもMacだからOSはMac OSだし、Linuxなんて入れた覚えないよ。
おっしゃる通りでございます。
DockerはLinuxが必要なのはわかったけど、
エンジニアが開発で使っているWindowsやMacで、なぜDockerが動かせるのか。
…環境構築の中で、Desktop for Mac、Desktop for Windowsを、PCにインストールしませんでしたか??
それです!
そのおかげです!
Desktop for Macをインストールすることで、
Dockerを動かすのに必要なLinuxのパッケージを、Macに無理やり入れているのです。
そうすることで、MacにLinuxが一部入り、そのLinuxを使って、Dockerを動かしているのです。
終わりに
思ったより記事が長くなってしまいました。
「コンテナとは何か」というような続編を別記事でだしますー。
こういう基礎がから理解することで、環境構築で何しているのかもちゃんと理解していきたいですね。
そうしたら、環境構築で詰まっても、自分で解消しやすくなると思います。
環境構築で詰まって時間を消費して困る自分にさよならしましょ!