SlideShare a Scribd company logo
開發人員不可不知的
Windows Container
容器技術預覽
適用 Windows Server 2016 TP5 版本
多奇數位創意有限公司
技術總監 黃保翕 ( Will 保哥 )
部落格:http://blog.miniasp.com/
Basic Concepts
基本觀念
3
Docker: Build, Ship, Run
• 分散式應用程式的開放平台!
• 專為開發人員與系統管理人員而生!( DevOps )
4
作業系統虛擬化
• Docker 實作輕量級的作業系統虛擬化解決方案!
5
虛擬機器 與 容器 的比較
參考資料
6
關於 Windows 容器
• 專為 Windows 平台所開發的 Container 技術
– 多個容器執行個體可以在一部主機上同時執行
– 透過命名空間、資源控制和程序隔離技術來提供容器隔離
• 在容器中執行的程式,在 Host 主機看的見在執行!
• 容器執行個體會與 容器主機 共用相同的作業系統核心
• 容器管理方式
– PowerShell Cmdlet
– Docker 命令
• 參考文章
– 使用 PowerShell 和 Docker 管理 Windows 容器的比較
7
關於 Hyper-V 容器
• 為 Windows Container 技術增加容器的隔離性
– 多個容器執行個體可以在一部主機上同時執行
– 透過虛擬機器來提供容器隔離
• 每個容器皆執行於一個名為 vmwp 的 Hyper-V 虛擬機中
• 每個 Hyper-V 容器 與 容器主機 之間提供核心層級隔離
• 啟動方式
docker run -it --isolation=hyperv windowsservercore cmd
• 參考文章
– Hyper-V 容器 / docker run reference
8
使用容器技術的好處 - 開發人員體驗
• 縮短開發人員上手時間
– 省去開發環境的建立與設定
– 不同的專案有不同的設定,都可以事先準備好環境
• 提升開發人員工作效率
– 由於容器技術帶來應用程式隔離,無論你用什麼程式語
言、工具、或任何系統參數設定,都不會造成容器之間
互相影響,省去環境衝突帶來的困擾!
• 抹除應用程式執行環境的不一致性
– 容器之間的隔離性可以徹底某除任何潛在的環境設定失
誤,並讓應用程式部署更加容易!
9
使用容器技術的好處 - 軟體部署方面
• 容器技術可以讓你動態改變不同的設定、新增功能、
橫向延展服務,更能迅速的反應需求的變化!
• 透過 微服務 (Micro-service) 架構,應用系統中不
同類型的服務都可透過容器技術進行分類與管理,
搭配適合的容器管理工具,就能做到動態資源分配
與分散式軟體部署的目的。
10
應用程式開發方法的比較
11
了解微服務架構 (Microservice Architecture)
• 何謂微服務
– 獨立的服務共同組成整個應用系統
– 個別的服務都可以獨立部署與運作
– 每一個服務都能夠獨立開發與維護
– 分散式的管理 ( 可延展性高 )
• 微服務的目的
– 將應用程式拆分成多個服務
– 實現敏捷開發和部署自動化
為何要用微服務方式建置應用程式?
12
應用程式類型之間的狀態儲存比較
在 AZURE 建立虛擬機器
Create a Windows Server 2016 Core on Azure VM
14
在 Azure Portal 搜尋虛擬機器範本
15
在 Azure Portal 建立虛擬機
• https://portal.azure.com/
– 新增資源
– 搜尋關鍵字
• Technical Preview 5
– 建立虛擬機器
• 部署模型:資源管理員
• 名 稱:WS2016TP5
• 使用者名稱:will
• 使用者密碼:********
• 資源群組名:WS2016TP5
• 位 置:東亞
16
透過遠端桌面連線(RDP)連接虛擬機器
安裝容器功能與 DOCKER 工具
Install Containers feature and docker tools
18
安裝 Containers 功能
• 開啟 Windows PowerShell
• 執行以下命令
– Install-WindowsFeature containers
• 重新啟動虛擬機
– Restart-Computer
19
安裝 ContainerImage 套件提供者
• 開啟 Windows PowerShell
• 執行以下命令
– Install-PackageProvider ContainerImage -Force
• 如果上述命令無法執行,請執行以下命令:
– Register-PackageSource -Name PSGallery -Location
https://www.powershellgallery.com/api/v2/ -ProviderName
PowerShellGet -Trusted -Force
20
安裝基礎容器影像
• 執行以下命令進行安裝
– Install-ContainerImage -Name NanoServer
– Install-ContainerImage -Name WindowsServerCore
• 查詢已安裝的容器影像 (Container Image)
– Get-ContainerImage
21
安裝 docker 管理工具
• 執行以下命令進行安裝
– Invoke-WebRequest https://aka.ms/tp5/Update-Container-Host
-OutFile update-containerhost.ps1
– .update-containerhost.ps1
22
查詢容器影像與設定 latest 標籤
• 執行以下命令
– docker images
– docker tag dbfee88ee9fd windowsservercore:latest
– docker tag cb48429c84fa nanoserver:latest
容器生命週期
Container Lifecycle
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 可退出容器執行個體且自動停止容器
25
列出已建立的容器
• 列出正在執行中的容器
– docker ps
• 列出所有容器 (包含目前沒有執行的容器)
– docker ps -a
26
管理容器的生命週期
• 列出所有容器
– docker ps -a
• 啟動指定容器 (註: 1f57d7b20afc 為容器ID )
– docker start 1f57d7b20afc
• 在指定容器中執行命令
– docker exec -it 1f57d7b20afc cmd
• 停止指定容器
– docker stop 1f57d7b20afc
• 刪除指定容器
– docker rm 1f57d7b20afc
列表、啟動、執行、停止、刪除容器
建立 IIS 容器影像
Create an IIS Container Image
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
30
建立一個 IIS 容器影像
• 退出容器 (同時也會停止容器執行)
– exit
• 執行以下命令建立 iisimage 容器影像
– docker commit iisbase iisimage
– 注意:建立容器映像前必需停止容器!
建立 IIS 容器
Create an IIS 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 可退出容器執行個體且自動停止容器
33
設定外網連入安全性規則
34
設定外網連入安全性規則
35
設定外網連入安全性規則
36
確認可以外網連入容器站台
使用 DOCKERFILE 快速建置影像
Using Dockerfile to build container images
38
建立 Dockerfile 定義檔
• 建立工作區與 Dockerfile 定義檔
– New-Item C:buildDockerfile -Force
• 編輯 Dockerfile 定義檔內容
39
建置容器影像
• 執行以下命令
 docker build -t iis c:Build
