容器驅動開發 - .NET Conf 2017 @ 台中
Transcript of 容器驅動開發 - .NET Conf 2017 @ 台中
![Page 1: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/1.jpg)
.NET Conf
Learn. Imagine. Build.
.NET Conf
容器驅動開發Container Driven Development.
Andrew Wu
![Page 2: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/2.jpg)
.NET Conf
![Page 3: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/3.jpg)
.NET Conf
IP2C.ReverseProxy
IP2C.WebAPI IP2C.WebAPI IP2C.Worker
Storage: IP2C_data
IP2C Rest API
Client
IP2C SDK
IP2C.org
Download
IP Database
https://github.com/andrew0928/IP2C.NET.Service
![Page 4: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/4.jpg)
.NET Conf
建立 IP2C solution
處理 IP資料庫的 LIB
存取遠端 IP2C API的Client SDK
提供 IP2C API的Web Apps
到 IP2C.org 更新資料檔的Worker
測試 IP2C.SDK, IP2C.NET 的單元測試案例
![Page 5: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/5.jpg)
.NET Conf
![Page 6: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/6.jpg)
.NET Conf
#1. 容器化的封裝
![Page 7: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/7.jpg)
.NET Conf
Virtual Machine (Manual or powershell)
安裝 windows server 2016
安裝 IIS & 相關元件
COPY IP2C.WebAPI
Configuration
Container Image (define: dockerfile)
Base Image: Microsoft/ASPNET:latest
COPY IP2C.WebAPI
(with default configuration)
直接定義 dockerfile, 可以根據別人已經定義好的 image 為基礎,加上自己定義的 action疊加上去 (layer)。要更新時只需要重新 build image,不需要重新安裝。
Container 內的環境已經受到控制,因此絕大部分的設定資訊都可以直接定好。其餘可以靠 container engine
在部署時重新導向即可,包含 network, volume, env var..
windowsservercore image: https://hub.docker.com/r/microsoft/windowsservercore/tags/
執行速度慢(分鐘 ~小時等級)
難以自動化(需要寫複雜的 script,或是乾脆
人工操作)
執行速度快(秒 ~分鐘等級)
自動化非常容易(定義 dockerfile)
![Page 8: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/8.jpg)
.NET Confwindowsservercore image: https://hub.docker.com/r/microsoft/windowsservercore/tags/
![Page 9: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/9.jpg)
.NET Conf
![Page 10: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/10.jpg)
.NET Conf
![Page 11: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/11.jpg)
.NET Conf
#2. 容器化的部署
![Page 12: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/12.jpg)
.NET Conf
![Page 13: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/13.jpg)
.NET Conf
Windows Container
IP2C.ReverseProxy
IP2C.WebAPI IP2C.WebAPI IP2C.Worker
Volume: IP2C_data
IP2C.WebAPI
172.24.225.100
172.24.227.83 172.24.234.90 172.24.230.185
![Page 14: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/14.jpg)
.NET Conf
![Page 15: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/15.jpg)
.NET Conf
![Page 16: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/16.jpg)
.NET Conf
Windows Container
IP2C.ReverseProxy
IP2C.WebAPI IP2C.WebAPI IP2C.Worker
Volume: IP2C_data
Docker Registry
NuGet Server
IP2C.SDK
IP2C.WebAPI
IP2C.Worker
![Page 17: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/17.jpg)
.NET Conf
![Page 18: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/18.jpg)
.NET Conf
![Page 19: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/19.jpg)
.NET Conf
Continuous Delivery Continuous Deployment
Continuous Integration
BUILD SHIP RUN
![Page 20: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/20.jpg)
.NET Conf
#3. 不可變的伺服器(Immutable Servers)
![Page 21: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/21.jpg)
.NET Conf
![Page 22: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/22.jpg)
.NET Conf
有多少是我們需要的?
(還不包括沒畫在架構圖裡的一堆工具跟服務…)
![Page 23: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/23.jpg)
.NET Conf
MY APPLICATION
如果一台 SERVER只服務我的 APPLICATION..
甚至是一百台 SERVER只服務我的 APP …
我還需要這麼 “完整”的 OS嗎?
APP裝好就不需要改了,連遠端管理都省了..
拿掉的服務越多,系統被攻擊的機會越少(效率也越好)
[思考]如果 STORAGE / DB 只歸我用,且有專屬連線,那還需要設定 “整合式驗證”嗎?
[思考] OS存在的價值,除了 LAUNCH APP之外還剩什麼功能?
![Page 24: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/24.jpg)
.NET Conf
![Page 25: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/25.jpg)
.NET Confhttp://martinfowler.com/bliki/ImmutableServer.html
"Change" 發生在Production Environment !
MIS + DEV's
JobMIS's Job ???'s Job ???'s Job
DEV's Job
(change code)
DEV's Job
(change code)
![Page 26: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/26.jpg)
.NET Conf
"Change" 發生在Build Environment !
CI-Tool's Job MIS's Job
DEV's Job
(change code)
![Page 27: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/27.jpg)
.NET Conf
![Page 28: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/28.jpg)
.NET Conf
![Page 29: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/29.jpg)
.NET Conf
![Page 30: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/30.jpg)
.NET Confhttps://stefanscherer.github.io/keep-your-windows-containers-up-to-date/
根本不用做Windows Update, 直接換新的 Base Image即可
![Page 31: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/31.jpg)
.NET Conf
V1.0 V1.1 V2.0
windows server core
10.0.14393.206
windows server core
10.0.14393.206
windows server core
10.0.14393.447
MyAPP 1.0 MyAPP 1.1 MyAPP 2.0
windows server core
10.0.14393.447
V1.1-OS447
改變 dockerfile即可升級 OS
(用 hotfix 的流程)
改變 dockerfile,即可升級 OS
![Page 32: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/32.jpg)
.NET Conf
#4. 跨版本的單元測試
![Page 33: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/33.jpg)
.NET Confhttps://blog.chmouel.com/2014/11/10/use-cases-for-docker-driven-development/
![Page 34: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/34.jpg)
.NET Confhttp://columns.chicken-house.net/2016/10/31/microservice5/
![Page 35: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/35.jpg)
.NET Conf
該怎麼測試 Load Balance 的組態?
該如何測試不同版本 API / SDK 的相容性?
![Page 36: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/36.jpg)
.NET Conf
舊版 新版
![Page 37: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/37.jpg)
.NET Conf
master V2.1.2.0 V3.0.0.0 V3.1.0
API
TEST
API
TEST
API
TEST
SDK SDK SDK
API (server) 可以容器化
測試程式也可以!
![Page 38: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/38.jpg)
.NET Conf
![Page 39: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/39.jpg)
.NET Confhttps://blogs.microsoft.com/firehose/2017/04/18/dockercon-2017-linux-containers-will-run-natively-on-windows-serer-with
![Page 40: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/40.jpg)
.NET Conf
![Page 41: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/41.jpg)
.NET Conf
Windows Server 2016
Windows
Server 2016Linux Kit
IP2C.
Worker
IP2C.
WebAPI
IP2C.
WebAPI
IP2C.
RevProxy
![Page 42: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/42.jpg)
.NET Confhttp://columns.chicken-house.net/2017/07/25/wc-swarm-labs2/
![Page 43: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/43.jpg)
.NET Conf
WCS1
Service: WebAPI
Service: ReverseProxy
Service: Worker
![Page 44: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/44.jpg)
.NET Conf
WCS1 WCS2 WCS3
Network: Ingress
LCS4
Service: WebAPI
Service: ReverseProxy
Service: Worker
![Page 45: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/45.jpg)
.NET Confhttp://columns.chicken-house.net/2017/08/05/what-cicd-do-you-need/
![Page 46: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/46.jpg)
.NET Conf
Q & A
![Page 47: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/47.jpg)
.NET Conf
Package Once,Run Everywhere!
![Page 48: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/48.jpg)
.NET Conf
![Page 49: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/49.jpg)
.NET Conf
www.facebook.com/andrew.blog.0928
![Page 50: 容器驅動開發 - .NET Conf 2017 @ 台中](https://reader034.fdocument.pub/reader034/viewer/2022042520/5a6502b47f8b9af3398b4d85/html5/thumbnails/50.jpg)