アプリケーションの更新
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 コマンドに「 :ruby:`強制 <force>` 」フラグを付ければ、1回のコマンドでコンテナの停止と削除ができます。例: 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 を再読み込むと、説明の文字が更新されているでしょう。
次のステップ
構築と更新を行いましたが、2つの注意点があります。
todo リストに追加していたアイテムは、全て消えてしまいます! 良いアプリではありませんね! 近いうちに説明します。
小さな変更のように、実際には多くの改良ステップがあります。以降のセクションでは、再構築を必要としないコードの編集方法や、変更する度に新しくコンテナを起動する方法を説明します。
:ruby:`永続性 <persistence>` (データの保持)を説明する前に、他人とイメージを共有する方法を見ます。
参考
- Update the application