この記事は デジタル創作サークル UniProject Advent Calendar 2025 2 日目の記事です。
サークルのみんなの中にはコンテナ使うメリットわからんという人がいたのでコンテナのユースケースを紹介しつつ、マイクロサービスアーキテクチャについて紹介します。
(初心者向けなので少々雑な説明や厳密には違う、ものによっては違うだろみたいな表現もあるかもしれません。多めに見てください。)
コンテナとは
まず、コンテナとは、あるアプリケーションを実行するための環境をパックしたものと捉えていただければ良いでしょう。
例えば、MediaWiki のコンテナであれば、それ一つで MediaWiki が起動しますし、Bot のコンテナであれば、それ一つで Bot が起動します。
そのアプリケーションを動かすのに必要な依存関係や OS まるごとパックしたものだと捉えてくれれば問題ないでしょう。
VM とは違うの?
VM(Virtual Machine)とは、以下の点が異なります。
VM はホスト OS 上にゲスト OS をカーネルを含めて構築しますが、コンテナはホスト OS の Linux カーネルを共有します。
これがとても大きな違いです。
コンテナは Linux カーネルを共有している分、容量を含めメモリ、CPU 使用率の観点でも軽いのです。
また、VM はOS ごとに立てるのに対し、コンテナは基本的にアプリケーションごとに立てるという部分でも違いがあります。
VM は OS ごとにたてて、それを実際のマシンのように扱います(仮装マシンなので当たり前ですね)。
しかし、コンテナは、冒頭でも説明したようにあるアプリケーションを実行するための環境をパックしたものなので、それ一つでアプリケーションが立ち上がります。それこそ冒頭で例として挙げた、MediaWiki、Bot のコンテナというのは、OS として立ち上がっているのではなくアプリケーションとして立ち上がっていることがわかりますね。
ユースケース 1: サンドボックス
ここからは、コンテナのユースケースについてみていきましょう。
コンテナはしばしばサンドボックス的な使われ方をします。
検証環境として VM を立てるよりも軽量なコンテナを立ててそこで検証することにより、効率的に検証することができます。
VS Code には開発コンテナの機能があるので、コンテナの中に入って、あたかも実際のサーバーの中で操作しているかのような開発体験を得ることもできます。
ユースケース 2: 本番環境としてのコンテナ 〜マイクロサービスアーキテクチャ〜
本番環境としてコンテナを使うケースもあります。
今回はマイクロサービスアーキテクチャという考え方について紹介します。
マイクロサービスというのは、一つの大きなアプリケーションを、機能ごとに小さく独立した複数のサービスに分割して開発する手法です。
細分化するメリットとしては、以下のようなことが挙げられます。
- 責任分界点が明確になる
- 障害が起こった時に特定がしやすい
この分割した複数のサービスをどう動かすか、ここで登場するのがコンテナです。
それらのサービスを全てコンテナとして起動してコンテナネットワークというコンテナ同士でのみ通信できるネットワークを介して通信するのです。
そうすることで、**外部から干渉されない隠れた部分で処理することができる1**ので、セキュリティを向上させたりすることもできます。
UniProject では
本番環境に Kubernetes というものを使用しています。
これは、コンテナ技術である Docker にスケーラブルかつ HA (High Availability, 高可用性)という特性を持たせたものです。
これに関しては、またいつか説明します。
最後に
今回はコンテナをなぜ使うのか、ユースケースとその特性の観点から説明しました。
宣伝
先にもあるように、当サークルでは、積極的にコンテナ技術を採用しています。
これを読んで「さらに学んでみたい」、「K8s も気になる!」という方、当サークルに参加してみませんか?
当サークルは初心者から上級者まで老若男女誰でも参加できるサークルです。
まずは Discord サーバーへ参加してみてください!
みなさんの参加をお待ちしております!
⭐︎ 公式サイト ↓
⭐︎ Discord サーバー ↓
-
ちゃんと対策しないと頑張れば破られるなどの細かいことはここでは割愛します。 ↩