開發人員不可不知的 Windows Container...

50
開發人員不可不知的 Windows Container 容器技術預覽 適用 Windows Server 2016 TP5 版本 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/

Transcript of 開發人員不可不知的 Windows Container...

Page 1: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

開發人員不可不知的Windows Container

容器技術預覽適用 Windows Server 2016 TP5 版本

多奇數位創意有限公司

技術總監黃保翕 ( Will 保哥 )

部落格:http://blog.miniasp.com/

Page 2: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

Basic Concepts

基本觀念

Page 3: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

3

Docker: Build, Ship, Run

• 分散式應用程式的開放平台!

• 專為開發人員與系統管理人員而生!( DevOps )

Page 4: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

4

作業系統虛擬化

• Docker 實作輕量級的作業系統虛擬化解決方案!

Page 5: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

5

虛擬機器與容器的比較

參考資料

Page 6: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

6

關於 Windows 容器

• 專為Windows 平台所開發的 Container 技術

– 多個容器執行個體可以在一部主機上同時執行

– 透過命名空間、資源控制和程序隔離技術來提供容器隔離• 在容器中執行的程式,在Host 主機看的見在執行!

• 容器執行個體會與容器主機共用相同的作業系統核心

• 容器管理方式

– PowerShell Cmdlet

– Docker 命令

• 參考文章

– 使用 PowerShell 和 Docker 管理Windows 容器的比較

Page 7: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

7

關於 Hyper-V 容器

• 為Windows Container 技術增加容器的隔離性

– 多個容器執行個體可以在一部主機上同時執行

– 透過虛擬機器來提供容器隔離• 每個容器皆執行於一個名為 vmwp的 Hyper-V 虛擬機中

• 每個Hyper-V 容器與容器主機之間提供核心層級隔離

• 啟動方式docker run -it --isolation=hyperv windowsservercore cmd

• 參考文章

– Hyper-V 容器 / docker run reference

Page 8: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

8

使用容器技術的好處 - 開發人員體驗

• 縮短開發人員上手時間

– 省去開發環境的建立與設定

– 不同的專案有不同的設定,都可以事先準備好環境

• 提升開發人員工作效率

– 由於容器技術帶來應用程式隔離,無論你用什麼程式語言、工具、或任何系統參數設定,都不會造成容器之間互相影響,省去環境衝突帶來的困擾!

• 抹除應用程式執行環境的不一致性

– 容器之間的隔離性可以徹底某除任何潛在的環境設定失誤,並讓應用程式部署更加容易!

Page 9: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

9

使用容器技術的好處 - 軟體部署方面

• 容器技術可以讓你動態改變不同的設定、新增功能、橫向延展服務,更能迅速的反應需求的變化!

• 透過微服務 (Micro-service)架構,應用系統中不同類型的服務都可透過容器技術進行分類與管理,搭配適合的容器管理工具,就能做到動態資源分配與分散式軟體部署的目的。

Page 10: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

10

應用程式開發方法的比較

Page 11: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

11

了解微服務架構 (Microservice Architecture)

• 何謂微服務

– 獨立的服務共同組成整個應用系統

– 個別的服務都可以獨立部署與運作

– 每一個服務都能夠獨立開發與維護

– 分散式的管理 ( 可延展性高 )

• 微服務的目的

– 將應用程式拆分成多個服務

– 實現敏捷開發和部署自動化

為何要用微服務方式建置應用程式?

Page 12: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

12

應用程式類型之間的狀態儲存比較

Page 13: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

在 AZURE 建立虛擬機器

Create a Windows Server 2016 Core on Azure VM

Page 14: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

14

在 Azure Portal 搜尋虛擬機器範本

Page 15: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

15

在 Azure Portal 建立虛擬機

• https://portal.azure.com/

– 新增資源

– 搜尋關鍵字• Technical Preview 5

– 建立虛擬機器• 部署模型:資源管理員

• 名 稱:WS2016TP5

• 使用者名稱:will

• 使用者密碼:********

• 資源群組名:WS2016TP5

• 位 置:東亞

Page 16: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

16

透過遠端桌面連線(RDP)連接虛擬機器

Page 17: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

安裝容器功能與 DOCKER 工具

Install Containers feature and docker tools

Page 18: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

18

安裝 Containers 功能

• 開啟Windows PowerShell

• 執行以下命令– Install-WindowsFeature containers

