アプリケーションの更新
1 部 においては 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>
更新バージョンに基づいてイメージをビルドします。 実行するコマンドは
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 127.0.0.1:3000 failed: port is already allocated.
エラーが発生した理由は、それまでにコンテナーが実行しており、新たなコンテナーを起動できないためです。 それまでの古いコンテナーがすでにホストのポート 3000 を利用しています。 そもそもマシン上において (コンテナーも含み)、特定のポートを利用できるのはただ一つのプロセスしか許容されないためです。 これを解決するには、古いコンテナーを削除することが必要です。
古いコンテナーの削除
コンテナーを削除するには、まずコンテナーを停止させなければなりません。 停止していれば削除することができます。 古いコンテナーを削除する方法としては、CLI を使う方法と Docker Desktop のグラフィカルインターフェースを使う方法があります。 どちらでもやりやすい方法をとってください。
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>
メモ
コンテナーの停止と削除を 1 つのコマンドで実行することができます。 これは
docker rm
コマンドにforce
フラグをつけます。 たとえばdocker rm -f <the-container-id>
とします。
Docker Desktop を用いたコンテナーの削除
- Docker Desktop を開いて Containers (コンテナー) 画面を表示します。
- 削除したい対象コンテナーに対する Actions カラムの下にある、ごみ箱アイコンをクリックします。
- 確認ダイアログが表示されるので、Delete forever (完全に削除) をクリックします。
更新したアプリコンテナーの起動
そこで更新したアプリを起動します。 コマンドは
docker run
です。$ docker run -dp 127.0.0.1:3000:3000 getting-started
ブラウザー上で http://localhost:3000 にアクセスしている画面を更新します。 更新したヘルプテキストが表示されたはずです。
まとめ
本節では、コンテナーの更新と再ビルドの方法を学びました。 またコンテナーの停止と削除の方法も学びました。
関連情報
次のステップ
次では他の方々とイメージを共有する方法について学びます。