コンテナを活用した快適開発・本番環境

作成日:2022/07/07

お役立ちコラム

コンテナを活用した快適開発・本番環境

前回は DevOps の中心となる Git についてご説明しました。
ソースコードなどをバージョン管理してくれる Git は、現在の開発にとって無くてはならない存在になりつつあります。
今回は DevOps を考える上で重要となる新しい技術「 コンテナ 」について説明します。

仮想化による柔軟性の獲得

コンテナ自身の説明に入る前に、仮想化が果たした役割について理解しておく必要があります。
現在では「 仮想化 」というとネットワークやストレージなどさまざまな分野において活用されている技術は、主に物理マシンの制約を解放した「 仮想マシン 」を意図しています。

仮想化以前のシステムの硬直性

仮想化が一般化する前は、システムに必要となるサーバーは1台1台にOSをインストールし、必要なミドルウエアやアプリケーションをインストールして、設定していました。
典型的なWebアプリケーションであれば、フロントエンドのWebアプリケーションサーバーと、バックエンドのデータベースサーバーを別々の物理マシンとすることもありました。
このように1つの役割を1つの物理サーバーとするのは、物理サーバーがあまり柔軟に扱うことができず、メンテナンスなどの観点から別々にしておいた方が良いという経験則によるものでした。
必然的に物理サーバーの台数が増えて、設置場所が増えてしまい、かえって管理性が低くなるという問題を抱えていました。

仮想化

仮想化によって、物理サーバーが抱えている硬直性の課題がかなり解決されました。
特に仮想マシンは作成も削除も簡単に行えますので、OSのインストールからのやり直しがしやすい、コピーすることによって同じ設定の仮想マシンをたくさん作れる、バックアップがしやすいなどのメリットがあることで、現在では仮想マシンを使ってシステムを構築するのが当たり前になりつつあります。
ただし、仮想マシンは柔軟ですが、OSからミドルウエア、アプリケーションまですべてが必要となりますので、起動に時間がかかり、多くのメモリを消費するなどの課題がありました。

コンテナ

コンテナは、共通のカーネル上で動作するプロセスが、それぞれ独立したシステムのように扱うことができる、仮想化の一種といえます。
コンテナの性質は、メリットの観点から理解するとよいでしょう。

  • カーネルの起動から始まるシステムのブートプロセスが不要なので起動が早い
  • それぞれのコンテナは独立したシステムのように扱える
  • 単一のシステムイメージから複数のコンテナを起動できる

コンテナは起動が早い

コンテナの実体は、単なるプロセスです。
そのため、普通にプロセスを起動するのとほぼ同等の速度でコンテナを起動できます。
開発プロセスの中で、開発したアプリケーションをまっさらな環境の上で実行、テストしたいような時に待ち時間が少ないので、コンテナは開発環境に適しています。

コンテナは独立したシステムとして扱える

コンテナは単なるプロセスですが、独立したシステムとして振る舞います。
すなわち、以下のような特徴があります。

  • メモリ空間が独立していて、別々のプロセスを持つ
  • ファイルシステムが独立していて、別々のファイルツリーを持つ
  • ネットワークが独立していて、別々のIPアドレスを持つ

コンテナはそれぞれ独立したプロセス空間、ファイルシステムを持つ構造をしています。

Linux 上で動作する Docker コンテナは、内部で別々にネットワークに接続されており、別々のIPアドレスを持ちます。

これらの特徴から、各コンテナはそれぞれ別々の設定でプロセスを動作させることができます。
例えばWebアプリケーションサーバーの場合、それぞれ別の設定、別のアプリケーションを動作させることができます。
このような特徴からコンテナは、たくさんのWebアプリケーションサーバーを動作させる必要がある、マイクロサービスアーキテクチャのような構成の環境に適してます。
そのため多くのケースで活用されています。

物理マシン、仮想マシン、コンテナの比較をしますと、それぞれ一長一短があり、適材適所で使う必要があります。