• 參數說明
 build 建立容器影像
 -t iis 指定容器影像的名稱 (t = tag)
 c:Build 建置資料夾
40
其他 Dockerfile 範例
• 建立 C:Build 工作區
• 複製網站檔案到 C:Buildwwwroot 目錄中
• 建立 C:BuildDockerfile 定義檔
– 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:Inetpubwwwroot
– WORKDIR ${Inetpub}
– ADD wwwroot $Inetpub
• 建置容器影像
– docker build -t iis c:Build
• 列出容器影像
– docker images
Dockerfile reference
部署網站到 IIS 容器
Deploy a Web Site to IIS Container
42
設定容器與主機的共用資料夾 (Volume)
• 執行以下命令
 docker run -name iis1 -it -p 8088:80
-v C:buildwwwroot:c:WebRoot iisimage cmd
• 參數說明
 run 在一個新的容器中執行命令
 -v VOLUME (shared filesystems)
 C:buildwwwroot 容器主機 (container host) 的資料夾
 C:WebRoot 對應到容器實體(container machine)的資料夾
注意:容器中不能有 C:WebRoot 資料夾存在!
 iisimage 基礎影像名稱
 cmd 在容器中執行的命令
Container Data Volumes
43
解壓縮 ZIP 檔案 (方法1)
• 執行以下命令
 Expand-Archive -Path MyWebSite.zip
-DestinationPath c:inetpubwwwroot
• 參數說明
 -Path 指向要解壓縮的 zip 檔 (可為相對路徑)
 -DestinationPath 解壓縮到哪個資料夾
Expand-Archive cmdlet
44
解壓縮 ZIP 檔案 (方法2)
• 執行以下命令
 Expand-Archive -LiteralPath C:buildcapco.zip
-DestinationPath c:inetpubwwwroot
• 參數說明
 -LiteralPath 指向要解壓縮的 zip 檔 (需為絕對路徑)
 -DestinationPath 解壓縮到哪個資料夾
Expand-Archive cmdlet
45
新增 IIS 站台
• 執行以下命令
 New-WebSite -Name SecondSite -Port 80
-PhysicalPath "c:inetpubwwwrootSecondSite"
• 參數說明
 -Name 站台名稱
 -Port 站台監聽埠號
 -PhysicalPath 站台實體路徑
