Docker:【履歴削除】が不要になる方法
はじめに
Dockerの仕様
- 基本
- 作成する環境はイメージ(Dockerイメージ)として作成
- 作成したイメージを使ってコンテナ実行
- コンテナ実行が終了すると実行履歴に残る
- イメージとコンテナ
- イメージがあれば何度でもコンテナ実行できる
- コンテナと実行に利用したイメージは紐づいている
- イメージを削除する場合、紐づくコンテナすべての削除が必要
困ること
- 頻繁にイメージ作成やコンテナ実行を行うと
- 不要なデータが多くできる
- 件数が多いと削除が面倒
- イメージに紐づいたコンテナを見つけることも面倒
- また、コンフリクト(競合)エラーはストレス
- コンテナ実行履歴を削除(docker rm)
- 実行中なら停止(docker stop)も必要
- このような状況を回避することが本ページのモチベーション
- 参考
- コンフリクトエラーの発生時の対処
対処方法(予防策)
- docker runコマンド実行オプション「–rm」を使う
(rmの左のハイフンは2つ)- コンテナ実行履歴が残らない
- つまり、イメージ削除時の競合エラーが起きない
- 以降に具体例で説明
実行ログ
困った状況(競合エラー)を再現
イメージ作成
sudo docker build -t sample-rm -<<+ # ビルド実行
FROM alpine
CMD "sh" "-c" "echo test"
+
sudo docker images # イメージを確認
$ sudo docker build -t sample-rm -<<+ # ビルド実行 > FROM alpine > CMD "sh" "-c" "echo test" > + Sending build context to Docker daemon 2.048kB Step 1/2 : FROM alpine ---> c059bfaa849c Step 2/2 : CMD "sh" "-c" "echo test" ---> Running in 5dfcbb976e77 Removing intermediate container 5dfcbb976e77 ---> 72fac589a22c Successfully built 72fac589a22c Successfully tagged sample-rm:latest $ sudo docker images # イメージを確認 REPOSITORY TAG IMAGE ID CREATED SIZE sample-rm latest 72fac589a22c 5 seconds ago 5.59MB alpine latest c059bfaa849c 2 months ago 5.59MB hello-world latest feb5d9fea6a5 4 months ago 13.3kB ubuntu 12.04 5b117edd0b76 4 years ago 104MB dockersamples/static-site latest f589ccde7957 5 years ago 191MB
- docker build
- イメージ作成
- タグ名は「sample-rm」を指定する
- docker images
- イメージ一覧を表示する
- REPOSITORY列が「sample-rm」のイメージが作成された
コンテナ実行
sudo docker run --name sample-conte sample-rm # コンテナ実行
sudo docker ps -a # コンテナ実行履歴確認
$ sudo docker run --name sample-conte sample-rm # コンテナ実行 test $ sudo docker ps -a # コンテナ実行履歴確認 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0e8f3a2d7662 sample-rm "/bin/sh -c '\"sh\" \"-…" 5 seconds ago Exited (0) 3 seconds ago sample-conte be19cc34d51b hello-world "/hello" 4 days ago Exited (0) 4 days ago condescending_almeida 13e8f94aab43 hello-world "/hello" 4 days ago Exited (0) 4 days ago gallant_lumiere e62a017fdc2d hello-world "/hello" 4 days ago Exited (0) 4 days ago magical_euclid
- docker run
- コンテナ実行する
- コンテナ名は「sample-conte」を指定
- CMDに記載した「test」が表示された
- docker ps -a
- コンテナ実行履歴を表示する
- NAMES列が「sample-conte」のコンテナ実行履歴ができた
- コンテナID(CONTAINER ID列)は「0e8f3a2d7662」
イメージ削除(削除できない)
sudo docker rmi sample-rm # イメージ削除
$ sudo docker rmi sample-rm # イメージ削除 Error response from daemon: conflict: unable to remove repository reference "sample-rm" (must force) - container 0e8f3a2d7662 is using its referenced image 72fac589a22c
- docker rmi
- イメージ名「sample-rm」を削除キーにして削除
- エラー発生
- 競合エラー:Error response from daemon: conflict
- 削除できない:unable to remove repository reference
予防策を実施
イメージ作成
- 続けて実行する場合はコンテナ実行履歴とイメージ削除
- sudo docker rm sample-conte
- sudo docker rmi sample-rm
sudo docker build -t sample-rm -<<+ # ビルド実行
FROM alpine
CMD "sh" "-c" "echo test"
+
sudo docker images # イメージを確認
$ sudo docker build -t sample-rm -<<+ # ビルド実行 > FROM alpine > CMD "sh" "-c" "echo test" > + Sending build context to Docker daemon 2.048kB Step 1/2 : FROM alpine ---> c059bfaa849c Step 2/2 : CMD "sh" "-c" "echo test" ---> Running in 12be26839119 Removing intermediate container 12be26839119 ---> a2bc93c88645 Successfully built a2bc93c88645 Successfully tagged sample-rm:latest $ sudo docker images # イメージを確認 REPOSITORY TAG IMAGE ID CREATED SIZE sample-rm latest a2bc93c88645 5 seconds ago 5.59MB alpine latest c059bfaa849c 2 months ago 5.59MB hello-world latest feb5d9fea6a5 4 months ago 13.3kB ubuntu 12.04 5b117edd0b76 4 years ago 104MB dockersamples/static-site latest f589ccde7957 5 years ago 191MB
- docker build
- イメージ作成
- タグ名は「sample-rm」を指定する
- docker images
- イメージ一覧を表示する
- REPOSITORY列が「sample-rm」のイメージが作成された
コンテナ実行
sudo docker run --rm --name sample-conte sample-rm # コンテナ実行
sudo docker ps -a # コンテナ実行履歴確認
$ sudo docker run --rm --name sample-conte sample-rm # コンテナ実行 test $ sudo docker ps -a # コンテナ実行履歴確認 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES be19cc34d51b hello-world "/hello" 4 days ago Exited (0) 4 days ago condescending_almeida 13e8f94aab43 hello-world "/hello" 4 days ago Exited (0) 4 days ago gallant_lumiere e62a017fdc2d hello-world "/hello" 4 days ago Exited (0) 4 days ago magical_euclid
- docker run
- コンテナ実行する
- コンテナ名は「sample-conte」を指定
- 「–rm」オプションを指定する(rmの左のハイフンは2つ)
- CMDに記載した「test」が表示された
- docker ps -a
- コンテナ実行履歴が作成されないことが確認できる
イメージ削除
sudo docker rmi sample-rm # イメージ削除
sudo docker images #イメージ削除確認
$ sudo docker rmi sample-rm # イメージ削除 Untagged: sample-rm:latest Deleted: sha256:a2bc93c88645017686205a3f9c45cd1aaa941d0fbb0fcf241a62b6b4cc40c0d9 $ sudo docker images #イメージ削除確認 REPOSITORY TAG IMAGE ID CREATED SIZE alpine latest c059bfaa849c 2 months ago 5.59MB hello-world latest feb5d9fea6a5 4 months ago 13.3kB ubuntu 12.04 5b117edd0b76 4 years ago 104MB dockersamples/static-site latest f589ccde7957 5 years ago 191MB
- docker rmi
- イメージ名「sample-rm」を削除キーにして削除
- 削除された:Deleted
- 競合エラー発生を回避できた
- docker images
- イメージが削除されたことが確認できる
リファレンス
- docker run | Docker Documentation
- docker runコマンド