コンテナを使うためのツールのご紹介

コンテナを実際に動かして使うために、さまざまなツールが用意されています。
ここでは代表的なものをご紹介します。

Docker Desktop

コンテナの代表格である Docker をデスクトップ環境で使うことができるツールです。
GUIツールがあるため、コンテナの動作状況などを把握することも容易です。
Windows や macOS、Linux でも動作します。
Windows は WSL2 (Windows Subsystem for Linux 2) を使って動作します。
macOS は Intel アーキテクチャだけでなく、Apple Silicon でも動作します。
このように、かなり幅広い環境で Docker コンテナを動作させることができますので、特に開発環境としてコンテナを使いたい場合に有効なツールといえます。

Docker Desktop のGUI画面。
コンテナの状態確認や実行、停止など基本的な操作が行えます。

Kubernetes (K8s)

Kubernetes は、たくさんのコンテナを動作させるための「 オーケストレーションツール 」と呼ばれる種類の管理ツールです。
名称が長いので「 K8s 」と略されます。
前述したように、コンテナを活用するシステムではたくさんのコンテナを動かすため、K8s のような管理ツールが必要となります。
K8s の特徴は「 状態宣言型 」と呼ばれる動作方式で、例えば「 コンテナを3つ動かす 」と宣言しますと、現在のコンテナの数からコンテナを起動して増やしたり、逆に多い場合には停止してコンテナを減らしたり、コンテナの数を宣言の通り3つに調整してくれます。
これらの挙動は自動的に行われますので、例えば障害が発生してコンテナの数が減ってしまっても、自動的にコンテナを再起動して正常時の状態に戻そうとします。
コンテナの数が非常に多い場合、管理の手間を大幅に削減してくれる仕組みといえます。

Kubernetes の公式Webサイト。
ドキュメントや自習用コンテンツなども充実しています。

Kubernetes を活用したコンテナサービス

K8s は Google が自社サービスのコンテナを管理するために開発、オープンソース化したこともあり、事実上の標準となっています。
現在ではさまざまなクラウドサービスで提供されるコンテナサービス (Container as a Service:CaaS) でも K8s が使われています。
代表的なものとしては、Google Cloud の「 GKE (Google Kubernetes Engine) 」や、Amazon Web Services の「 Amazon EKS (Amazon Elastic Kubernetes Service) 」などがあります。

コンテナについてまとめ

コンテナは、システム的にはプロセスとして実行されますが、それらは独立したシステムとして扱うことができるのが技術的な特徴です。
用意したファイルシステムのイメージから簡単にコンテナを起動する事ができますので、開発環境としても、たくさんのWebアプリケーションサーバーを必要とするマイクロサービスアーキテクチャのような構成においても、コンテナは有用なソリューションです。
これからコンテナに取り組まれる場合には、まずは Docker Desktop などを使って、開発環境としてコンテナを活用することをおすすめします。

執筆者

宮原 徹(みやはら とおる)
1972年、神奈川県生まれ。
中央大学 法学部 法律学科卒。日本オラクルでLinux版Oracleのマーケティングに従事後、2001年に株式会社びぎねっとを設立し、Linuxをはじめとするオープンソースの普及活動を積極的に行い、IPA「2008年度 OSS貢献者賞」を受賞。
2006年に日本仮想化技術株式会社を設立し、仮想化技術に関する情報発信とコンサルティングを行っている。
現在は主にエンタープライズ分野における DevOps について調査・研究を行っており、成果はブログや勉強会などでも発信している。

PCワークステーションレンタルのご紹介

レンタルなら本導入前の検証用、社内研修、イベント利用など短期間からOAPCなどの長期間までさまざまな用途でご利用いただけます。
安心の保守サポート付き、機器の不具合時には最短で翌営業日にご指定場所まで代替機をお届けいたします。
動産総合保険も適用され、安心です。

ご意見・ご感想をお聞かせください

お気軽にお問い合わせください

ページの先頭に戻る