クラウド時代のLinux活用:コンテナ技術(Docker)入門と実践
クラウドとLinuxとコンテナ技術の関係
クラウド上でLinuxを動かすことは、今やインフラ構築の標準的なアプローチとなっています。AWSのEC2、Google CloudのCompute Engine、AzureのVirtual Machinesなど、主要なクラウドサービスの多くはLinuxをゲストOSとして稼働させています。そしてこのクラウド環境をさらに効率的・モダンに活用する技術がコンテナです。
コンテナの代表格であるDockerは、LinuxのKernel namespaceとcgroupsという機能を活用してアプリケーションを隔離された実行環境で動かします。仮想マシンのようにゲストOSをまるごと起動するのではなく、ホストOSのカーネルを共有しながら軽量なプロセス分離を実現します。詳細な仕様はDocker公式ドキュメントの「Dockerの概要」ページで確認できます。
「動く環境ごと届ける」という発想の転換
従来のサーバー構築では、「このサーバーにApacheをインストールして、PHPバージョン8.2を入れて、このライブラリを追加して…」という手順書をもとに環境を再現していました。しかしOSのバージョン差異や依存ライブラリの競合により、「自分の環境では動くのに別の環境で動かない」問題が起こりがちです。
Dockerが解決するのはまさにこの問題です。アプリケーションを動かすために必要なすべてをDockerfileという設定ファイルに記述し、そこからDockerイメージをビルドすることで、どの環境でも全く同じ構成のコンテナを起動できます。LinuxのファイルパーミッションやネットワークのTCP/IPの概念など、基礎的な知識があると、Dockerfileの各命令が何をしているかをより深く理解できます。
DockerfileとFlaskアプリのコンテナ化
実践例として、PythonのFlaskで作ったWebアプリをDockerでコンテナ化してみます。まずアプリケーションコード(app.py)を用意します。
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, from Docker Container!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
次に、このアプリを動かす環境を定義するDockerfileを同じディレクトリに作成します。
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install Flask
CMD ["python", "app.py"]
ビルドと起動は以下の2コマンドだけです。
docker build -t my-flask-app .
docker run -p 5000:5000 my-flask-app
http://localhost:5000にアクセスすればアプリが動作しています。Linuxのポートフォワーディングの知識があれば、-p 5000:5000がホストの5000番ポートをコンテナの5000番ポートにマッピングしているという意味もすぐに理解できます。
次のステップ:Docker ComposeとKubernetes
複数のコンテナ(Webサーバー+DBなど)を連携させる場合はDocker Composeが便利です。docker-compose.ymlにすべてのサービスを定義し、docker compose up -dで一括起動できます。
さらに本番環境での大規模なコンテナ管理にはKubernetesが活用されています。KubernetesはコンテナのスケーリングやロールアウトをYAML形式のマニフェストで宣言的に管理します。Kubernetesの学習を始めるならKubernetes公式チュートリアルが体系的に整理されています。クラウド・コンテナ技術の土台には常にLinuxがあり、LinuxのネットワークやプロセスI/Oの知識が応用技術の理解を助けます。