Dockerの起動時間

Dockerの起動時間

docker runおよびコマンドを高速化するにはどうすればよいですかdocker exec?

コマンドの実行には、ユーザー時間で 0.02 秒、システム時間で 0.02 秒 (私の場合はこれで問題ありません) かかりますが、実際の時間はそれぞれ約 0.5 秒かかります (許容できません)。

例えば:

$ time sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k --memory-swap=100000k -d -w /tmp -v /home/asd:/tmp my_image
187d****5037
sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k  -d -w /tmp -v    0,02s user 0,02s system 6% cpu 0,496 total

コンテナの実行プロセスを何らかの方法で高速化したり、少なくともなぜこの時間が無駄になっているのかを理解したりすることはできますか?

my_imageから作成されubuntu、構築されたイメージには約 800 MB かかります。しかし、私が調べたところによると、それほど大きな問題ではありません。イメージのサイズを 200 MB に減らしても、上記のコマンドの実行時間は変わりません。

答え1

オーバーヘッド時間は、名前空間の作成と削除に費やされている可能性が最も高いです。どこで時間が費やされているかを把握するには、さまざまな方法でコンテナを実行します。

まず、sudo コマンドを削除します。root としてログインしsudo -s、そこからコマンドを実行します。

次に、実行を個別の作成ステップと開始ステップに分割してみます。これにより、コンテナーの作成に時間がかかったのか、コンテナーの実行に時間がかかったのかがわかります。

$ time docker create --cap-add SYS_ADMIN -itd \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

$ time docker start -ai $(docker ps -ql)

コンテナをデタッチして実行する場合、tty 割り当てを削除できるかどうか、また stdin の設定が必要な場合は以下を削除して削除することを検討してください-it

$ time sudo docker run --cap-add SYS_ADMIN -d \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

その後、ネットワークや pid などを既存のホスト名前空間に設定して無効にすることで、それぞれの名前空間を作成するためにどれだけの時間が追加されるかを確認できます。

$ time sudo docker run --cap-add SYS_ADMIN -itd \
  --net=host --pid=host --uts=host \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

docker からは、実行されているアクションを表示しdocker events、各アクションのタイムスタンプをチェックできます。

最後に、docker はクライアント/サーバー アプリケーションであり、実際の時間の一部はクライアントとサーバー間のソケット/ネットワーク通信である可能性があることに留意してください。

関連情報