アプリケーションの更新

Part 2 では Todo アプリケーションをコンテナ化しました。このパートでは、アプリケーションとコンテナイメージを更新します。また、コンテナの停止と削除する方法も学びます。

ソースコードの更新

以下のステップでは、Todo リストにアイテムが一切なければ「何も表示しない」のではなく、「You have no todo items yet! Add one above!」(todo アイテムがありません!追加してください!)と表示します。

  1. 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>
    
  1. イメージの更新版を構築するため、 Part 2 で使用した docker build コマンドを使います。

    $ docker build -t getting-started .
    
  1. 更新したコードを使う新しいコンテナを起動します。

    $ 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 でコンテナを削除

  1. docker ps コマンドを使い、コンテナの ID を調べます。

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

    $ docker stop <the-container-id>
    
  1. コンテナが停止したら、 docker rm コマンドで削除できます。

    $ docker rm <the-container-id>
    

注釈

docker rm コマンドに「 強制(force) 」フラグを付ければ、1回のコマンドでコンテナの停止と削除ができます。例: docker rm -f <the-container-id>

Docker Desktop

Docker ダッシュボードでコンテナを削除

  1. Docker Desktop を開き、 Containers を表示します。

  1. 削除しようとしている、古くて実行しているコンテナの Actions 列の下にあるゴミ箱のアイコンをクリックします。

  1. 確認ダイアログでは Delete forever (完全に削除)を選びます。

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

  1. 次は、 docker run コマンドを使い、更新したアプリを起動します。

    $ docker run -dp 127.0.0.1:3000:3000 getting-started
    
  1. ブラウザで http://localhost:3000 を再読み込むと、説明の文字が更新されているでしょう。

Todo List Manager のスクリーンショット

次のステップ

構築と更新を行いましたが、2つの注意点があります。

  • todo リストに追加していたアイテムは、全て消えてしまいます! 良いアプリではありませんね! 近いうちに説明します。

  • 小さな変更のように、実際には多くの改良ステップがあります。以降のセクションでは、再構築を必要としないコードの編集方法や、変更する度に新しくコンテナを起動する方法を説明します。

永続性(persistence) (データの保持)を説明する前に、他人とイメージを共有する方法を見ます。