チュートリアル:Azure Container Instances へのデプロイに使用するコンテナー イメージを作成する

Azure Container Instances では、仮想マシンをプロビジョニングしたり、上位レベルのサービスを採用したりせずに、Azure のインフラストラクチャ上に Docker コンテナーをデプロイすることができます。 このチュートリアルでは、小さな Node.js Web アプリケーションを、Azure Container Instances を使用して実行できるコンテナー イメージにパッケージ化します。

シリーズの第 1 部となるこの記事では、次の内容を学習します。

  • GitHub からアプリケーション ソース コードを複製する
  • アプリケーション ソースからコンテナー イメージを作成する
  • ローカル Docker 環境でイメージをテストする

チュートリアルのパート2 およびパート 3 では、Azure Container Registry にイメージをアップロードした後、Azure Container Instances にデプロイします。

始める前に

このチュートリアルを完了するには、次の要件を満たす必要があります。

Azure CLI:ローカル コンピューターに Azure CLI バージョン 2.0.29 以降がインストールされている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。

Docker:このチュートリアルの前提として、コンテナー、コンテナー イメージ、基本 docker コマンドなど、Docker のコア概念を基本的に理解している必要があります。 Docker やコンテナーの基礎に関する入門情報については、「Docker overview」(Docker の概要) を参照してください。

Docker:このチュートリアルを完了するには、Docker がローカル環境にインストールされている必要があります。 Docker には、macOSWindowsLinux 上で Docker 環境の構成を行うパッケージが用意されています。

重要

Azure Cloud Shell には Docker デーモンが含まれていないため、このチュートリアルを完了するためには、Azure CLI と Docker エンジンの両方を自分でローカル コンピューターにインストールする必要があります。 このチュートリアルで Azure Cloud Shell を使用することはできません。

アプリケーションのコードを入手する

このチュートリアルのサンプル アプリケーションは、Node.js で構築した単純な Web アプリです。 このアプリケーションは、次のスクリーンショットに示したような静的 HTML ページを返します。

ブラウザーに表示されたチュートリアル アプリ

次のように、Git を使ってサンプル アプリケーションのリポジトリを複製します。

git clone https://github.com/Azure-Samples/aci-helloworld.git

GitHub から直接 ZIP アーカイブをダウンロードすることもできます。

コンテナー イメージを構築する

サンプル アプリケーションに含まれる Dockerfile は、コンテナーの構築方法を示しています。 その方法は、Alpine Linux に基づく公式 Node.js イメージから始まります。これは、コンテナーで使用するのに適した小規模なディストリビューションです。 次に、アプリケーション ファイルをコンテナーにコピーし、ノード パッケージ マネージャーを使用して依存関係をインストールして、最後にアプリケーションを起動します。

FROM node:8.9.3-alpine
RUN mkdir -p /usr/src/app
COPY ./app/* /usr/src/app/
WORKDIR /usr/src/app
RUN npm install
CMD node /usr/src/app/index.js

docker build コマンドを使用してコンテナー イメージを作成し、これを aci-tutorial-app としてタグ付けします。

docker build ./aci-helloworld -t aci-tutorial-app

docker build コマンドの出力は次のようになります (わかりやすくするために切り詰められています)。

docker build ./aci-helloworld -t aci-tutorial-app
Sending build context to Docker daemon  119.3kB
Step 1/6 : FROM node:8.9.3-alpine
8.9.3-alpine: Pulling from library/node
88286f41530e: Pull complete
84f3a4bf8410: Pull complete
d0d9b2214720: Pull complete
Digest: sha256:c73277ccc763752b42bb2400d1aaecb4e3d32e3a9dbedd0e49885c71bea07354
Status: Downloaded newer image for node:8.9.3-alpine
 ---> 90f5ee24bee2
...
Step 6/6 : CMD node /usr/src/app/index.js
 ---> Running in f4a1ea099eec
 ---> 6edad76d09e9
Removing intermediate container f4a1ea099eec
Successfully built 6edad76d09e9
Successfully tagged aci-tutorial-app:latest

docker images コマンドを使用して、構築されたイメージを確認します。

docker images

新しく構築したイメージがリストに表示されます。

docker images
REPOSITORY          TAG       IMAGE ID        CREATED           SIZE
aci-tutorial-app    latest    5c745774dfa9    39 seconds ago    68.1 MB

コンテナーをローカルで実行する

Azure Container Instances にコンテナーをデプロイする前に、docker run を使ってローカルでコンテナーを実行し、コンテナーが動作することを確認します。 -d スイッチを使用すると、コンテナーをバックグラウンドで実行できます。一方、-p スイッチでは、コンピューター上の任意のポートをコンテナーのポート 80 にマップすることができます。

docker run -d -p 8080:80 aci-tutorial-app

docker run コマンドが成功した場合、コマンドからの出力に、実行中のコンテナーの ID が表示されます。

docker run -d -p 8080:80 aci-tutorial-app
```output
a2e3e4435db58ab0c664ce521854c2e1a1bda88c9cf2fcff46aedf48df86cccf

今度は、ブラウザーで http://localhost:8080 に移動し、コンテナーが実行されていることを確認します。 次のような Web ページが表示されます。

ブラウザーでのアプリのローカル実行

次の手順

このチュートリアルでは、Azure Container Instances にデプロイできるコンテナー イメージを作成し、ローカルで実行されていることを確認しました。 ここで行った作業は次のとおりです。

  • GitHub からのアプリケーション ソースの複製
  • アプリケーション ソースからのコンテナー イメージの作成
  • コンテナーのローカルでのテスト

シリーズの次のチュートリアルに進んで、Azure Container Registry にコンテナー イメージを格納する方法について学習します。