我覺得Windows 10上最好的創新之一就是Ubuntu bash,他使得在Windows上的開發體驗越來越接近MacBook,但有一個問題是,實際上你並不能在Windows 10的Ubuntu bash下運行各種daemon程序,例如以這兩年非常流行的docker來講,如果你想玩個微服務,試驗一下docker命令,就會看到如下錯誤:
主要是Windows 10下Ubuntu的bash上並不能運行docker daemon,有沒有什么解決辦法昵?當然,最近新的Docker for windows版本不僅支持Linux Container On Windows(LCOW),詳細教程可以參考頭的同時彭愛華老師的博客,並且同時也可以支持在你最喜歡的Ubuntu Bash下很自然的跑docker應用,具體做法如下:
-
下載最新版本的Docker for windows,17.10以上版本,目前最新的是17.11.0-ce-rc2,進入docker的站點,選擇Edge channel下載:
https://store.docker.com/editions/community/docker-ce-desktop-windows
- 因為Docker在Windows上的隔離依賴於Hyper-V來實現,所以安裝過程中需要你Enable Hyper-V功能,並重啟機器。
- 在正常安裝完成后,你應該在你的右下角看到一個Docker的圖標,圖標移過去之后,顯示Docker is running,選擇Docker圖標並單擊右鍵,選擇"setting", 那么magic來了,你可以看到Docker的Windows Daemon實際上可以把自己的Daemon接口,通過2375接口暴露出來,在這個選項上打勾即可,同時,我們並不需要run Linux的container在Windows上,所以去掉最后一個選項的勾:
- 回到我們的Ubuntu bash, 首先我們檢查一下docker的版本:
- 然后我們在此運行docker images命令,不同之處在於我們需要指定-H命令,指明daemon主機,也就是我們Windows上暴露的端口號,可以看到可以正常了:
-
當然每次寫-H都比較麻煩也很不方便,那么我們一個非常簡單的辦法就是把他作為環境變量放在.bashrc文件中:
$vi ~/.bashrc
添加以下三行到文件末尾:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
PATH="$PATH:/mnt/c/Program\ Files/Docker/Docker/resources/bin"
export DOCKER_HOST='tcp://0.0.0.0:2375'
然后source ~/.bashrc, 執行docker images命令,世界變的美好了:
- 好了,那么我們現在可以在Ubuntu bash下面和Docker愉快的玩耍了,先來run一個hello-world,可以看到和我們正常的Windows下沒有差別:
然后再運行docker images:
然后我們簡單的運行一個web服務器nginx,使用docker ps也可以看到這個進程在運行:
在本機上使用http://127.0.0.1:8080/來訪問Nginx服務器,可以看到web服務器在正常運行:
從這個示例可以看出,利用Docker在Windows上的daemon新特性,我們可以非常方便的在Windows 10下的Ubuntu bash愉快的進行開發了~
