同じアプリを環境差なく動かすコンテナ

コンテナは、アプリと必要な設定をひとまとめにして、どこでも同じ動かし方を再現しやすくする実行単位です。

料理の材料と手順書を弁当箱にひとまとめにしておけば、どの店舗に持っていっても、同じ流れで温めて出せます。厨房を丸ごと引っ越すより、ずっと身軽です。コンテナは、アプリと、それを動かすのに必要な設定や部品を、この弁当箱のようにまとめて持ち運べる形にしたものです。土台の OS の上で、箱ごとに分けて動かします。

「手元では動くのに」を減らす

開発者のパソコンでは動いたのに、本番のサーバーでは動かない。よくある原因が、入っている部品や設定の食い違いです。コンテナなら、アプリと周りの部品を一緒に箱に詰めて運ぶので、開発環境と本番環境の差を小さくできます。

この性質が生きるのは、次のような場面です。

  • 開発、検証、本番で、同じ動かし方をそろえたい
  • CI/CD で、自動テストから公開まで同じ箱を使い回したい
  • 1台のサーバーに、複数のアプリを分けて載せたい
  • 小さな単位で、デプロイや差し替えをしたい

1台の機材を丸ごと別々の環境に分ける仮想化と比べると、コンテナはもっと軽い単位でアプリの実行環境を分ける方法です。2つの違いはコンテナと仮想マシンの違いで詳しく比べています。

箱の中に置いてはいけないもの

コンテナは、古い箱を捨てて新しい箱に入れ替える使い方が前提です。ログや保存データを箱の中だけに置いていると、入れ替えたときに一緒に消えてしまいます。残したいデータは、箱の外に置き場所を用意します。

箱の中身も放っておけません。詰めた部品の更新を止めたまま箱を複製し続けると、弱点(脆弱性)を抱えた箱がそのまま増えていきます。箱に何を詰めるか(イメージ)を大きくしすぎると、起動や配布も重くなります。

どこと通信してよいか、どんな権限で動くか、資源をどこまで使ってよいか。これを決めないまま動かすと、箱は動いていても運用は不安定になります。コンテナは便利な梱包の方法であって、中身の設定や管理が甘ければ、問題ごと持ち運んでしまいます。