默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
如果都沒有使用任何一個容器技術,單純的在主機上起一個服務。那就像是用一個20坪的空間養一缸水族箱。如果想要放新的魚進去[新的服務],必須考慮當前的生態、會不會有其他的生物被吃掉或是受到影響[port 是否被佔用、library 版本是否衝突等等]。
如果使用了 VM,那就是有很多組水族箱[一個或以上的VM],依據裡面要養的生物[application],決定水族箱的大小[要切割給這個 VM 的資源(Core, memory等等)]。他們都擁有各自的過濾系統[OS, 也就是 Windows/Linux等],好處是各自獨立一點都不用擔心彼此會互相影響,壞處是這個耗電量跟設備量真的很大啊!
如果使用了 Docker,則是在一間專門養海水生物的房間內(淡水魚請去隔壁間),有很多個大小不一的水族箱,不過他們共用過濾系統[也就是OS],所以只要準備多個箱體[Docker 的 container]就可以了。接下來你只需要擔心箱內的環境要怎麼設計[專注在 application],而不用一直重複建構一樣的過濾系統[OS]。
最後如果是在主機房中的租了一個 VM 上面要使用 container,那就是在一個大房子中,你只被允許使用了所租的這個房間,你要自己接過濾系統[OS],然後就跟直接使用 Docker 一樣,只要關注箱子的配置予其內部的設計就好啦。