前言
Windows Server 2016正式版發布已經有近半年時間了,除了看到攜程的同學分享了一些Windows Server Docker的實踐經驗,網上比較深入的資料,不管是中文或英文的,都還不太多。工作中對Windows Server 2016下的Docker,也評估了一段時間了,特此做一些分享,幫助大家填坑。本系列的討論主要關注Windows Server 2016下的原生Docker容器,不涉及Hyper-V模式的容器。
準備
既然是Windows Server 2016下的Docker,首先我們要安裝Windows Server 2016環境。條件允許的話,還是推薦使用物理機,因為實際使用中,直接在物理機操作,一方面響應更快,也能減少不必要的虛擬機軟件本身的兼容性問題。如果,條件實在不允許,想要使用虛擬機的話,建議使用VMWARE系列。最新的VMWARE vSphere 6.5+, Fusion 8.5+和Workstation 12.5+下親測都沒問題,分配4G以上內存即可,整體系統響應還能接受。建議別在Hyper-V下安裝,不然真會慢到懷疑人生的。
如果想使用Vagrant安裝,可以使用jacqinthebox/windowsserver2016和stefanscherer/windows_2016_docker這兩個box。不過,vagrant box國內網絡下載速度超慢,反而微軟官網的下載速度還行,所以其實自己下載試用版的Windows Server 2016的ISO安裝也花不了多少時間。
那么,假設你已經有了一個全新安裝的Windows Server 2016帶GUI的系統,并且已經安裝了全部更新補丁,下面就正式開始我們的Windows Server Docker之旅。
安裝Docker服務
安裝docker服務一般都會參考微軟官方的quickstart windows server文檔,按照它的步驟安裝行不行?行。但是,有一些細節,它分散到別的幾個頁面了,如果你沒有都仔細讀一下,并親自體驗一下相關功能的話,很可能會遇到一些坑。所以,建議按照下面的步驟:
安裝OneGet的docker provider,問你Yes/No,自然選Y:
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
安裝docker包,問你All/Yes/No,選A:
Install-Package -Name docker -ProviderName DockerMsftProvider
- 重啟機器
安裝完docker包后,如果你立刻嘗試在命令行執行任何docker命令,比如:docker images,會報無法連接服務器錯誤,原因是,必須重啟一下機器。 重啟完機器回來,我們應該已經可以執行比如docker images這樣的命令了,不過,有可能你打開一個cmd或者powershell窗口,執行docker images會收到下面的錯誤,不用慌,那是因為你沒有以Adnimistrator模式打開cmd或powershell窗口:
...省略... //./pipe/docker_engine: Access is denied ...省略...
- 以administrator模式打開powershell窗口,執行docker images,是不是成功了?小興奮 :)
- 下面你想試試pull一個image或者運行一個未曾下載過的image?如果在墻外,應該沒問題。絕大多數情況下,在墻內的同學會遇到無法連接docker的服務器錯誤。什么?有人問什么是“墻”?那個——請自行google一下百度。言歸正傳,訪問不了墻外的,我們就需要訪問墻內的鏡像,阿里云開發者平臺和DaoCloud都提供了免費的docker鏡像服務,需要先免費注冊一下。
假設你已經注冊了阿里云開發賬號或者daocloud賬號,拿到比如阿里云的類似https://xxxxxxxx.mirror.aliyuncs.com的地址,我們需要將鏡像地址配置到docker服務。請從文件瀏覽器中打開C:\ProgramData\docker\config目錄。注意C:\ProgramData\是一個默認隱藏的目錄,直接從C盤瀏覽是看不到,需要自己地址欄打一下。接下來,我們需要在config目錄下新建一個名叫daemon.json的文本文件,包含下面的內容(別忘了將鏡像地址替換成你自己的,不然后面報地址不能解析別怪我啊):
{ "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"] }
然后重啟docker的windows服務,通過GUI重啟,或者,在administrator模式的powershell窗口中執行都可以:
Restart-Service docker -f
好了,現在我們可以試著pull或者運行一個docker image了,比如:
docker run microsoft/dotnet-samples:dotnetapp-nanoserver
應該可以看到,image成功下載、運行,屏幕打印出下面這個小人:
如果沒看到,一定不是我的錯啦,肯定是你上面的步驟沒看仔細,不如再重新看一遍! 8-)
第一篇就到這里,自己試試其他docker命令吧!
文章列表