• 重新啟動虛擬機

– Restart-Computer

Page 19: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

19

安裝 ContainerImage 套件提供者

• 開啟Windows PowerShell

• 執行以下命令– Install-PackageProvider ContainerImage -Force

• 如果上述命令無法執行,請執行以下命令:– Register-PackageSource -Name PSGallery -Location

https://www.powershellgallery.com/api/v2/ -ProviderNamePowerShellGet -Trusted -Force

Page 20: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

20

安裝基礎容器影像

• 執行以下命令進行安裝– Install-ContainerImage -Name NanoServer

– Install-ContainerImage -Name WindowsServerCore

• 查詢已安裝的容器影像 (Container Image)– Get-ContainerImage

Page 21: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

21

安裝 docker 管理工具

• 執行以下命令進行安裝– Invoke-WebRequest https://aka.ms/tp5/Update-Container-Host

-OutFile update-containerhost.ps1

– .\update-containerhost.ps1

Page 22: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

22

查詢容器影像與設定 latest 標籤

• 執行以下命令– docker images

– docker tag dbfee88ee9fd windowsservercore:latest

– docker tag cb48429c84fa nanoserver:latest

Page 23: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

容器生命週期

Container Lifecycle

Page 24: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

24

從基礎容器影像建立容器

• 執行以下命令 docker run --name iisbase -it windowsservercore cmd

• 參數說明 run 在一個新的容器中執行命令

--name iisbase 指定新建立的容器名稱

-it 進入互動模式 (Interactive) -i Keep STDIN open even if not attached

-t Allocate a pseudo-TTY

windowsservercore 基礎影像名稱

cmd 在容器中執行的命令

• 其他備註– 執行 exit可退出容器執行個體且自動停止容器

Page 25: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

25

列出已建立的容器

• 列出正在執行中的容器– docker ps

• 列出所有容器 (包含目前沒有執行的容器)– docker ps -a

Page 26: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

26

管理容器的生命週期

• 列出所有容器

– docker ps -a

• 啟動指定容器 (註: 1f57d7b20afc為容器ID )

– docker start 1f57d7b20afc

• 在指定容器中執行命令

– docker exec -it 1f57d7b20afc cmd

• 停止指定容器

– docker stop 1f57d7b20afc

• 刪除指定容器

– docker rm 1f57d7b20afc

Page 27: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

列表、啟動、執行、停止、刪除容器

Page 28: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

建立 IIS 容器影像

Create an IIS Container Image

Page 29: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

29

安裝所需的 Windows 功能

• 建立容器

– docker run --name iisbase -it windowsservercore powershell

• 安裝功能角色 ( 使用 DISM工具 )

– dism /online /enable-feature /all /featurename:IIS-ASPNET45 /featurename:IIS-HttpRedirect /featurename:IIS-RequestMonitor /featurename:IIS-HttpTracing/featurename:IIS-BasicAuthentication /featurename:IIS-WindowsAuthentication /featurename:IIS-IPSecurity/featurename:IIS-URLAuthorization /NoRestart

• 取得所有功能清單

– dism /online /get-features

• 取得容器裡的Windows 功能

– Get-WindowsFeature

• 檢查容器內 IIS 是否正常啟動 (下載網頁 HTML 回來)

– Invoke-WebRequest http://localhost/ -OutFile index.htm

– wget http://localhost/ -OutFile index.htm

Page 30: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

30

建立一個 IIS 容器影像

• 退出容器 (同時也會停止容器執行)– exit

• 執行以下命令建立 iisimage容器影像– docker commit iisbase iisimage

– 注意:建立容器映像前必需停止容器!

Page 31: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

建立 IIS 容器

Create an IIS Container

Page 32: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

32

建立 IIS 容器並設定 NAT 埠號對應

• 執行以下命令 docker run --name iis1 -it -p 8088:80 iisimage cmd

• 參數說明 run 在一個新的容器中執行命令

--name iisbase 指定新建立的容器名稱

-it 進入互動模式 (Interactive)

-p 8088:80 設定主機埠號 8088 對應到容器的 80

iisimage 基礎影像名稱

cmd 在容器中執行的命令

• 其他備註– 執行 exit可退出容器執行個體且自動停止容器

Page 33: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

33

設定外網連入安全性規則

Page 34: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

34

設定外網連入安全性規則

Page 35: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

35

設定外網連入安全性規則

