クラウド時代のLinux活用:コンテナ技術(Docker)入門と実践

クラウド時代の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の知識が応用技術の理解を助けます。