前回の連載ではコンテナの基本と、Windowsコンテナ特有の制限や実行モードなどについて説明しました。今回は、コンテナベースのアプリの開発とデプロイの基本的なことを説明します。

ローカル開発環境でのアプリ開発

Dockerベースのコンテナアプリは、ベースOSイメージとミドルウェア(フレームワークなど)、アプリの複数のレイヤーで構築することができ、そのコンテナイメージは仮想マシンと比べて軽量であり、ホストのカーネルを共有するためコンテナの起動も高速という特徴があります。

コンテナを構成するいずれかのレイヤー(例えばOSレイヤー)にバグや脆弱性があった場合でも、OSへのパッチのインストールは不要で、新しいベースOSイメージでアプリを再構築するだけで、すばやく最新状態にできます。

Dockerベースのコンテナアプリのローカル開発環境としては、Docker Desktopが代表的です。

  • Docker Desktop for Windowsによる、Windowsベースのコンテナアプリの開発

    Docker Desktop for Windowsによる、Windowsベースのコンテナアプリの開発

Docker Desktopは、Windows、Linux、macOSのマルチプラットフォームに対応していますが、Windows版のDocker Desktopは、Windows(Hyper-Vが必要)とLinux(Hyper-VまたはWSL2が必要)の両方の種類のコンテナを扱える唯一の存在です。

ただし、WindowsとLinuxの両方のコンテナを同時に扱えるわけではなく、環境を切り替えることで、それぞれのコンテナに対応できます。Windows 10/11 Homeエディションは、WSL2(Windows Subsystem for Linux 2)バックエンドによるLinuxコンテナにのみ対応できます。

  • Windows 10/11 Pro以上のエディションでは、Docker Desktopの開発環境をWindowsコンテナ対応とLinux対応のいずれかに切り替えて使用できる

    Windows 10/11 Pro以上のエディションでは、Docker Desktopの開発環境をWindowsコンテナ対応とLinux対応のいずれかに切り替えて使用できる

ローカルで開発したアプリ(WindowsコンテナまたはLinuxコンテナ)のコンテナイメージは、コンテナ対応のクラウドサービスにデプロイして実行することができます。

コンテナ対応のクラウドサービスの多くは、ステージング環境と運用環境を持ち、バージョン管理機能を提供します。新しいバージョンのコンテナイメージをステージング環境にデプロイしてテストし、その後、運用環境に切り替えることで、継続的に最新バージョンを提供することができます。

Microsoft Azureのコンテナ対応サービスにデプロイ

マイクロソフトの場合、Azure Container RegistryDocker Hubのリポジトリを介して、Microsoft Azureの以下のいずれかのサービスに、WindowsまたはLinuxコンテナのイメージをデプロイして実行することができます(これら以外にもコンテナ対応のサービスがあります)。

プランの選択や、AKSでWindowsコンテナを実行するにはWindows Serverベースのワーカーノードが必要などWindowsコンテナかLinuxコンテナで注意するべき点もありますが、アプリのデプロイと実行の基本的な部分は変わりません。

Azure App Service ・・・ コードまたはコンテナを使用してデプロイできるWebアプリのホスティング環境

  • Azure App ServiceへのWindowsベースのコンテナアプリのデプロイ

    Azure App ServiceへのWindowsベースのコンテナアプリのデプロイ

Azure Container Instances ・・・ コンテナをオンデマンドで実行可能な、サーバーレスのマネージドサービス

Azure Kubernetes service ・・・ Azure上にデプロイできるフルマネージドのKubernetes(k8s)クラスター環境

  • 画面4 AKSのKubenetesクラスター上で動作するWindowsベースのコンテナアプリ

    画面4 AKSのKubenetesクラスター上で動作するWindowsベースのコンテナアプリ

Azure Container Apps ・・・ コンテナを使用してサーバーレスのマイクロサービスとジョブを構築できる。内部的にはKubernetes(k8s)が使用されているが、Kubernetes APIへの直接アクセスは提供されない。コンテナは、Linuxコンテナにのみ対応

Azure Functions ・・・ サーバーレスのサービスとしての関数(FaaS)を提供。内部的にはAzure App Serviceが使用されており、完全にカスタマイズできるコンテナで関数をデプロイすることが可能

CI/CDツールによる開発とリリースの自動化

「CI/CD(Continuous Integration/Continuous Delivery、継続的インテグレーション/継続的デリバリー)とは、アプリ開発の各ステージの自動化を導入して、最新のアプリをより短いサイクルで継続的にリリースする手法です。

CI/CDの開発プロセスでは、継続的にビルド、テスト、デリバリーを繰り返すため、軽量で起動の早いコンテナはCI/CDに適していると言えます。

マイクロソフトは、CI/CDツールとしてAzure DevOpsを提供しており、AKSをはじめとするAzureのコンテナ対応サービスへのデプロイはもちろんのこと、他社のクラウドを含めて、開発とデプロイの自動化を促進できます。

  • 画面5 Azure DevOpsのパイプラインを使用したアプリの開発とデプロイの自動化

    Azure DevOpsのパイプラインを使用したアプリの開発とデプロイの自動化

今回は、コンテナベースのアプリの開発とデプロイの基本的なことについて説明しました。次回は、Windowsコンテナ対応のオンプレミスのホスティング環境について解説します。