コンテナと言えば、Dockerをイメージする人が多いと思いますが、Dockerはコンテナを実行環境です。コンテナを実行する為の環境のことを、コンテナランタイムとも言います。では、さっそくコンテナのメリットについてご紹介していきます。

コンテナ(今回はDockerです)のメリット

Dockerコンテナは、Dockerイメージを実行する為の環境(プロセス)です。Dockerイメージを元にリソースが許す限りいくつでもDockerイメージをもとにしたコンテナを起動することができます。つまり、一度、ビルドしたDockerイメージは、どのような環境でもビルドしたDockerイメージを起動してやれば、まったく同じ環境をつくることができるということです。

これは、Dockerが「Build once, run anywhere」というスローガンが確実に実行されていることを示しています。

因みに、サン・マイクロシステムズが掲げたJavaのスローガンは、WORA(Write once, run anywhere)でした。多くの企業で、運用の中で発生するバージョンの差異によって多くの構成ドリフトが発生し、運用担当者の悩みのタネになっていますが、このようなスローガン・コンセプトを持って活動されている技術団体がありますので、上手に活用していきたいものです。

軽量かつ高速起動

Dockerコンテナは、軽量かつ高速起動なところがメリットだとよく言われています。これは、その通りで、通常のOSが起動する際にBIOS、ブートローダ、ブートプログラムなど様々なプログラムの読み込みが発生しますが、コンテナの起動時にはそのような起動プロセスはありませんので、起動時間が短くなるということです。

余談ですが、BIOS Boot Input Output Systemの略語なのですが、なんだか久々に言葉にしたような気がしました。

話をコンテナに戻すのですが、コンテナの設計時のセオリーとして、「1コンテナ 1プロセス」というものがあります。ひとつのOSにいくつものソフトウエアをインストールして使う従来のベアメタルサーバーやvmwareなどの仮想OSとは異なる思想をもった設計を心掛けることが推奨されています。「1コンテナ 1プロセス」であることは、つまり軽量であることにつながりますので、コンテナを設計する際には、必ずこの設計思想を忘れずに設計するようにしてください。

コンテナはバージョン管理ができるので必ずバージョン管理を行う。

コンテナはバージョン管理ができるので必ずバージョン管理を行う。とタイトルに書いたのですが、コンテナで管理って何やねん!と思う方もいらっしゃるかと思うますので補足します。

コンテナ=イメージであるということは前述した通りなのです。イメージとして保存しておけるということは、日常の運用メンテナンスの中で必ず発生するバグ修正やセキュリティアップデート等のコンテナに手を加える際に、従来のコンテナイメージはそのままに新しいコンテナイメージをつくり、その新しいコンテナイメージ上でバグの修正やセキュリティアップデートを実施していくようにします。

Immutable Infrastructure : イミュータブルインフラストラクチャ

従来のコンテナが仮にVersion1.00 だとすると、今回新たにセキュリティアップデートを実施したコンテナは、Version1.1としたバージョンを付与しておきます。手を加えるときには必ず新しい環境を用意し、新しい環境で動作のテストを実施するようにします。このような運用メンテンスの手法をImmutable Infrastructure、Immutable Infrastructureなイメージにする などと言ったりしています。

まだまだ書き足りないのですが、今回も長くなってしまいましたので回を分けて、コンテナの復習を兼ねた基本のご紹介を行ってゆきたいと思います。

お疲れ様でした。