Docker 實戰教程之從入門到提高 (八)
本教程的前七篇文章:
- Docker 實戰教程之從入門到提高 (一)
- Docker 實戰教程之從入門到提高 (二)
- Docker 實戰教程之從入門到提高 (三)
- Docker 實戰教程之從入門到提高 (四)
- Docker 實戰教程之從入門到提高 (五)
- Docker 實戰教程之從入門到提高 (六)
- Docker 實戰教程之從入門到提高 (七)
以及通過這篇文章的介紹,我們深入學習了 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 服務器:
本練習我們將把這個包含了 Microsoft SQL 服務器的 Docker 容器鏡像,部署到 Kyma 平台上。
筆者之前的社區徵文 基於 Kyma 的企業級雲原生應用的擴展案例分享 曾經介紹過 Kyma,一個開源的雲原生應用開發平台和運行時,底層基於 Kubernetes,藉助一系列包括 Istio, NATS, Serverless 和 Prometheus 在內的其他優秀開源項目和組件,能夠開發、運行和操作雲原生應用程序,支持對傳統的 On-Premises(本地部署)應用程序和雲原生應用基於事件驅動模式的松耦合擴展。
新建一個 secret.yaml
文件,維護數據庫的用户名和密碼等 credential 信息。
定義了一個 PersistentVolume,用於存儲數據庫的數據。
新建一個 deployment.yaml
文件,為 MSSQL 數據庫定義一個 deployment 和一個 Service,用於通信。該文件使用到了前面創建的 pvc.yaml
和 secret.yaml
文件。
配置好 kubectl
和 SAP 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 平台並運行的詳細步驟。
本教程的前七篇文章:
- 為什麼一定要從DevOps走向BizDevOps?
- 雲音樂FeatureStore建設與實踐
- web技術分享| 【高德地圖】實現自定義的軌跡回放
- Object.prototype.toString.call()的原理
- 探針技術-JavaAgent 和字節碼增強技術-Byte Buddy
- 解決方案| 快對講綜合調度系統
- MAUI模板項目閃退問題
- 2022 年你手機裏有哪些堪稱神器的 App?
- 如何在 React Native 項目中使用 MQTT
- spring-authorization-server令牌放發源碼解析
- 劉勇智:一碼通缺陷分析與架構設計方案丨聲網開發者創業講堂 Vol.02
- systrace 統計方法耗時
- 孫勇男:實時視頻 SDK 黑盒測試架構丨Dev for Dev 專欄
- 通俗易懂講解並手寫一個vue數據雙向綁定案例
- 論 T 級互動開發如何在我們手上發光發熱
- 用原生JavaScript寫一個貪吃蛇
- 面試突擊53:常見的 HTTP 狀態碼有哪些?
- 詳解“開放雲”的真正含義!
- 一字一圖,領略瀏覽器方向的優化
- 天才製造者:獨行俠、科技巨頭和AI|深度學習崛起十年