昨今のITインフラ界隈ではコンテナ技術がよく利用されるようになってきました。仮想化技術の1つでVirtual Machineのようにハードウェアから仮想化するのではなく、OS部分は共通化して実行プログラムなどを仮想空間で実行する環境なので起動が早く、リソース消費が少なくて済みます。とはいってもサーバOSなど潤沢なリソースがある環境ではサクサク動作しますが、ノートパソコンなどの非力な環境では流石に厳しいことがあります。
そこで、非力な環境でも手軽にコンテナを扱うために「Azure Container Instances(ACI)」を使ってサーバレスにしてみます。
ACIへのアクセスは、Docker CLIを利用しますが、Windows 10のDocker CLIは「Docker Desktop」で提供されており、Docker CLIだけでインストールすることが困難です。どうせならコンテナ環境をインストールせずに使いたい!ということで少々本末転倒のような気がしますが、Linux環境ではDocker CLIだけでインストールできるのでWindows 10の機能「Windows Subsystem for Linux(wsl2)」を使います。
Windows 10にWSL2をインストール
WSL2はWSL1とは異なり、完全なLinuxカーネルで動作しています。先日「Windows 10 プレビュービルド21364から、WSL2でのGUIアプリケーション対応」と発表されたこともあり、今後も注目の機能の一つです。
WSL2のインストールは以下にも手順が記載されています。参考にしてみてください。
Windows Subsystem for Linuxの有効化
管理者として PowerShell を開き、以下を実行します。
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
VirtualMachine機能の有効化
管理者として PowerShell を開き、以下を実行します。
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
機器を 再起動 して WSL のインストールを完了します。
Linux カーネル更新プログラム パッケージをダウンロード
最新のパッケージをダウンロードしてインストールします。
WSL 2 を既定のバージョンとして設定
PowerShell を開き、以下を実行します。
> wsl --set-default-version 2
Linux ディストリビューションのインストール
Microsoft Store を開き、使いたいLinux ディストリビューションをインストールします。今回はUbuntuをインストールしました。
※WindowsのスタートメニューからインストールしたLinuxを初回起動すると、コンソールに1、2 分掛かると表示され、その後ユーザ名とパスワードを設定するように求められます。
以上でWSL2のインストールは完了です。powershellコンソールからwsl
と実行してもアクセス可能です。
Docker CLIのインストール
続いてDocker CLIをWSLにインストールしていきます。
Ubuntuパッケージ一覧を更新
$ sudo apt update
Dockerリポジトリ追加
$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt update
Docker CLIパッケージとCompose CLIインストール
$ sudo apt install docker-ce-cli
$ curl -L https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sudo sh
※Compose CLIはインストールしないとAzureへログインできませんでした。
ACIにアクセス
ACIにアクセスする準備ができました。ここからは以下にチュートリアルが掲載されています。
Azure コンテキストを作成
最初に Azure にログインします。
$ docker login azure
ブラウザが起動しますので、Azure の資格情報を入力してログインします。続いてコンテキストを作成します。
$ docker context create aci myacicontext
プロンプトが表示されたら、デプロイ先のAzure サブスクリプション ID とリソースグループを選択します。
コンテナーを作成
まず、ACI コンテキストに変更します。
$ docker context use myacicontext
次にインターネットに公開されているポート 80 を使用して Azure コンテナー インスタンスを作成します。※mcr.microsoft.com/azuredocs/aci-helloworld
イメージを使用
docker run -p 80:80 mcr.microsoft.com/azuredocs/aci-helloworld
実行中のコンテナーについての詳細を取得してみます。
$ docker ps
CONTAINER ID IMAGE COMMAND STATUS PORTS
amazing-colden mcr.microsoft.com/azuredocs/aci-helloworld Running 20.78.105.61:80->80/tcp
ブラウザーでその IP アドレスにアクセスします。 次のような Web ページが表示されたら成功です。 Docker コンテナーで実行されているアプリケーションが Azure に正常にデプロイされました。
リソースをクリーンアップ
ACIにDockerコンテナをデプロイするとその時点で課金が発生しますので、不要なコンテナは削除しておきます。
$ docker stop amazing-colden
$ docker rm amazing-colden
ACIの利用料金
最後にACIを利用したときの課金について記載しておきます。ACIは秒単位で課金がなされますので注意してください。以下に価格表がありましたので参考にしてください。
上記の方法で非力な環境しかない場合でもWSL+ACIでコンテナを気軽に試すことができます!開発等で利用するには便利ですね。