🐳

【Docker】プロキシ環境からチュートリアルを実施する②

2024/06/25に公開

Dockerの公式ページにあるチュートリアルをプロキシ環境から実施したので、その手順を記します。
今回はPart3: アプリケーションの更新について説明します。
https://docs.docker.jp/get-started/toc.html

Part2の手順については以下の記事に記載していますので、気になる方はご覧ください。
https://zenn.dev/mmm_wak/articles/8c49ba3ab4a70f

アプリケーションの更新

ソースコードの更新

元々のアプリケーションでは、TODOリストに何も登録されていない場合「No Items yet! Add one above!」と表示されましたが、「You have no todo items yet! Add one above!」と表示するように更新しましょう。

src/static/js/app.jsファイル内で表示する文字を変更します。
56行目を以下のように修正しましょう。

<p className="text-center">No items yet! Add one above!</p>
↓
<p className="text-center">You have no todo items yet! Add one above!</p>

イメージの更新するため、docker buildコマンドを実行します。

docker build -t getting-started .

更新したソースを使用した新しいコンテナを起動します。

$ docker run -dp 127.0.0.1:3000:3000 getting-started

すると、以下のようなエラーが発生します。

docker: Error response from daemon: driver failed programming external connectivity on endpoint laughing_burnell
(bb242b2ca4d67eba76e79474fb36bb5125708ebdabd7f45c8eaf16caaabde9dd): Bind for 0.0.0.0:3000 failed: port is already allocated.

このエラーが発生した原因は、修正前のコンテナがまだ実行されているのに、新しくコンテナを起動しようとしたためです。マシン上では一つのプロセス(コンテナを含む)しか特定のポートをリッスンできません。しかし古いコンテナが既にホスト側のポート3000を使用しているので、ポート3000で新しくコンテナを起動させるには、古いコンテナを削除する必要があります。

古いコンテナの削除

コンテナを削除するには、まずコンテナを停止する必要があります。

CLIでコンテナを削除

docker psコマンドを実行し、コンテナIDを調査します。

$ docker ps

docker stopコマンドを実行してコンテナを停止します。
<the-container-id>はdocker psで調べたIDに置き換えましょう。

$ docker stop <the-container-id>

コンテナを停止したら、docker rmコマンドでコンテナを削除しましょう。

$ docker rm <the-container-id>

更新したアプリのコンテナを起動

docker runコマンドを実行し、更新したアプリを起動します。

$ docker run -dp 127.0.0.1:3000:3000 getting-started

ブラウザでhttp://localhost:3000/を再度読み込むと、表示が変わっているのが分かります。


今回私はアプリケーションの共有をしなかったので、Part4: アプリケーションの共有の手順についての記載は割愛しています。

Discussion