Performance

Docker啟動時間

  • February 17, 2018

我怎樣才能加快速度: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 不會改變上述命令的執行時間。

成本時間很可能花在創建和刪除命名空間上。要確定時間花在哪裡,您可以以不同的方式執行您的容器。

首先,消除 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 分配,如果需要配置標準輸入,請刪除-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 是一個客戶端/伺服器應用程序,並且某些實際時間可能是客戶端和伺服器之間的套接字/網路通信。

引用自:https://serverfault.com/questions/897619