Docker技術支持(nvidia-docker)

是什麼,爲什麼

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。 --來自百度百科

是因爲目前的後端在開發和運維階段確實需要一種虛擬化技術解決開發環境和生產環境環境一致的問題。

0x00 和虛擬機區別

虛擬機是模擬硬件的輸入和輸出,但是如果宿主機個虛擬機他們的kernel是一直的,就不用做硬件輸入輸出的搬運工了,只需要做kernel輸入輸出的搬運工即可。

問:Docker 容器有自己的 kernel 嗎

答:沒有,docker 和宿主機共享 kernel

問:docker 的 kernel version 由鏡像確定還是由宿主機確定

答:由宿主機決定

0x01 大概實現原理

其實就是調用了內核的隔離api,所以需要相應內核版本的支持。 在啓動一個容器的時候,它只是調用系統中早已內置的可以隔離資源的方法,而 kernel 支持這些方法,也是在創建進程的方法上做了一層資源隔離的擴展而已。 所以docker啓動速度快是因爲,本質來說容器和進程差別沒有想象中的大,共享了很多代碼,流程也差的不多。

docker其實想做的事情就是把資源隔離的接口標準化,嚴格的說它是所有相似資源隔離的一層抽象和搬運工。

用namespace完成進程和網絡的隔離。用虛擬網卡和iptables保證和外界的網絡通信。

用cgroups完成CPU、內存等資源的隔離。

用AUFS聯合文件系統完成文件方面的隔離。

0x02 基本用法

docker 的用法各大博客上都有說,這裏就不再贅述,想說一些nvidia-docker的用法。

nvidia-docker是docker的用法,它包裝了一些gpu的函數,使得docker能直接訪問主機上的gpu資源。

說一下我用它的時候遇到的一些坑。

首先,docker裏面是不需要安裝nvidia驅動的。它會直接使用本機的nvidia驅動,這樣避免了本機和docker裏驅動不一致帶來的問題。

然後用法,有兩種形式可以啓動nvidia-docker

# 第一種
nvidia-docker run xxx

# 第二種
docker run --runtime=nvidia xxx

這兩種都是可以的,沒有區別。

最後github上docker的項目說,docker19.03就開始支持gpu了,nvidia-docker不再受支持。

給出網址 https://github.com/NVIDIA/nvidia-docker

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章