快速上手
Windows Containers
容器技術
適用 Windows Server 2016 Datacenter – with Containers 版本
多奇數位創意有限公司
技術總監 黃保翕 ( 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) 架構,應用系統中不
同類型的服務都可透過容器技術進行分類與管理,
搭配適合的容器管理工具,就能做到動態資源分配
與分散式軟體部署的目的。
在 AZURE 建立虛擬機器
Create a Windows Server 2016 VM on Microsoft Azure
11
在 Azure Portal 建立虛擬機
• https://portal.azure.com/
– 新增資源 / 搜尋關鍵字
• Containers
– 選取 Marketplace 項目
• Windows Server 2016 Datacenter – with Containers
– 選取部署模型
• 資源管理員
– 建立虛擬機器
• 名 稱:WS2016RTM
• 使用者名稱:will
• 使用者密碼:Pa$$w0rd1234 (至少12個字元)
• 資源群組名:DockerCon1119
• 位 置:東亞
12
在 Azure Portal 搜尋虛擬機器範本
13
透過遠端桌面連線(RDP)連接虛擬機器
容器生命週期
Container Lifecycle
15
從基礎容器影像建立容器
• 執行以下命令
 docker run --name new1 -it
microsoft/windowsservercore cmd
• 參數說明
 run 執行新的容器 (建立容器)
 --name new1 指定新建立的容器名稱
 -it 進入互動模式 (Interactive)
 -i Keep STDIN open even if not attached
 -t Allocate a pseudo-TTY
 microsoft/windowsservercore 基礎影像名稱
 cmd 在容器中執行的命令
• 其他備註
– 執行 exit 可退出容器執行個體且自動停止容器
16
列出已建立的容器
• 列出正在執行中的容器
– docker ps
• 列出所有容器 (包含目前沒有執行的容器)
– docker ps -a
17
管理容器的生命週期
• 列出所有容器
– docker ps -a
• 啟動指定容器 (註: new1 為容器名稱 )
– docker start new1
• 在指定容器中執行命令
– docker exec -it new1 cmd
• 停止指定容器
– docker stop new1
• 刪除指定容器
– docker rm new1
列表、啟動、執行、停止、刪除容器
建立 IIS 容器
Create an IIS Container
20
直接從 Docker Hub 下載 IIS 容器影像
• https://hub.docker.com/
– 搜尋: iis
– 下載: docker pull microsoft/iis
21
建立 IIS 容器並設定 NAT 埠號對應
• 執行以下命令
 docker run --name iis1 -d -p 8088:80 microsoft/iis
 docker exec -it iis1 cmd
• 參數說明
 run 在一個新的容器中執行命令
 --name iisbase 指定新建立的容器名稱
 -d 進入 detach 模式 (背景執行模式)
 -p 8088:80 設定主機埠號 8088 對應到容器的80埠號
 microsoft/iis 基礎影像名稱
• 其他備註
– 執行 exit 可退出容器執行個體且自動停止容器
22
查詢 Container 網路位址 ( IP )
• ipconfig
• 用瀏覽器開啟 Container 中的 IIS 站台
http://172.22.36.132/
23
設定網路安全性群組 (nsg)
24
設定連入安全性規則
25
設定連入安全性規則
26
確認可從外網連入容器站台
• 先取得 Azure VM 的對外公開 IP 地址
使用 DOCKERFILE 快速建置影像
Using Dockerfile to build container images
28
建立 Dockerfile 定義檔
• 建立工作區
– C:Build
• 建立 Dockerfile 定義檔
– C:BuildDockerfile
• 編輯 Dockerfile 定義檔內容
FROM microsoft/iis
RUN echo ^<h1^>Hello,^ Container!^</h1^> >
c:inetpubwwwrootindex.html
29
建置容器影像
• 執行以下命令
 docker build -t iis c:build
