環境情報
Docker Engine v18.09
メモリを20GB程度積んだRHEL7
コンテナが使うファイルシステム
dockerの関連ファイル群は/var/lib/dockerに入っており、特に指定していなければデフォルトのファイルシステムにて動いています。
# df /var/lib/docker
..
/dev/mapper/rhel-var ... /var
よってローカルにイメージをため込みすぎると以下が逼迫するというのはよく聞く話です。
/var/lib/docker/overlay2/
コンテナの起動は連続すると早くなる
意外と知られていない事実に、コンテナを連続して起動すると二回目は少し早くなります。
これはDockerイメージがディスク上に保管されているのかメモリのキャッシュに残っているのかの差です。それを実感したい方は
time docker run ubuntu echo "hello"
といったようなコンテナを起動してhelloを標準出力するだけのコマンドを連続して叩いてみてください。少し早くなっているはずです。
ちなみに私が遊んでいる環境だと0.8sが0.6sになる程度なので誤差ですが、ここが明確に変化する場合は下記の対応はおススメです。
/var/lib/dockerをRAMディスクにする
RAMディスクの説明や作り方は割愛しますが、dockerを停止→/var/lib/dockerを丸ごと別名でコピー→新たなファイルシステムとして/var/lib/dockerを用意→コピーしたファイル群を展開→dockerを起動 すると常にキャッシュにのっているスピードで起動されます。
ただし、メモリにのっている都合上再起動するたびに消えてしまうので、例えばイメージをローカルに置いている場合はそこの手当ては必要です。あと、やるのであればメモリが潤沢にある環境でやらないと結果的にシステム全体がSwap起こしたりするので注意してください。
まとめ
Docker関連のファイルをすべてメモリに乗せることで、コンテナ環境の動作を早くさせることができます。また、本質としてはイメージがディスクにのっているのかメモリにのっているのかによって変わる起動時間の揺れを防ぐことが可能になります。連続して起動した際に大きな時間差がある場合、この揺れを無くしている設計は起動失敗判定に時間を使うのであれば重要です。
以上。