學習資源
Learning Resources
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 將匯出的容器影像匯入
48
常用 PowerShell 命令
• Web Server (IIS) Administration Cmdlets
– Get-WebSite 列出站台
– New-Website 建立站台
– Start-Website 啟動站台
– Stop-Website 停止站台
• 安裝 Windows 功能角色
– Get-WindowsFeature
– Install-WindowsFeature
• 其他好用命令
– Expand-Archive
– Invoke-WebRequest ( wget )
49
相關連結
• Windows Containers Documentation (繁體中文版)
– Containers Cmdlets
– Windows Containers Quick Start - PowerShell
– Windows Containers Quick Start – Docker
– Application Compatability in Windows Containers
• Containers: Docker, Windows and Trends
– Container:Docker、Windows 以及趨勢
• MSDN Forums - Windows Containers
• What is Docker?
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

More Related Content

PPTX
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
PPTX
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
PPTX
Docker introduction
PPTX
快速上手 Windows Containers 容器技術 (Docker Taipei)
PDF
Docker multi-stage build
PDF
Docker Birthday #3 - Intro to Docker Slides
PPT
Containers 101
PDF
Containers: The What, Why, and How
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
Docker introduction
快速上手 Windows Containers 容器技術 (Docker Taipei)
Docker multi-stage build
Docker Birthday #3 - Intro to Docker Slides
Containers 101
Containers: The What, Why, and How

What's hot (20)

PPTX
Docker Basics
PPTX
Docker: From Zero to Hero
PDF
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
PDF
Introduction to Kubernetes with demo
PPTX
Docker Swarm for Beginner
PPTX
What is Docker
PPTX
Introduction to Kubernetes
PDF
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
PDF
Infrastructure as Code
PDF
An Introduction to Kubernetes
PDF
Kubernetes Introduction
PDF
Introduction to Docker Compose
PDF
Introduction to Docker
PDF
Docker Introduction
PPTX
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
PPTX
Docker Ecosystem on Azure
PDF
Kubernetes Basics
PPTX
Docker and kubernetes
PDF
Docker & kubernetes
PDF
DevJam 2019 - Introduction to Kubernetes
Docker Basics
Docker: From Zero to Hero
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
Introduction to Kubernetes with demo
Docker Swarm for Beginner
What is Docker
Introduction to Kubernetes
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Infrastructure as Code
An Introduction to Kubernetes
Kubernetes Introduction
Introduction to Docker Compose
Introduction to Docker
Docker Introduction
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Ecosystem on Azure
Kubernetes Basics
Docker and kubernetes
Docker & kubernetes
DevJam 2019 - Introduction to Kubernetes
Ad

Viewers also liked (20)

PPTX
DEV305 - ASP.NET 5 開發攻略
PPTX
Visual Studio 2015 與 Git 開發實戰
PPTX
Visual Studio 2017 新功能探索 (Study4.TW)
PPTX
簡介 Git hub 平台 ( 1.5 hrs )
PPTX
Growth Mindset 經驗分享
PPTX
ASP.NET 5 的創新與變革
PPTX
你所不知道的 Microsoft Azure 雲端資源採購技巧 (2016 Azure 新春特惠方案)
PPTX
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
PPTX
初學者都該了解的 HTTP 通訊協定基礎
PPTX
簡介 GitHub 平台
PPTX
中小企業選擇雲端服務的實戰密技
PPTX
git merge 與 rebase 的觀念與實務應用
PPTX
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
PPTX
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
PPTX
SQL Server 資料庫版本控管
PPTX
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
PPTX
Windows Container 101: dotNET, Container, Kubernetes
PPTX
使用 Visual Studio Code 建構 JavaScript 應用程式
PPTX
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
PPTX
TypeScript 綜合格鬥技
DEV305 - ASP.NET 5 開發攻略
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2017 新功能探索 (Study4.TW)
簡介 Git hub 平台 ( 1.5 hrs )
Growth Mindset 經驗分享
ASP.NET 5 的創新與變革
你所不知道的 Microsoft Azure 雲端資源採購技巧 (2016 Azure 新春特惠方案)
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
初學者都該了解的 HTTP 通訊協定基礎
簡介 GitHub 平台
中小企業選擇雲端服務的實戰密技
git merge 與 rebase 的觀念與實務應用
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
SQL Server 資料庫版本控管
《保哥線上講堂》打造一個具有 Linux 溫度的 Windows 命令提示字元工具
Windows Container 101: dotNET, Container, Kubernetes
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
TypeScript 綜合格鬥技
Ad