• 參數說明
 build 建立容器影像
 -t iis 指定容器影像的名稱 (t = tag)
 c:Build 建置資料夾
30
其他 Dockerfile 範例
• 建立 C:Build 工作區
• 複製網站檔案到 C:Buildwwwroot 目錄中
• 建立 C:BuildDockerfile 定義檔
– FROM microsoft/iis
– ENV Inetpub C:Inetpubwwwroot
– WORKDIR ${Inetpub}
– ADD wwwroot $Inetpub
• 建置容器影像
– docker build -t iis-mvc c:Build
• 列出容器影像
– docker images
• 建立容器
– docker run -d --name iis2 -p 8088:80 iis-mvc
• 停止容器 & 刪除容器
– docker stop iis2 && docker rm iis2 && docker rmi iis-mvc
Dockerfile reference
31
透過 iis 容器影像建立新的容器
• 執行以下命令
 docker run --name myiis –d -p 8088:80 iis
 docker ps
 docker stop myiis
 docker rm myiis
 docker rmi iis
學習資源
Learning Resources
33
常用 docker 命令
• docker ps 列出容器
• docker exec 在容器中執行程式
• docker run 建立容器
• docker commit 從 Container 建立容器影像
• docker build 從 Dockerfile 建立容器影像
• docker rm 刪除容器
• docker images 列出容器影像
• docker rmi 刪除容器影像
• docker save 匯出容器影像成 tar 檔
• docker load 將匯出的容器影像匯入
34
常用 PowerShell 命令
• Web Server (IIS) Administration Cmdlets
– Get-WebSite 列出站台
– New-Website 建立站台
– Start-Website 啟動站台
– Stop-Website 停止站台
• 安裝 Windows 功能角色
– Get-WindowsFeature
– Install-WindowsFeature
• 其他好用命令
– Expand-Archive
– Invoke-WebRequest ( wget )
35
相關連結
• 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?
36
聯絡資訊
• 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

