Dockerの高速化方法総まとめ|docker stopで全てのコンテナを停止する方法とイメージ、ボリューム、まとめて削除するコマンド

docker-prograshi(プロぐらし)-kv Docker
記事内に広告が含まれていることがあります。

Dockerビルドを繰り返すとイメージがどんどん増えていきます。名無しのボリュームもどんどんと増えいつの間にかDockerのメモリや容量を圧迫している、、なんてことがあります。

これを簡単に解消する方法として、不要なデータをまとめて削除する方法Dockerの設定を変更してメモリやCPUの能力を増やす方法についてまとめています。


高速化のための便利コマンド一覧

Dockerはビルドしたりコンテナを起動するたびにデータが増えたりメモリを使用してどんどんと圧迫されていきます。

高速化のためにやるべきは不要なデータを削除することが先決です。

高速化でよく使う3つのコマンド

コマンド内容
docker stop $(docker ps -q)起動中のコンテナを停止する
docker container pruneコンテナを全て削除する
docker image pruneイメージを全て削除する
注意点

現在のDocker環境をクリーンにします。既存のイメージやボリュームなども全て削除するため、次の初回起動時はイメージのbuildが必要となります(時間がかかります)


Dockerをクリーンにする時に使うコマンド

コマンド内容
docker system prune –volumes -fコンテナ、イメージ、ネットワーク、キャッシュ、ボリュームを全て削除する
docker volume pruneボリュームを全て削除する
docker network pruneネットワークを全て削除する
注意点

ボリュームにはlocalにコンテナとして構築しているDBのデータなども含まれています。間違って消すとローカルのデータが消えるので注意してください

ネットワークの削除コマンドもありますが、データ容量としてはほぼ何もない状態です。ネットワークをキレイにする時に使うぐらいです。

それぞれのコマンドの詳細は以下で解説しています。


起動中のコンテナを停止する

起動中のコンテナがある場合、そのコンテナや関連するイメージやボリュームなどは消去できません。このため、まずはコンテナを全て停止します。

docker stop $(docker ps -q)
tips

docker ps -q は起動中のコンテナIDを取得するコマンドです。

$ docker ps -q
8fa8c9522e27
89c71a3361f4
dc7b62295e33
0768763ddf1a
0570143aef24
819538f21ff2
4ec31794a884
e7a91cfed0d4

dockerコマンドの引数で$( )を使うと、コマンドの実行結果を取得できます。


なお、-qオプションは–quietの省略形です。情報の全てではなく、コンテナIDのみを表示する時に使います。

$()とは?

$()はシェルの機能の一つです。カッコの中のコマンドの実行結果を取得することができます。

バッククオート` ` で囲むのと同じです。($()の方がやや高機能)


コンテナを全て削除する

コンテナを全て停止できたらコンテナを全て削除します。(dockerやdocker-composeファイルがあればコンテナは復活できます)

docker container prune

このコマンド1発で全ての停止中のコンテナを削除できる便利なコマンドです。


補足

全てのコンテナを削除するコマンドで次のような見かけるかもしれません。これらはdocker container pruneがなかった時に使われていたコマンドです。(今も使えますがやや冗長です)

docker rm $(docker ps -a -q)

コンテナを削除するdocker rmコマンドの引数に全てのコンテナのID名を渡しています。

tips

docker ps -a -q-aオプションは–allの省略系で、停止中のコンテナも含め全てのコンテナの情報を表示します。

-qオプションは–quietの省略形です。コンテナIDのみを表示する時に使います。


イメージを全て削除する

イメージを全て削除します。

docker image prune

このコマンド1発で全てのイメージを削除できる便利なコマンドです。

補足

全てのイメージを削除するコマンドで次のような見かけるかもしれません。これらはdocker image pruneがなかった時に使われていたコマンドです。(今も使えますが冗長です)

#例1
docker images --filter "dangling=true" -q | xargs docker rmi

#例2
docker rmi `docker images --fileter "dangling=true" -q`

#例3
docker rmi $(docker images --fileter "dangling=true" -q)


ボリュームを全て削除する

ボリュームを全て削除します。

docker volume prune
注意点

ボリュームにはlocalにコンテナとして構築しているDBのデータなども含まれています。間違って消すとローカルのデータが消えるので注意してください

ネットワークを全て削除する

ネットワークを全て削除します。

ネットワークの削除コマンドもありますが、データ容量としてはほぼ何もない状態です。ネットワークをキレイにする時に使うぐらいです。

docker network prune


コンテナ、イメージ、ネットワーク、キャッシュ、ボリュームを全て削除する

停止中のコンテナ、イメージ、ネットワーク、キャッシュを全て削除する超便利コマンドがあります。

docker system prune --volumes -f

volumesオプションの必要性

Dockerの17.06.0以前はvolumesオプションなしでボリュームも削除されましたが、17.06.1以降はボリュームもセットで削除したい場合は–volumesオプションをつける必要があります。

fオプションの必要性

fオプションは--forceの省略形です。デフォルトでは実行前に本当に削除していいかの確認を聞かれます。これをいちいち表示させたくない場合に使います。


tips
  • pruneとは余計なものを取り除くという意味の英語です。
  • pruneを使うときコマンドは単数形です(container, image, volume)
  • 実行してもいいか聞かれるので、yを入力します。(キャンセルする場合はN

なおpruneは果物のプルーンも同じ表記ですがここでは動詞で使われています。

実例

$ docker system prune --volumes -f

(省略)

rrcm495z77gc8hpdhauksl61t

Total reclaimed space: 5.228GB


(参考)Docker Docs|使用していない Docker オブジェクトの削除(prune)

コマンドのショートカットを登録する(エイリアス)

起動中のコンテナを停止してから、データを一括削除するコマンドを入力するのは手間なので、エイリアスを設定しておくと便利です。

ここでは、2つの処理をエイリアスとして登録します。

  1. docker-stop :起動中のコンテナを全て停止する。
  2. docker-clean :起動中のコンテナを全て停止し、コンテナ、イメージ、ネットワーク、キャッシュ、ボリュームを全て削除する。

.bash_profileを開く

vimエディタを使って .bash_profileを開きます。

$ vim ~/.bash_profile


エイリアスを追記する

以下の2行を追記します。

alias docker-stop='docker stop $(docker ps -q)'
alias docker-clean='docker stop $(docker ps -q) && docker system prune --volumes -f'

vimで記述するには i をクリックすればインサートモードになります。

追記が完了したら escを押してインサートモードを抜けてから、:wq を入力しenterをクリックします。


.bash_profileを読み込む

.bash_profileはbashを起動した時に自動ロードされますが、編集直後は変更を反映するために読み込む必要があります。

source ~/.bash_profile

正しく読み込まれたか確認します。

$ alias | grep docker-
alias docker-clean='docker stop $(docker ps -q) && docker system prune --volumes -f'
alias docker-stop='docker stop $(docker ps -q)'


コマンドの実行

コマンドを実行してみます。

$ docker-stop
8fa8c9522e27
89c71a3361f4
dc7b62295e33
0768763ddf1a
0570143aef24
819538f21ff2
4ec31794a884
e7a91cfed0d4

#起動中のコンテナを確認
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

起動中のコンテナを全て停止することができました。


Dockerの設定を見直す

Dockerをクリーンにする以外に、Dockerに割り当てるリソースを増やすことで速度が改善することもあります。

Docker Desktopは自分で割り当てるメモリやハードの容量を指定することができます。

Docker Desktopのメニューの中に「Preferences」があります。これをクリックします。

その中にResourcesという項目があります。

一例として、以下のように割り当てておけば大抵のプロジェクトでは十分でしょう。

タイトルとURLをコピーしました