【Docker】無用なイメージとコンテナの一括削除とエイリアス

 Dockerfileを作っていると作りかけのイメージやらコンテナやらがとっちらかり、資源を食いつぶします。自分の環境ではWindows上の仮想マシン上のDockerですので結構あっという間に仮想マシンの容量不足エラーが発生します。そういった時には次の様な不要なコンテナ、イメージをまとめて削除するコマンドが便利です。

# 停止イメージをまとめて削除
docker image prune
# タグなしイメージ削除。ざっくばらんにいえば作りかけのやらかしたイメージを削除
docker rmi `docker images -f "dangling=true" -q`
# 特定の停止コードのコンテナ削除. 感覚では大体0, 1, 255以外のコードは削除した方がいいくらいの異常終了です
# @see https://docs.docker.com/engine/reference/run/#exit-status
docker rm `docker container ls -a -f="exited=127" -q`
docker rm `docker container ls -a -f="exited=100" -q`
# 停止コンテナをまとめて削除
# たまたま今停止している必要なコンテナを削除->再ビルドで長い待ち時間ができる、となりがちなのであまりお勧めしません
docker container prune

 いずれも便利ですが長いです。これとは別に普段からよく入力する docker-compose hogehoge なども長いです。ここまで長いと打ち間違いも時々起きます。そういった時、エイリアスを設定すると便利です。エイリアスの設定はaliasコマンドを使うことでできます。ailiasコマンドをどこかしら(大体ホームディレクトリ)にある.bashrc内に書き込むことでシェルを起動するたびに短いコマンドで長いコマンドを呼び出せます。ailias コマンドは次の様に

置き換えたい名前='コマンド内容'

です。

alias dart='docker-compose exec app php artisan'
# de app sh の様に後に引数を増やすと補完されて実行されます
# de app sh === docker-compose exec app sh
alias de='docker-compose exec'
# 'のエスケープは次の様に行います
alias hoge='echo \''hoge\'''
# ``や$()で定義できるサブシェル込みのコマンドは実行タイミングの都合でバグりやすいです
# シェル起動時に.bashrc内のコマンドが実行 -> .bashrc内でaliasコマンド実行 -> サブシェルはこの時点で実行済みで値固定
# alias dci='docker rmi `docker images -f "dangling=true" -q`'

 あんまり複雑なコマンドを個々に記述すると後が大変なのでそう言った時はプログラムを作った方が良いです(ShellScriptよりもPythonやJavaScriptなど他の高級言語の方が複雑なものを作っても混乱しにくいです)。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG