1
docker 是基於 unix 開發的系列工具,所以在 windows 上安裝 docker 非常容易出現環境不兼容的問題。
如果 windows 版本是 pro,一般是可以直接安裝 docker desktop 的。
但是 windows home 版本不行。有 2 種方式解決,第一種方式是通過 docker toolbox, 第二種方式通過 wsl2。本文介紹第一種方式。
步驟 1:
下載 docker toolbox。
阿里雲提供了鏡像,下載會比較快,直接訪問 http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 下載。
步驟 2:
檢查是否開啟了 windows 的虛擬化技術。
docker 安裝要開啟虛擬化
步驟 3:
安裝 docker toolbox。
步驟 4:
啟動 (以管理員身份) Docker Quickstart Terminal
詳細過程可以參考官方文檔 Get started with Docker for Windows
當輸入 docker version 出現類似這樣就 OK 了。
docker version
2
這里說幾個注意事項。
事項 1:
虛擬機報錯。
運行時可能會出現 default 虛擬機不能啟動的錯誤:
The virtual machine 'default' has terminated unexpectedly during startup
這個錯誤一般是 virtualbox 版本不兼容的問題,單獨升級 virtualbox 軟件可以解決。
virtualbox 升級
事項 2:
配置加速鏡像。
官方源大陸訪問會比較慢, 一般需要設置成國內的鏡像。
鏡像加速地址可以參考這些:
- https://registry.docker-cn.com
- http://hub-mirror.c.163.com
- https://3laho3y3.mirror.aliyuncs.com
- http://f1361db2.m.daocloud.io
- https://mirror.ccs.tencentyun.com
在 docker toolbox 中配置鏡像:
docker-machine ssh default
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=鏡像加速地址 |g" /var/lib/boot2docker/profile
exit
docker-machine restart default
3
接下來說一下 docker toolbox 的執行流程。
當第一次啟動 Docker Quickstart Terminal 的時候,docker-machine 工具會通過 virtualbox 軟件安裝一個帶有 docker 的虛擬機。 所以執行的 docker 指令其實不是在 windows 系統上執行,而是在 virtualbox 的虛擬機上。
Docker Toolbox 流程
實際上,我們可以通過建立多個 VM 來虛擬出多台電腦,並在不同的電腦上運行 docker。
docker-machine create 創建多個 VM
docker-machine 只能在 virtualbox 上安裝 TinyCore-based Linux 發行版,如果你想在 windows 系統上模擬服務器系統比如 centos 或者 ubuntu, 也可以繞過 docker-machine , 使用 vagrant 安裝 VM。
docker-machine 和 vagrant
4
運行 container.
接下來我們用 docker 去運行 nginx 服務。 因為上文我們介紹了,實際上 docker 是運行在 VM 上的,所以這里的示例我都繞開了 docker quickstart 這個工具,而是直接使用命令行。
首先,通過 docker-machine 或者 vagrant 登錄 VM
docker-machine ssh default
接下來,運行 nginx
docker container run --publish 7000:80 nginx
docker 會判斷 nginx 這個 image(程序) 是否存在,如果不存在會去 docker hub 下載,之后會創建 nginx 服務的一個容器。同時,會開放 default 虛擬機的 7000 端口,並且和 nginx 容器的 80 端口綁定。
docker container run 流程
接下來,我們可以通過在虛擬機上用 ifconfig
得到 IP 地址,然后通過在本機瀏覽器輸入 vm_ip:port 的方式查看 nginx:
nginx 啟動成功
更多文章請關注公號:雨哥寫 python.