Docker啟動時間

Docker啟動時間

如何加速:docker rundocker 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 是一個客戶端/伺服器應用程序,部分實際時間可能是客戶端和伺服器之間的套接字/網路通訊。

相關內容