私がDockerに魅せられた理由

Docker公式ロゴ1a
©2023 Docker Inc. All rights reserved

 Linuxを触り始めたころの私は、パソコン1台にLinuxを入れて、そのLinux内に直接ソフトウエアをインストールしていました。

 でも1つのLinuxに色んなソフトウエアをインストールしていたので、長く使い続けていくうちに前提条件やら依存関係やらのしがらみと格闘するが面倒になります。

 そのしがらみをなんとかするというのも技術を磨くためになると信じて、Linuxと格闘してました。

Dockerとの出会い

 そんな中で出会ったのがvmware。

 当時はたしかworkstationが無料提供されていた頃だったと思いますが、パソコンのハードディスクをパンパンにしながら、色んなパターンの仮想マシンを構築して試しまくってました。

 パソコン1台1OSの頃よりは格段にメンテナンスの面倒さは減ったのですが、1仮想マシン当たりのディクス容量はかなりの量で、あと、パソコンの物理メモリの制限も重なり、不満は溜まりまくりでした。

 そんな時、ネットでふっと見かけた「Docker」というキーワード。

 Dockerとは、コンテナ型の仮想化技術の1つです。

 他の仮想化技術としてはVMWareやVirtualBoxなどのハードウエア型の仮想化技術もありますが、Dockerはそれらとは異なる技術を利用しています。

 ちょっと気になったので、Dockerについて色々調べてみました。

 カーネルは共有して、それ以外は各環境単位に持つことで仮想環境を実現?!

> そんな中途半端な仮想もどきで物理サーバレベルの品質が出せるんでしょうか

 ストレージもネットワークも各仮想環境単位に自由に構築可能?!

> OS上で仮想っぽくプロセスを起動して、それにストレージとネットワークをそれっぽく見せてとかでは?

 各仮想環境は、リモートからイメージファイルをダウンロードして起動?!

> む?仮想ごとにイメージファイルがあるんだ・・・。

 仮想環境内でシェルを起動しオペレーション可能。そこは通常のOS環境そのもの?!

> ほほお?ちょっと試してみるかな・・・。

 大手ベンダgoogleが商用サービスを行っている?!

> !!

  コンテナという概念は仕事がら聞いたことがある程度でしたが、Dockerというのは全く知らず、調べれば調べるほどどんどん深みにはまってしまい、気づけば休日はほぼDockerと戯れている状態になってしまいました。

 まさかコンテナがそんなことになっているとは。

 やはり食わず嫌いというのはいけませんね。

Dockerの好きなところ

 Dockerの何が良いのでしょうか。

 私的には主なものとして3点ほどあります。

1つ1つの仮想環境がとても軽い

 これまでのホスト型やハーパーバイザ型の仮想環境では、各環境ごとにカーネルを持つため、ホストマシン上のメモリやらストレージやらのオーバーヘッドがかなり大きいです。

 こればっかりはどうしようもないことだと思ってました。

 Dockerはカーネルを仮想環境間で共有するため、そのオーバーヘッドがとても小さいのです。

 このお陰で、仮想環境が数多く作れますし、起動/停止も驚くほど速くなります。

リードオンリーなイメージを使用して仮想環境を起動

 Dockerのイメージファイルを入手して、起動するだけで仮想環境が利用可能となりますが、その中でどんなに中身をいじり倒しても、仮想環境を再起動すると、最初の状態に戻ります。

 もちろん、仮想環境内部のファイルを更新することは可能なのですが、その更新情報は、イメージの差分情報として別管理されているわけです。

 再起動すると、別管理されていた更新情報がさっぱりと破棄されるため、最初の状態に戻るということになります。

 とはいっても、更新した情報を取っておきたいということは絶対にあると思います。

 当然、更新情報を管理する方法は色々用意されています。

仮想環境の中身をコード化できる

 本記事の上の方で、リモートからイメージファイルをダウンロードして起動、と書きました。

 でも、他人が作成したイメージを使うばっかりじゃつまらない、自分でイメージを作りたい、カスタマイズしたい、と思うことは当然だと思います。

 Dockerを使って何かのサービス環境を作る場合、1つの例として、まずLinuxの最小インストール状態のイメージを入手します。

 これは各ディストリビューションのベンダが無償提供しています。

 次に、このイメージ上にサービスを構築していくわけですが、その際様々なコマンドを使用します。

 仮想環境の中身をコード化するというのは、この作業(イメージを入手してから各種コマンドを駆使してサービスを構築する)をテキストファイルに記述することを指します。

 このテキストファイルをDockerに読み込ませることで、いつでも同じ環境を短時間で構築することが可能となるわけです。

 これら以外にも、Dockerってすごい、という点がまだまだあると思うのですが、またの機会とさせていただきます。

まとめ

 私がDockerに魅せられた理由を書かせていただきました。

 先入観だけで実際に試していなかったら、今のスキルは身についていなかったでしょう。

 もしDockerが少しでも気になってらっしゃるのでしたら、まずは試されることを強くおすすめします。

 本サイトの記事でそのお手伝いができれば幸いです。

 最後までお読みいただきありがとうございました。

コメント