Use docker as vm

2019-04-28

真的沒想到竟然會寫兩篇docker,原本打算把所有docker 的文章都歸類在
docker note的說
不過最近換mac後各種踩雷,也算學到不少,就當作紀錄吧。

首先,docker 的 container 並不是用來作VM用途的,這點從 docker 的ps
應該就能看出來了

這些項目都不是一個vm服務會有的項目啊XD

之前哭哭去問朋友後還被朋友兇回來說docker 不是 VM !!

但 docker 他使用 hypervisor 層級的虛擬化,再加上強大的Docker Hub

我他媽就是想用 docker 當虛擬機!之前 ubuntu 可以無痛當 vm 使用,但在mac上蠻痛的XDD

不過終於搞定了,這邊講講我的心路歷程。

這邊先科普一下Docker for MAC怎麼搞的

https://collabnix.com/tag/hyperkit/

這個看不懂的同學可以看我畫的簡易圖(非常粗淺的理解)

這個是 container 連外網的路徑,那個 VPNKit 會根據你要連的目的地轉換他要連的網卡

所以像 Vbox 的 vm container 也 ping 的到,因為VPNKit會把流量導到 OSX 的 vboxnet0

第一個方法——tap network
參考網址:http://sua7.com/2017/04/29/Docker%20for%20Mac%20%E5%AE%B9%E5%99%A8%E5%92%8C%E5%AE%BF%E4%B8%BB%E6%9C%BA%E5%AE%9E%E7%8E%B0%E6%A1%A5%E6%8E%A5/

這個方法成功是成功了,雖在同一網段卻還是ping不到 XD

第二個方法——dockward
參考網址:https://github.com/abiosoft/dockward

這個方法比較偏門一點,不過還蠻有趣的,他是創一個container去偵測你指定的container有沒有開指定的port
如果有的話幫你 forward 到 OSX 的 localhost,沒有開的話就是起他自己的預設頁面
缺點是他是create a container 而且不是 --rm 會有我很討厭的 container 太多的問題
而且他起一個新的 port forward 也會新創一個 network config 整體來說就是會太多東西產生
所以這個方法雖然可行,但不會吸引我去用

第三個方法——OpenVPN
參考網址:https://github.com/onedata/docker-openvpn-kube-for-mac
照著做就成功了,這是我目前最滿意的方法,要連 container 的時候再連 VPN 就好
這個方法就是第一參考網址裡面提到的方法,把 container 當 VPN , port forward
出來給 OSX 連進去 container 裡面,就可以 ping 到其他 container 了