1. 程式人生 > >老司機實戰Windows Server Docker:1 初體驗之各種填坑

老司機實戰Windows Server Docker:1 初體驗之各種填坑

前言

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/windowsserver2016stefanscherer/windows_2016_docker這兩個box。不過,vagrant box國內網路下載速度超慢,反而微軟官網的下載速度還行,所以其實自己下載試用版的Windows Server 2016的ISO安裝也花不了多少時間。

那麼,假設你已經有了一個全新安裝的Windows Server 2016帶GUI的系統,並且已經安裝了全部更新補丁,下面就正式開始我們的Windows Server Docker之旅。

安裝Docker服務

安裝docker服務一般都會參考微軟官方的quickstart windows server

文件,按照它的步驟安裝行不行?行。但是,有一些細節,它分散到別的幾個頁面了,如果你沒有都仔細讀一下,並親自體驗一下相關功能的話,很可能會遇到一些坑。所以,建議按照下面的步驟:

  1. 安裝OneGet的docker provider,問你Yes/No,自然選Y:
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
  1. 安裝docker包,問你All/Yes/No,選A:
Install-Package -Name docker -ProviderName DockerMsftProvider
  1. 重啟機器
    安裝完docker包後,如果你立刻嘗試在命令列執行任何docker命令,比如:docker images,會報無法連線伺服器錯誤,原因是,必須重啟一下機器。
  2. 重啟完機器回來,我們應該已經可以執行比如docker images這樣的命令了,不過,有可能你開啟一個cmd或者powershell視窗,執行docker images會收到下面的錯誤,不用慌,那是因為你沒有以Adnimistrator模式開啟cmd或powershell視窗:
...省略... //./pipe/docker_engine: Access is denied ...省略...
  1. 以administrator模式開啟powershell視窗,執行docker images,是不是成功了?小興奮 :)
  2. 下面你想試試pull一個image或者執行一個未曾下載過的image?如果在牆外,應該沒問題。絕大多數情況下,在牆內的同學會遇到無法連線docker的伺服器錯誤。什麼?有人問什麼是“牆”?那個——請自行google一下百度。言歸正傳,訪問不了牆外的,我們就需要訪問牆內的映象,阿里雲開發者平臺DaoCloud都提供了免費的docker映象服務,需要先免費註冊一下。
  3. 假設你已經註冊了阿里雲開發賬號或者daocloud賬號,拿到比如阿里雲的類似https://xxxxxxxx.mirror.aliyuncs.com的地址,我們需要將映象地址配置到docker服務。請從檔案瀏覽器中開啟C:\ProgramData\docker\config目錄。注意C:\ProgramData\是一個預設隱藏的目錄,直接從C盤瀏覽是看不到,需要自己位址列打一下。接下來,我們需要在config目錄下新建一個名叫daemon.json的文字檔案,包含下面的內容(別忘了將映象地址替換成你自己的,不然後面報地址不能解析別怪我啊):
{
    "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
  1. 然後重啟docker的windows服務,通過GUI重啟,或者,在administrator模式的powershell視窗中執行都可以:
Restart-Service docker -f
  1. 好了,現在我們可以試著pull或者執行一個docker image了,比如:
docker run microsoft/dotnet-samples:dotnetapp-nanoserver
  1. 應該可以看到,image成功下載、執行,螢幕打印出下面這個小人:

如果沒看到,一定不是我的錯啦,肯定是你上面的步驟沒看仔細,不如再重新看一遍! 8-)

第一篇就到這裡,自己試試其他docker命令吧!