Similar to 開發人員不可不知的 Windows Container 容器技術預覽 (20)

PPTX
Docker一期培训
PPTX
Docker基礎
PPTX
Docker 101
PDF
docker intro
PDF
Azure Container Service 使用 DC / OS 管理 docker 容器
PPTX
Docker Compose
PPTX
Docker實務
PDF
Docker容器微服務 x WorkShop
PPTX
Docker tutorial
PPTX
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
PPTX
Docker open stack
PDF
Docker 最佳实践
PDF
Docker
PDF
Docker introduce and vs kernel virtual machine
PDF
Docker Build
PPTX
FHIR Server 安裝與使用
PPTX
Docker 基礎介紹與實戰
PDF
Docker初识
PDF
企業導入容器經驗分享與開源技能培養
PDF
20150604 docker 新手入門
Docker一期培训
Docker基礎
Docker 101
docker intro
Azure Container Service 使用 DC / OS 管理 docker 容器
Docker Compose
Docker實務
Docker容器微服務 x WorkShop
Docker tutorial
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Docker open stack
Docker 最佳实践
Docker
Docker introduce and vs kernel virtual machine
Docker Build
FHIR Server 安裝與使用
Docker 基礎介紹與實戰
Docker初识
企業導入容器經驗分享與開源技能培養
20150604 docker 新手入門

More from Will Huang (20)