快速上手 Windows Containers 容器技術 (Docker Taipei)

  • 1.
    快速上手 Windows Containers 容器技術 適用 WindowsServer 2016 Datacenter – with Containers 版本 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/
  • 2.
  • 3.
    3 Docker: Build, Ship,Run • 分散式應用程式的開放平台! • 專為開發人員與系統管理人員而生!( DevOps )
  • 4.
  • 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) 架構,應用系統中不 同類型的服務都可透過容器技術進行分類與管理, 搭配適合的容器管理工具,就能做到動態資源分配 與分散式軟體部署的目的。
  • 10.
    在 AZURE 建立虛擬機器 Createa Windows Server 2016 VM on Microsoft Azure
  • 11.
    11 在 Azure Portal建立虛擬機 • https://portal.azure.com/ – 新增資源 / 搜尋關鍵字 • Containers – 選取 Marketplace 項目 • Windows Server 2016 Datacenter – with Containers – 選取部署模型 • 資源管理員 – 建立虛擬機器 • 名 稱:WS2016RTM • 使用者名稱:will • 使用者密碼:Pa$$w0rd1234 (至少12個字元) • 資源群組名:DockerCon1119 • 位 置:東亞
  • 12.
    12 在 Azure Portal搜尋虛擬機器範本
  • 13.
  • 14.
  • 15.
    15 從基礎容器影像建立容器 • 執行以下命令  dockerrun --name new1 -it microsoft/windowsservercore cmd • 參數說明  run 執行新的容器 (建立容器)  --name new1 指定新建立的容器名稱  -it 進入互動模式 (Interactive)  -i Keep STDIN open even if not attached  -t Allocate a pseudo-TTY  microsoft/windowsservercore 基礎影像名稱  cmd 在容器中執行的命令 • 其他備註 – 執行 exit 可退出容器執行個體且自動停止容器
  • 16.
    16 列出已建立的容器 • 列出正在執行中的容器 – dockerps • 列出所有容器 (包含目前沒有執行的容器) – docker ps -a
  • 17.
    17 管理容器的生命週期 • 列出所有容器 – dockerps -a • 啟動指定容器 (註: new1 為容器名稱 ) – docker start new1 • 在指定容器中執行命令 – docker exec -it new1 cmd • 停止指定容器 – docker stop new1 • 刪除指定容器 – docker rm new1
  • 18.
  • 19.
    建立 IIS 容器 Createan IIS Container
  • 20.
    20 直接從 Docker Hub下載 IIS 容器影像 • https://hub.docker.com/ – 搜尋: iis – 下載: docker pull microsoft/iis
  • 21.
    21 建立 IIS 容器並設定NAT 埠號對應 • 執行以下命令  docker run --name iis1 -d -p 8088:80 microsoft/iis  docker exec -it iis1 cmd • 參數說明  run 在一個新的容器中執行命令  --name iisbase 指定新建立的容器名稱  -d 進入 detach 模式 (背景執行模式)  -p 8088:80 設定主機埠號 8088 對應到容器的80埠號  microsoft/iis 基礎影像名稱 • 其他備註 – 執行 exit 可退出容器執行個體且自動停止容器
  • 22.
    22 查詢 Container 網路位址( IP ) • ipconfig • 用瀏覽器開啟 Container 中的 IIS 站台 http://172.22.36.132/
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
    使用 DOCKERFILE 快速建置影像 UsingDockerfile to build container images
  • 28.
    28 建立 Dockerfile 定義檔 •建立工作區 – C:Build • 建立 Dockerfile 定義檔 – C:BuildDockerfile • 編輯 Dockerfile 定義檔內容 FROM microsoft/iis RUN echo ^<h1^>Hello,^ Container!^</h1^> > c:inetpubwwwrootindex.html
  • 29.
    29 建置容器影像 • 執行以下命令  dockerbuild -t iis c:build • 參數說明  build 建立容器影像  -t iis 指定容器影像的名稱 (t = tag)  c:Build 建置資料夾
  • 30.
    30 其他 Dockerfile 範例 •建立 C:Build 工作區 • 複製網站檔案到 C:Buildwwwroot 目錄中 • 建立 C:BuildDockerfile 定義檔 – FROM microsoft/iis – ENV Inetpub C:Inetpubwwwroot – WORKDIR ${Inetpub} – ADD wwwroot $Inetpub • 建置容器影像 – docker build -t iis-mvc c:Build • 列出容器影像 – docker images • 建立容器 – docker run -d --name iis2 -p 8088:80 iis-mvc • 停止容器 & 刪除容器 – docker stop iis2 && docker rm iis2 && docker rmi iis-mvc Dockerfile reference
  • 31.
    31 透過 iis 容器影像建立新的容器 •執行以下命令  docker run --name myiis –d -p 8088:80 iis  docker ps  docker stop myiis  docker rm myiis  docker rmi iis
  • 32.
  • 33.
    33 常用 docker 命令 •docker ps 列出容器 • docker exec 在容器中執行程式 • docker run 建立容器 • docker commit 從 Container 建立容器影像 • docker build 從 Dockerfile 建立容器影像 • docker rm 刪除容器 • docker images 列出容器影像 • docker rmi 刪除容器影像 • docker save 匯出容器影像成 tar 檔 • docker load 將匯出的容器影像匯入
  • 34.
    34 常用 PowerShell 命令 •Web Server (IIS) Administration Cmdlets – Get-WebSite 列出站台 – New-Website 建立站台 – Start-Website 啟動站台 – Stop-Website 停止站台 • 安裝 Windows 功能角色 – Get-WindowsFeature – Install-WindowsFeature • 其他好用命令 – Expand-Archive – Invoke-WebRequest ( wget )
  • 35.
    35 相關連結 • Windows ContainersDocumentation (繁體中文版) – 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?
  • 36.
    36 聯絡資訊 • The WillWill 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