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