PPTX
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
PPTX
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
PPTX
ASP.NET Core 6.0 全新功能探索
PPTX
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
PPTX
你一定不能不知道的 Markdown 寫作技巧
PPTX
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
PPTX
Micro-frontends with Angular 10 (Modern Web 2020)
PPTX
從實戰經驗看到的 K8S 導入痛點
PPTX
RxJS 6 新手入門
PPTX
极速 Angular 开发:效能调校技巧 (ngChina 2019)
PPTX
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
PPTX
Protractor: The Hacker way (NG-MY 2019)
PPTX
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
PPTX
Angular 开发技巧 (2018 ngChina 开发者大会)
PPTX
Angular 7 全新功能探索 (Angular Taiwan 2018)
PPTX
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
PPTX
AKS 與開發人員體驗 (Kubernetes 大講堂)
PPTX
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
PPTX
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
PPTX
以敏捷架構打造美國軟體外包專案的經驗談
深入理解 CVE-2022-24765 漏洞的攻擊與防護策略 (Git v2.35.2)
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
ASP.NET Core 6.0 全新功能探索
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
你一定不能不知道的 Markdown 寫作技巧
使用 .NET 5 實現美股期貨的量化交易策略 (.NET Conf 2020)
Micro-frontends with Angular 10 (Modern Web 2020)
從實戰經驗看到的 K8S 導入痛點
RxJS 6 新手入門
极速 Angular 开发:效能调校技巧 (ngChina 2019)
你不可不知的 ASP.NET Core 3 全新功能探索 (.NET Conf 2019)
Protractor: The Hacker way (NG-MY 2019)
邁向 Windows Server 應用程式現代化 (Windows Server Application Modernization)
Angular 开发技巧 (2018 ngChina 开发者大会)
Angular 7 全新功能探索 (Angular Taiwan 2018)
利用.NET Core 與 Azure Kubernetes Service (AKS) 建立高彈性 Microservices (Azure TechDay)
AKS 與開發人員體驗 (Kubernetes 大講堂)
使用 ASP.NET Blazor 開發 SPA 網頁應用程式 (.NET Conf 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
以敏捷架構打造美國軟體外包專案的經驗談

開發人員不可不知的 Windows Container 容器技術預覽

  • 1. 開發人員不可不知的 Windows Container 容器技術預覽 適用 Windows Server 2016 TP5 版本 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/
  • 3. 3 Docker: Build, Ship, Run • 分散式應用程式的開放平台! • 專為開發人員與系統管理人員而生!( DevOps )
  • 5. 5 虛擬機器 與 容器 的比較 參考資料
  • 6. 6 關於 Windows 容器 • 專為 Windows 平台所開發的 Container 技術 – 多個容器執行個體可以在一部主機上同時執行 – 透過命名空間、資源控制和程序隔離技術來提供容器隔離 • 在容器中執行的程式,在 Host 主機看的見在執行! • 容器執行個體會與 容器主機 共用相同的作業系統核心 • 容器管理方式 – PowerShell Cmdlet – Docker 命令 • 參考文章 – 使用 PowerShell 和 Docker 管理 Windows 容器的比較
  • 7. 7 關於 Hyper-V 容器 • 為 Windows Container 技術增加容器的隔離性 – 多個容器執行個體可以在一部主機上同時執行 – 透過虛擬機器來提供容器隔離 • 每個容器皆執行於一個名為 vmwp 的 Hyper-V 虛擬機中 • 每個 Hyper-V 容器 與 容器主機 之間提供核心層級隔離 • 啟動方式 docker run -it --isolation=hyperv windowsservercore cmd • 參考文章 – Hyper-V 容器 / docker run reference
  • 8. 8 使用容器技術的好處 - 開發人員體驗 • 縮短開發人員上手時間 – 省去開發環境的建立與設定 – 不同的專案有不同的設定,都可以事先準備好環境 • 提升開發人員工作效率 – 由於容器技術帶來應用程式隔離,無論你用什麼程式語 言、工具、或任何系統參數設定,都不會造成容器之間 互相影響,省去環境衝突帶來的困擾! • 抹除應用程式執行環境的不一致性 – 容器之間的隔離性可以徹底某除任何潛在的環境設定失 誤,並讓應用程式部署更加容易!
  • 9. 9 使用容器技術的好處 - 軟體部署方面 • 容器技術可以讓你動態改變不同的設定、新增功能、 橫向延展服務,更能迅速的反應需求的變化! • 透過 微服務 (Micro-service) 架構,應用系統中不 同類型的服務都可透過容器技術進行分類與管理, 搭配適合的容器管理工具,就能做到動態資源分配 與分散式軟體部署的目的。
  • 11. 11 了解微服務架構 (Microservice Architecture) • 何謂微服務 – 獨立的服務共同組成整個應用系統 – 個別的服務都可以獨立部署與運作 – 每一個服務都能夠獨立開發與維護 – 分散式的管理 ( 可延展性高 ) • 微服務的目的 – 將應用程式拆分成多個服務 – 實現敏捷開發和部署自動化 為何要用微服務方式建置應用程式?
  • 13. 在 AZURE 建立虛擬機器 Create a Windows Server 2016 Core on Azure VM
  • 14. 14 在 Azure Portal 搜尋虛擬機器範本
  • 15. 15 在 Azure Portal 建立虛擬機 • https://portal.azure.com/ – 新增資源 – 搜尋關鍵字 • Technical Preview 5 – 建立虛擬機器 • 部署模型:資源管理員 • 名 稱:WS2016TP5 • 使用者名稱:will • 使用者密碼:******** • 資源群組名:WS2016TP5 • 位 置:東亞
  • 17. 安裝容器功能與 DOCKER 工具 Install Containers feature and docker tools
  • 18. 18 安裝 Containers 功能 • 開啟 Windows PowerShell • 執行以下命令 – Install-WindowsFeature containers • 重新啟動虛擬機 – Restart-Computer
  • 19. 19 安裝 ContainerImage 套件提供者 • 開啟 Windows PowerShell • 執行以下命令 – Install-PackageProvider ContainerImage -Force • 如果上述命令無法執行,請執行以下命令: – Register-PackageSource -Name PSGallery -Location https://www.powershellgallery.com/api/v2/ -ProviderName PowerShellGet -Trusted -Force
  • 20. 20 安裝基礎容器影像 • 執行以下命令進行安裝 – Install-ContainerImage -Name NanoServer – Install-ContainerImage -Name WindowsServerCore • 查詢已安裝的容器影像 (Container Image) – Get-ContainerImage
  • 21. 21 安裝 docker 管理工具 • 執行以下命令進行安裝 – Invoke-WebRequest https://aka.ms/tp5/Update-Container-Host -OutFile update-containerhost.ps1 – .update-containerhost.ps1
  • 22. 22 查詢容器影像與設定 latest 標籤 • 執行以下命令 – docker images – docker tag dbfee88ee9fd windowsservercore:latest – docker tag cb48429c84fa nanoserver:latest
  • 24. 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 可退出容器執行個體且自動停止容器
  • 25. 25 列出已建立的容器 • 列出正在執行中的容器 – docker ps • 列出所有容器 (包含目前沒有執行的容器) – docker ps -a
  • 26. 26 管理容器的生命週期 • 列出所有容器 – docker ps -a • 啟動指定容器 (註: 1f57d7b20afc 為容器ID ) – docker start 1f57d7b20afc • 在指定容器中執行命令 – docker exec -it 1f57d7b20afc cmd • 停止指定容器 – docker stop 1f57d7b20afc • 刪除指定容器 – docker rm 1f57d7b20afc
  • 28. 建立 IIS 容器影像 Create an IIS Container Image
  • 29. 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
  • 30. 30 建立一個 IIS 容器影像 • 退出容器 (同時也會停止容器執行) – exit • 執行以下命令建立 iisimage 容器影像 – docker commit iisbase iisimage – 注意:建立容器映像前必需停止容器!
  • 31. 建立 IIS 容器 Create an IIS Container
  • 32. 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 可退出容器執行個體且自動停止容器
  • 37. 使用 DOCKERFILE 快速建置影像 Using Dockerfile to build container images
  • 38. 38 建立 Dockerfile 定義檔 • 建立工作區與 Dockerfile 定義檔 – New-Item C:buildDockerfile -Force • 編輯 Dockerfile 定義檔內容
  • 39. 39 建置容器影像 • 執行以下命令  docker build -t iis c:Build • 參數說明  build 建立容器影像  -t iis 指定容器影像的名稱 (t = tag)  c:Build 建置資料夾
  • 40. 40 其他 Dockerfile 範例 • 建立 C:Build 工作區 • 複製網站檔案到 C:Buildwwwroot 目錄中 • 建立 C:BuildDockerfile 定義檔 – 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:Inetpubwwwroot – WORKDIR ${Inetpub} – ADD wwwroot $Inetpub • 建置容器影像 – docker build -t iis c:Build • 列出容器影像 – docker images Dockerfile reference
  • 41. 部署網站到 IIS 容器 Deploy a Web Site to IIS Container
  • 42. 42 設定容器與主機的共用資料夾 (Volume) • 執行以下命令  docker run -name iis1 -it -p 8088:80 -v C:buildwwwroot:c:WebRoot iisimage cmd • 參數說明  run 在一個新的容器中執行命令  -v VOLUME (shared filesystems)  C:buildwwwroot 容器主機 (container host) 的資料夾  C:WebRoot 對應到容器實體(container machine)的資料夾 注意:容器中不能有 C:WebRoot 資料夾存在!  iisimage 基礎影像名稱  cmd 在容器中執行的命令 Container Data Volumes
  • 43. 43 解壓縮 ZIP 檔案 (方法1) • 執行以下命令  Expand-Archive -Path MyWebSite.zip -DestinationPath c:inetpubwwwroot • 參數說明  -Path 指向要解壓縮的 zip 檔 (可為相對路徑)  -DestinationPath 解壓縮到哪個資料夾 Expand-Archive cmdlet
  • 44. 44 解壓縮 ZIP 檔案 (方法2) • 執行以下命令  Expand-Archive -LiteralPath C:buildcapco.zip -DestinationPath c:inetpubwwwroot • 參數說明  -LiteralPath 指向要解壓縮的 zip 檔 (需為絕對路徑)  -DestinationPath 解壓縮到哪個資料夾 Expand-Archive cmdlet
  • 45. 45 新增 IIS 站台 • 執行以下命令  New-WebSite -Name SecondSite -Port 80 -PhysicalPath "c:inetpubwwwrootSecondSite" • 參數說明  -Name 站台名稱  -Port 站台監聽埠號  -PhysicalPath 站台實體路徑
  • 47. 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 將匯出的容器影像匯入
  • 48. 48 常用 PowerShell 命令 • Web Server (IIS) Administration Cmdlets – Get-WebSite 列出站台 – New-Website 建立站台 – Start-Website 啟動站台 – Stop-Website 停止站台 • 安裝 Windows 功能角色 – Get-WindowsFeature – Install-WindowsFeature • 其他好用命令 – Expand-Archive – Invoke-WebRequest ( wget )
  • 49. 49 相關連結 • Windows Containers Documentation (繁體中文版) – Containers Cmdlets – Windows Containers Quick Start - PowerShell – Windows Containers Quick Start – Docker – Application Compatability in Windows Containers • Containers: Docker, Windows and Trends – Container:Docker、Windows 以及趨勢 • MSDN Forums - Windows Containers • What is Docker?
  • 50. 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