Page 36: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

36

確認可以外網連入容器站台

Page 37: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

使用 DOCKERFILE 快速建置影像

Using Dockerfile to build container images

Page 38: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

38

建立 Dockerfile 定義檔

• 建立工作區與 Dockerfile 定義檔

– New-Item C:\build\Dockerfile -Force

• 編輯 Dockerfile 定義檔內容

Page 39: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

39

建置容器影像

• 執行以下命令 docker build -t iis c:\Build

• 參數說明 build 建立容器影像

-t iis 指定容器影像的名稱 (t = tag)

c:\Build 建置資料夾

Page 40: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

40

其他 Dockerfile 範例

• 建立 C:\Build 工作區

• 複製網站檔案到 C:\Build\wwwroot 目錄中

• 建立 C:\Build\Dockerfile 定義檔

– FROM windowsservercore

– RUN dism /online /enable-feature /all /featurename:IIS-ASPNET45 /featurename:IIS-HttpRedirect /featurename:IIS-RequestMonitor/featurename:IIS-HttpTracing /featurename:IIS-BasicAuthentication/featurename:IIS-WindowsAuthentication /featurename:IIS-IPSecurity /featurename:IIS-URLAuthorization /NoRestart

– ENV Inetpub C:\\Inetpub\\wwwroot

– WORKDIR ${Inetpub}

– ADD wwwroot $Inetpub

• 建置容器影像

– docker build -t iis c:\Build

• 列出容器影像

– docker images

Dockerfile reference

Page 41: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

部署網站到 IIS 容器

Deploy a Web Site to IIS Container

Page 42: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

42

設定容器與主機的共用資料夾 (Volume)

• 執行以下命令 docker run -name iis1 -it -p 8088:80

-v C:\build\wwwroot:c:\WebRoot iisimage cmd

• 參數說明 run 在一個新的容器中執行命令

-v VOLUME (shared filesystems) C:\build\wwwroot 容器主機 (container host) 的資料夾

C:\WebRoot 對應到容器實體(container machine)的資料夾注意:容器中不能有 C:\WebRoot 資料夾存在!

iisimage 基礎影像名稱

cmd 在容器中執行的命令

Container Data Volumes

Page 43: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

43

解壓縮 ZIP 檔案 (方法1)

• 執行以下命令 Expand-Archive -Path MyWebSite.zip

-DestinationPath c:\inetpub\wwwroot\

• 參數說明 -Path 指向要解壓縮的 zip 檔 (可為相對路徑)

-DestinationPath 解壓縮到哪個資料夾

Expand-Archive cmdlet

Page 44: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

44

解壓縮 ZIP 檔案 (方法2)

• 執行以下命令 Expand-Archive -LiteralPath C:\build\capco.zip

-DestinationPath c:\inetpub\wwwroot\

• 參數說明 -LiteralPath 指向要解壓縮的 zip 檔 (需為絕對路徑)

-DestinationPath 解壓縮到哪個資料夾

Expand-Archive cmdlet

Page 45: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

45

新增 IIS 站台

• 執行以下命令 New-WebSite -Name SecondSite -Port 80

-PhysicalPath "c:\inetpub\wwwroot\SecondSite"

• 參數說明 -Name 站台名稱

-Port 站台監聽埠號

-PhysicalPath 站台實體路徑

Page 46: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

學習資源

Learning Resources

Page 47: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

47

常用 docker 命令

• docker ps 列出容器

• docker exec 在容器中執行程式

• docker run 建立容器

• docker commit 從 Container 建立容器影像

• docker build 從 Dockerfile 建立容器影像

• docker rm 刪除容器

• docker images 列出容器影像

• docker rmi 刪除容器影像

• docker save 匯出容器影像成 tar 檔

• docker load 將匯出的容器影像匯入

Page 50: 開發人員不可不知的 Windows Container 容器技術預覽download.microsoft.com/download/7/8/D/78D289B4-CC... · 開發人員不可不知的 Windows Container 容器技術預覽

50

聯絡資訊

• The Will Will Web

記載著Will 在網路世界的學習心得與技術分享

– http://blog.miniasp.com/

• Will 保哥的技術交流中心 (臉書粉絲專頁)

– http://www.facebook.com/will.fans

• Will 保哥的噗浪

– http://www.plurk.com/willh/invite

• Will 保哥的推特

– https://twitter.com/Will_Huang