Docker 實戰教程之從入門到提高 (八)

語言: CN / TW / HK

本教程的前七篇文章:

以及通過這篇文章的介紹,我們深入學習了 Docker 技術的三大要點。

從本文開始,我們將分享一些在 Windows 操作系統下的 Docker 實戰演練。

練習1:如何在 Windows 操作系統下使用 Docker 運行一個 Web 應用

本教程之前的文章,介紹的步驟全是在 Ubuntu 操作系統下使用 Docker 的步驟。本練習方便那些使用 Windows 操作系統的學習者,瞭解如何在 Windows 操作系統下使用 Docker.

這裏的 Windows 特指 Windows 10.

Windows 操作系統使用 Docker 的前提是要開啟 Hyper V 虛擬技術,在控制面板裏把 Hyper-V 前面的勾選中,重啟即可。

Docker 官網下載 Docker For Windows 的 Community 版本:

下載下來是一個 900 多兆的可執行文件:

安裝後,在右下角任務欄裏能看到 Docker 的圖標:

安裝默認會把 Docker 命令行工具 docker.exe 和容器編排工具 docker-compose.exe 安裝到 Program Files 的 Docker 文件夾內:

右鍵可以使用 GUI 的方式來管理:

但我們一般情況下還是更習慣於使用命令行工具 docker.exe 對各種容器鏡像進行操作。

筆者已經事先開發好了一個 SAP UI5 應用,將其部署並運行在 Nginx 服務器上,並且把該應用和 Nginx 服務器一起打包在一個容器鏡像內,併發布到 Docker Hub 上了,該鏡像名稱如下:

命令行裏直接運行這個鏡像即可:

docker run i042416/ui5-nginx:v2.0

從命令打印日誌能看出,因為我的本地環境沒有這個名為 i042416/ui5-nginx ,標籤為 v2.0的鏡像,因此首先會自動從 Docker Hub 將鏡像下載到本地。

之後使用 docker images 命令就能看到這個成功下載到本地的鏡像了,大小約為 109MB:

現在使用如下的命令行啟動一個容器:

docker run -d -p 1080:80 --name jerrynginx i042416/ui5-nginx:v2.0

各參數含義如下:

-d: 以後台模式啟動容器,返回其 ID.

-p: 將容器內部 Nginx 開放的端口 80 映射到宿主機端口 1080,這樣宿主機即 Windows 環境下通過瀏覽器輸入 localhost:1080 訪問該容器。

--name: 給啟動的容器實例取一個名字。

執行完命令行之後,瀏覽器輸入如下 url,即可訪問到運行在容器內的 Nginx 之上的 SAP UI5 應用:

docker ps 命令,能看到這個處於運行狀態的容器實例:

docker inspect jerrynginx 能查看明細:

在 Windows Docker Desktop 的 Dashboard 菜單裏能觀察到這個名為 jerrynginx,處於後台運行狀態下的容器實例:

該 Dashboard 提供了針對運行時容器實例的一些基礎操作,比如查看日誌:

以及登入容器實例內部,以交互式方式執行命令行等功能。這些功能均對應有 Docker 命令行工具的實現,可以根據喜好來選擇使用。

練習2:Windows 10 啟動 Docker Desktop 時出現 WSL 2 installation is incomplete 的錯誤消息

我的 Windows10 操作系統,安裝完 Docker Desktop,啟動後出現下面的提示窗口:

WSL 2 installation is incomplete

把這個 WSL2 Linux kernel update package for x64 machines升級包安裝之後,Docker desktop 就能順利啟動了:

練習3:把運行在 Docker 容器內的 Microsoft SQL 服務器部署到 Kyma 中

本教程的第六篇文章,我們已經介紹過如何在 Docker 裏運行 Microsoft SQL 服務器:

Docker 實戰教程之從入門到提高 (六)

本練習我們將把這個包含了 Microsoft SQL 服務器的 Docker 容器鏡像,部署到 Kyma 平台上。

筆者之前的社區徵文 基於 Kyma 的企業級雲原生應用的擴展案例分享 曾經介紹過 Kyma,一個開源的雲原生應用開發平台和運行時,底層基於 Kubernetes,藉助一系列包括 Istio, NATS, Serverless 和 Prometheus 在內的其他優秀開源項目和組件,能夠開發、運行和操作雲原生應用程序,支持對傳統的 On-Premises(本地部署)應用程序和雲原生應用基於事件驅動模式的松耦合擴展。

新建一個 secret.yaml 文件,維護數據庫的用户名和密碼等 credential 信息。

定義了一個 PersistentVolume,用於存儲數據庫的數據。

新建一個 deployment.yaml 文件,為 MSSQL 數據庫定義一個 deployment 和一個 Service,用於通信。該文件使用到了前面創建的 pvc.yamlsecret.yaml 文件。

配置好 kubectlSAP Kyma 的連接。

使用命令行創建名為 dev 的 namespace:

kubectl create namespace dev

使用命令行部署 secret.yaml 和 pvc.yaml:

kubectl -n dev apply -f ./k8s/pvc.yaml

注意,如果遇到下列錯誤消息:

error: you must be logged in to the server ( the server has asked for the client to provide credentials):

解決辦法就是從 Kyma 控制枱重新下載一份 kubeconfig:

成功部署 PersistentVolumeClaim:

persistentvolumeclaim/mssql-data created

成功部署 secret:

最後使用如下命令,將本地 k8s 文件夾裏的 yaml 文件代表的 deployment 資源,部署到 SAP Kyma 上:

部署成功後,使用命令行查看自動生成的 pod 的名稱:

我的 pod 名稱:

mssql-74787d5b48-lr877

使用如下命令行拿到該 pod 監聽的端口號:

kubectl get pod mssql-74787d5b48-lr877 -n dev --template="{{(index (index .spec.containers 0).ports 0).containerPort}}"

得到端口號:1433

使用如下命令為 pod 設置端口轉發,即 port forward 功能:

kubectl port-forward mssql-74787d5b48-lr877 -n dev 1433:1433 看到如下輸出:
Forwarding from 127.0.0.1:1433 -> 1433 Forwarding from [::1]:1433 -> 1433

接下來,我們就可以在本地,使用 localhost:1433 訪問運行在 SAP Kyma 裏的數據庫了。

sqlcmd -S localhost:1433 -U SA -P Yukon900 使用如下命令找到 pod 裏的 container 名稱:mssql
kubectl describe pod mssql-74787d5b48-lr877 -n dev

使用命令

kubectl exec -it mssql-74787d5b48-lr877 -n dev -c mssql -- bash 需要提前設置環境變量:
set KUBECONFIG=C:\app\kubeconfig.yml

最終可以進入 pod,登錄 SQL 服務器的控制枱,採用 SELECT * FROM ORDERS 命令行讀取數據庫裏的訂單數據:

總結

本系列首先介紹了 Windows 操作系統下 Docker 軟件的安裝和使用前提,包括開啟 Hyper V 技術後遇到的一些錯誤消息和解決方案,最後介紹瞭如何將 Docker 鏡像部署到基於 Kubernetes 的 Kyma 平台並運行的詳細步驟。

本教程的前七篇文章: