Docker和虛擬機(VM)都是常見的容器化技術(shù),它們可以在同一個主機上同時運行多個隔離的操作系統(tǒng)。
但是,兩種技術(shù)之間還是有一些重要的區(qū)別。最重要的一個區(qū)別是,Docker是容器虛擬化技術(shù),而虛擬機是硬件虛擬化技術(shù)。
容器虛擬化技術(shù)使得在物理機上可以只有一個操作系統(tǒng)內(nèi)核,多個容器直接共享這個內(nèi)核。這樣就能夠?qū)崿F(xiàn)更好的性能和資源利用率,而且容器的啟動時間也很快。
# docker命令示例 $ docker run -d nginx $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60601e017400 nginx "/docker-entrypoint.…" 15 seconds ago Up 13 seconds 80/tcp thirsty_bouman
相比之下,虛擬機是一種完整的計算機系統(tǒng),它在物理機上運行一個虛擬化軟件,這個軟件能夠模擬計算機的各種硬件設(shè)備。在虛擬機中,每個操作系統(tǒng)都會有一個獨立的內(nèi)核,并且運行一個完整的虛擬化應(yīng)用程序堆棧。
# VM虛擬化技術(shù)的示例 $ qemu-system-x86_64 -boot d -cdrom ubuntu-18.04.03-desktop-amd64.iso
虛擬機相對來說要更耗費資源,因為每個虛擬機都需要有自己的操作系統(tǒng)和完整的應(yīng)用程序堆棧。然而,虛擬機之間擁有相對的隔離性,這是容器無法提供的。
總之,Docker和虛擬機之間沒有絕對的優(yōu)劣,每種技術(shù)都有自己的優(yōu)點和缺點。在實際應(yīng)用中,需要根據(jù)具體需求進行選擇。