演習 - 既存の Docker イメージを取得し、それをローカルでデプロイする

完了

独自の Docker イメージを構築して実行するための出発点として、Docker Hub から既存のイメージを取得し、コンピューター上でローカルに実行するのが適しています。

会社のアプリケーションの概念実証として、Docker Hub からサンプル イメージを実行してみることにします。 選択したイメージを使用すると、基本的な .NET Core ASP.NET Web アプリが実装されます。 Docker イメージをデプロイするためのプロセスを確立したら、Docker を使用して、会社の独自の Web アプリのいずれかを実行できます。

この演習では、Docker Hub からイメージをプルし、それを実行します。 デプロイされる要素の理解に役立つように、Docker のローカル状態を調べます。 最後に、コンテナーとイメージをコンピューターから削除します。

重要

この演習は、Azure ではなく、ご利用のコンピューター上で行われます。 演習を進めるには、Docker のローカル インストールが必要です。 ダウンロード: https://hub.docker.com/editions/community/docker-ce-desktop-windows/

Docker Hub からサンプル アプリケーションをプルして実行する

  1. コンピューターで Docker を起動します。

  2. ご利用のローカル コンピューターでコマンド プロンプト ウィンドウを開きます。

  3. 次のコードを入力して、Docker Hub レジストリから ASP.NET サンプル アプリ イメージをプルします。 このイメージには Microsoft が開発したサンプル Web アプリが含まれており、Visual Studio で使用できる既定の ASP.NET テンプレートがベースになっています。

    docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
    
  4. 以下のコードを入力して、イメージがローカルに保存されていることを確認します。

    docker image ls
    

    aspnetapp のタグが付いた、mcr.microsoft.com/dotnet/samples という名前のリポジトリが表示されるはずです。

  5. サンプル アプリを開始するには、次のコードを入力します。 -d フラグを指定し、バックグラウンドの非対話型アプリとして実行します。 -p フラグは、作成したコンテナーのポート 8080 をローカルでポート 8080 にマップします。 この設定は、ご利用のコンピューター上で既に実行されている Web アプリと競合しないようにするためのものです。 このコマンドでは、インスタンスの 16 進数の長い識別子で応答します。

    docker run -d -p 8080:8080 mcr.microsoft.com/dotnet/samples:aspnetapp
    
  6. Web ブラウザーを開き、サンプル Web アプリの URL http://localhost:8080 を入力します。 次のスクリーンショットのようなページが表示されます。

    Screenshot of the sample web app running in a browser.

ローカルの Docker レジストリのコンテナーを調べる

  1. コマンド プロンプトで次のコマンドを実行して、ローカル レジストリ内の実行中コンテナーを表示します。

    docker ps
    

    出力は次のようになります。

    CONTAINER ID   IMAGE                                             COMMAND                  CREATED          STATUS          PORTS                  NAMES
    96c851831ade   mcr.microsoft.com/dotnet/samples:aspnetapp   "dotnet aspnetapp.dll"   22 minutes ago   Up 22 minutes   0.0.0.0:8080->80/tcp   eager_montalcini
    

    COMMAND フィールドには、dotnet aspnetapp.dll コマンドを実行して起動したコンテナーが表示されます。 このコマンドでは .NET Core ランタイムを呼び出し、aspnetapp.dll のコード (サンプル Web アプリのコード) を起動します。 PORTS フィールドは、イメージのポート 8080 が、使用中のコンピューターのポート 8080 にマップされたことを示します。 STATUS フィールドには、アプリケーションがまだ実行されていることが示されます。 コンテナーの名前 をメモしておきます。

  2. 次のコマンドを実行して Docker コンテナーを停止し、プレースホルダー <NAME> を前のコマンドの出力名に置き換えます。

    docker container stop <NAME>
    
  3. 次のコマンドを実行して、コンテナーが実行されなくなったことを確認します。 -a フラグを指定すると、コマンドによって、実行されているコンテナーだけでなく、すべてのコンテナーの状態が表示されます。 出力には、コンテナーの STATUS が Exited と表示されます。

    docker ps -a
    
  4. Web ブラウザーで、サンプル Web アプリのページを更新します (http://localhost:8080/).。 接続が拒否されました エラーで失敗するはずです。

ローカル レジストリからコンテナーとイメージを削除する

  1. コンテナーは停止しますが、まだ読み込まれており、再起動できます。 コマンド プロンプト ウィンドウで次のコマンドを実行して削除し、<NAME> プレースホルダーをご利用のコンテナーの名前に置き換えます。

    docker container rm <NAME>
    
  2. 次のコマンドを実行して、コンテナーが削除されたことを確認します。 コマンドでコンテナーがリストされなくなったはずです。

    docker ps -a
    
  3. コンピューター上で現在使用できるイメージをリストします。 出力には、サンプル リポジトリが表示されます。

    docker image ls
    
  4. レジストリからイメージを削除します。

    docker image rm mcr.microsoft.com/dotnet/samples:aspnetapp
    
  5. 出力には、タグ付けされずに削除された多数の項目が一覧表示されます。 次のコマンドを実行して再度イメージをリストして、microsoft/dotnet-samples Web アプリのイメージが表示されなくなったことを確認します。

    docker image ls