前言
windows 10 2004版本已更新wsl2,可實現在Linux子系統中安裝使用docker,此教程為2004以下版本使用docker,建議嘗試更新windows 10 2004嘗試使用wsl2。
本文介紹在非Windows10 2004版本下如何使用Docker的兩種方式
windows Linux子系統 + WLS + Docker for windows
windows Linux子系統 + WSL + VM虛擬機
背景
在之前使用Docker時一直使用的Docker for windows,然而windows版很多命令並不支持;之后Windows 10出linux子系統后本想終於可以完美解決,可真實測試后發現,現在的版本沒有辦法在子系統中使用Docker ,雖然可以安裝成功但鏡像無法啟動。之后就想到可否在windows上安裝Docker for windows,子系統使用Docker CLI來調用Windows上的Docker服務,經過驗證發現可行。但需要開啟hyper虛擬化,並且無法再使用vm虛擬機,所以本人最后用了另外一種方式,在虛擬機中安裝Docker。
windows Linux子系統 + WLS + Docker for windows
前提
打開Hyper-V,並打開cpu虛擬化功能
安裝Linux子系統(WSL)
安裝Docker for Windows
1.1 安裝Linux子系統(WSL)
現在Windows app store上已經有很多Linux子系統提供安裝,像Ubuntu,opsnsuse,Centos等,在安裝前需要在程序與功能中打開適用於Linux的Windows子系統功能。
如果是企業版windows或者server版沒有windows app store,需要查看是否支持子系統功能,如果支持可以手動安裝子系統,安裝與下載方法參考微軟官方文檔
安裝完成后在cmd中輸入bash,進入子系統,或者ctrl+r,bash進入
如果想深入了解WSL可查看微軟官方文檔
1.2 配置Docker for Windows
在Docker設置中需要開啟2375端口,以便守護程序在TCP端點上進行偵聽。

1.3 配置WSL
我們需要在WSL上安裝Docker客戶端
apt install docker.io
安裝完成后配置docker_host連接向docker for windows
export DOCKER_HOST=tcp://127.0.0.1:2375
現在就可正常使用docker

但是改環境變量只會持續到會話結束,每次打開bash都需要重新設置
因此您需要在主目錄中的一個名為.bash_profile或者 .bashrc的文件中設置該變量
vi ~/.bashrc
在文件末尾添加
export DOCKER_HOST=tcp://127.0.0.1:2375 //ip根據實際修改,參考2.2


保存后重啟bash執行docker祥光命令可以照常執行
第一種方式需要開啟hyper,而hyper與vm虛擬機只能啟動一個,然而又有需要使用vm的需要,這是就不能使用docker for windows,下面介紹在vm中安裝docker來實現。
windows Linux子系統 + WSL + VM虛擬機
2.1 vm中安裝linux版docker,配置docker
vm中安裝linux就不詳述了,自行百度,安裝docker也是,都很簡單,下面介紹下安裝完docker后需要配置哪些東西。
與 1.2 相同,也是需要開啟2375端口,對外提供api調用來實現。
自行根據自己linux系統及版本修改以下命令
vi /usr/lib/systemd/system/docker.service
ubuntu18.04 路徑
vi /lib/systemd/system/docker.service
打開systemd的docker服務配置文件,在ExecStart中加入以下配置
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

修改后保存,刷新配置,重啟docker服務
systemctl daemon-reload //1.加載docker守護進程
systemctl restart docker //2.重啟docker服務
查看已開啟的tcp端口中是否有2375,有的話則證明已配置成功。

這是docker服務端的配置就完成了,如果沒有使用 systemd 工具,自行百度實現方式吧。
2.2 配置WSL
此步驟與 1.2 相同,ip地址改為虛擬機ip地址,也可設置成固態ip,然后映射到本機端口,依然使用127.0.0.1
2.3 windows環境變量
如果不想使用linux子系統也可安裝docker for windwos, 但不起服務,只是用Docker CLI,在系統環境變量中添加:
變量名:DOCKER_HOST
變量值:tcp://127.0.0.1:2375 //ip根據實際修改,參考2.2
這中方法可實現同樣的效果,不過不知是否與linux下的存在差異,可自行決定用哪種方式。

3. 配置cmder
另外,推薦一款windows下代替cmd的工具cmder,畢竟cmd真的很難用,參考下面的文章。
可將其設置為啟動bash,自動進入linux子系統。

