技術情報 Dockerブログ

第5回 サンプルアプリのバージョンアップ、デプロイ、動作テストの説明

5回にわけて、Docker提供のサンプルアプリケーション(以下サンプルアプリ)をDockerホストへのデプロイにについて説明しています。

前回は、第4回「サンプルアプリの修正、デプロイ、動作テストの説明」としてサンプルアプリのSourceを編集して、再デプロイについて説明しました。

今回は、サンプルアプリのnode のバージョンアップ(18.12.0から18.12.1)と再デプロイを容易に実施できる点にフォーカスして説明します。

従来の物理・仮想サーバ上のアプリをバージョンアップする際と同様の作業もありますが、コンテナ環境独自の作業もあり、その違いを把握してもらうことを目標にしています。

  • 今回の内容は、第2回で説明したデモ環境で第3回、第4回のサンプルアプリデプロイ後に実施する内容の為、先に第2回、第3回、第4回の購読をお願いします。

なお、免責事項に関しては韋駄天利用規約 をご確認ください。

全体フローの説明

ここでは、サンプルアプリのDockerfileを修正し、コンテナ化までのフローについて説明します。
そのイメージ図は下記になります。

動作テストまでのフローは下記になります。

① VS Codeより、Ubuntuにアクセスします。( 第2回「デモ環境の説明」で設定・接続方法を説明しましたので、割愛します。)

② 前回作成のコンテナ(コンテナ02)で利用している node のバージョンを確認します。

③ docker rm で、前回作成のコンテナ(コンテナ02)を削除します。

④ Dockerfileを修正し、異なるバージョンのベースイメージ(node02)を定義します。

⑤ docker pull でのコンテナイメージ(node02)のダウンロードします。

⑥ docker build でのコンテナイメージ(gettingstarted:v03)の作成します。

⑦ docker run での コンテナイメージ(gettingstarted:v03)をコンテナ化(コンテナ03)します

⑧ 新たに作成したコンテナ(コンテナ03)で利用しているnode のバージョンを確認します。

⑨ ブラウザでコンテナ03にアクセスし、動作確認します。

従来の物理・仮想サーバ環境と異なりコンテナ環境では、Dockerfileで 利用するベースイメージのバージョンを指定でき、かつホスト側(Ubuntu)に依存することなく、コンテナを削除し、追加できるため、バージョンアップの検証作業の負担を削減できます。 

Node 18.12.1では、18.12.0から、下記サイトに記載のある3つの脆弱性を修正しています。

② 前回作成のコンテナ(コンテナ02)で利用している node のバージョンを確認

新しく作成するコンテナと比較する為、前回作成していたコンテナ(コンテナ02)で利用しているnode のバージョンを確認します。
下記イメージ図の赤色で囲った(星マーク)部分になります。

VS Codeを起動し、 左下の”WSL:Ubuntu-20.04”に接続した状態になっていることを確認します。
確認後、 Docker(拡張機能)を選択します。前回作成したコンテナ(ここでは、gettingstarted:v02 ****)を選択、右クリックして、”Attach Shell”を選択します。

コンテナにアタッチすると右下のターミナルに “/app #”と表示されるので、コマンド “node -v” を実行し、nodeのバージョンを確認します。(ここでは、前回のDockerfileで指定したnode のバージョン:v18.12.0 が表示されます。)

以上で、前回作成したコンテナで利用している node のバージョン確認は終了です。

③ 前回作成したコンテナの削除

新しく作るコンテナと前回作成していたコンテナ(コンテナ02)のTCPポートが同じの為、前回作成していたコンテナを削除します。
下記イメージ図の赤色で囲った(星マーク)部分になります。

Docker(拡張機能)を選択し、前回作成したコンテナ(ここでは、gettingstarted:v02 ****)を選択し、”Remove”を選択します。

下記の警告メッセージが表示される場合は、”Remove”をクリックします。

以上で、前回作成したコンテナを削除は終了です。

④ Dockerfileの修正

Dockerfileを修正し、前回利用していたNodeのバージョンとは異なるバージョンを利用するように定義します。

