アプリケーションの更新¶
Part 2 では Todo アプリケーションをコンテナ化しました。このパートでは、アプリケーションとコンテナイメージを更新します。また、コンテナの停止と削除する方法も学びます。
ソースコードの更新¶
以下のステップでは、Todo リストにアイテムが一切なければ「何も表示しない」のではなく、「You have no todo items yet! Add one above!」(todo アイテムがありません!追加してください!)と表示します。
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>
イメージの更新版を構築するため、 Part 2 で使用した
docker build
コマンドを使います。$ docker build -t getting-started .
更新したコードを使う新しいコンテナを起動します。
$ docker run -dp 127.0.0.1:3000:3000 getting-started
おそらく次のようなエラーが出ているでしょう(ID は違います):
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 を使用中であり、マシン上では1つのプロセス(コンテナも含みます)しか特定のポートをリッスンできないからです。これに対応するには、古いコンテナの削除が必要です。
古いコンテナの削除¶
コンテナを削除するには、まずコンテナの停止が必要です。停止した後に削除できます。古いコンテナの削除には CLI を削除する方法と Docker Desktop のグラフィカルインタフェースを使う方法があります。どちらでも、やりやすい方法を自由に選んでください。
CLI
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 rm
コマンドに「 docker rm -f <the-container-id>
Docker Desktop
Docker ダッシュボードでコンテナを削除¶
Docker Desktop を開き、 Containers を表示します。
削除しようとしている、古くて実行しているコンテナの Actions 列の下にあるゴミ箱のアイコンをクリックします。
確認ダイアログでは Delete forever (完全に削除)を選びます。
更新したアプリのコンテナを起動¶
次は、
docker run
コマンドを使い、更新したアプリを起動します。$ docker run -dp 127.0.0.1:3000:3000 getting-started
ブラウザで http://localhost:3000 を再読み込むと、説明の文字が更新されているでしょう。