ここでは、node:18.12.0-alpine(Node01)から、node:18.12.1-alpine(Node02)を利用するようにしています。
下記イメージ図の赤色で囲った(星マーク)部分になります。   

VS Codeで、app配下のDockerfileの内容を下記のように修正し、保存します。

  • 修正した箇所を赤色で記載しています。

以上で、Dockerfileの修正は終了です。

⑤ docker pull でのコンテナイメージ(Node02)のダウンロードと ⑥ Dockerfileの定義情報からbuild

Dockerfileで定義したNode02をダウンロード、 buildして、コンテナイメージ(gettingstarted:v03)を作成します。
下記イメージ図の赤色で囲った(星マーク)部分になります。

修正したDockerfileを選択し、右クリックして、“Build Image・・・”を選択します。

コンテナイメージ名として”gettingstarted”、タグを“v03”と入力して、“Enter”キーを押します。
(gettingstarted:v03と記載し、前回のイメージと異なるタグを使用します。

右下のターミナルでビルド完了を確認します。

build成功後、 VS Code のDocker(拡張機能)を選択し、”IMAGES”メニューにGitHubからダウンロードしたnode:18.12.1-alpine3.16と作成した コンテナイメージ(gettingstarted:v03) を確認します。

以上で、コンテナイメージのビルドは終了です。

⑦ docker run でコンテイメージ(gettingstarted:v03)からコンテナ化(コンテナ03)

作成したコンテナイメージ(gettingstarted:v03)からコンテナ化します。
下記イメージ図の赤色で囲った(星マーク)部分になります。

VS CodeよりDocker(拡張機能)を選択、“IMAGES”メニューから作成したコンテナイメージ(gettingstarted:v03)を右クリックし、”Run”を指定します。

VS Code のDockerを選択し、”CONTAINERS“メニューにてコンテナ(gettingstarted:v03 ランダムな値) が実行されているのを確認します。

  • ここでは、コンテナ名は指定できない為、ランダムな値になります。
    (“gettingstarted:v03 ****”上にカーソールをあわせることで以下のサンプルと同様に詳細なメッセージBOXが表示されます。)

以上で、コンテナイメージ “gettingstarted:v03”のコンテナ化は終了です。

⑧ 新しく作成したコンテナ(コンテナ03)で利用している node のバージョン確認

新しく作成したコンテナ(コンテナ03)で利用しているnode のバージョンを確認し、②で確認した前回作成したコンテナで利用しているnodeのバージョン比較します。
下記イメージ図の赤色で囲った(星マーク)部分になります。

今回作成したコンテナ(ここでは、gettingstarted:v03 ****)を選択し、”Attach Shell”を選択します。

コンテナにアタッチすると右下のターミナルに “/app #”と表示されるので、コマンド “node -v” を実行し、nodeのバージョンを確認します。(ここでは、Dockerfileで指定したnode のバージョン:v18.12.1 が表示されます。)

②で確認した前回作成したコンテナ(コンテナ02)で利用しているnodeのバージョンは、v18.12.0でしたので、今回作成したコンテナ(コンテナ03)は、バージョンアップされているnodeを利用していることがわかります。

以上で、今回作成したコンテナで利用している node のバージョン確認は終了です。

⑨ 動作テスト

新しく作成したコンテナ(コンテナ03)に開発端末からアクセスし、動作確認を行います。
下記イメージ図の赤色で囲った(星マーク)部分になります。

VS Code のDocker(拡張機能)を選択します。選択後、”CONTAINERS“メニューから作成したコンテナ(gettingstarted:v03 …) を、右クリックして、”Open in Browser”を選択します。

サンプルアプリにブラウザでアクセスしてページが表示されれば動作確認は終了です。

まとめ

今回は、第5回「サンプルアプリのバージョンアップ、デプロイ、動作テストの説明」として、サンプルアプリのバージョンアップと動作テストについて説明しました。
これまで、5回に分けてDockerの運用・管理からサンプルアプリのデプロイ、修正、動作テストまでを説明しましたが、今回をもってDocker関連の説明は一旦区切りとさせて頂きます。

次回からは、Amazon Web Service より提供されているコンテナサービスの1つである Red Hat OpenShift Service on AWS (ROSA)について説明する予定です。