容器驅動開發 - .net conf 2017 @ 台中

50
.NET Conf Learn. Imagine. Build. .NET Conf 容器驅動開發 Container Driven Development. Andrew Wu

Upload: andrew-wu

Post on 22-Jan-2018

208 views

Category:

Software


4 download

TRANSCRIPT

Page 1: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Learn. Imagine. Build.

.NET Conf

容器驅動開發Container Driven Development.

Andrew Wu

Page 2: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 3: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.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 @ 台中

.NET Conf

Page 6: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

#1. 容器化的封裝

Page 7: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Confwindowsservercore image: https://hub.docker.com/r/microsoft/windowsservercore/tags/

Page 9: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 10: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 11: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

#2. 容器化的部署

Page 12: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 13: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Conf

Page 15: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 16: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Conf

Page 18: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 19: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Continuous Delivery Continuous Deployment

Continuous Integration

BUILD SHIP RUN

Page 20: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

#3. 不可變的伺服器(Immutable Servers)

Page 21: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 22: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

有多少是我們需要的?

(還不包括沒畫在架構圖裡的一堆工具跟服務…)

Page 23: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

MY APPLICATION

如果一台 SERVER只服務我的 APPLICATION..

甚至是一百台 SERVER只服務我的 APP …

我還需要這麼 “完整”的 OS嗎?

APP裝好就不需要改了,連遠端管理都省了..

拿掉的服務越多,系統被攻擊的機會越少(效率也越好)

[思考]如果 STORAGE / DB 只歸我用,且有專屬連線,那還需要設定 “整合式驗證”嗎?

[思考] OS存在的價值,除了 LAUNCH APP之外還剩什麼功能?

Page 24: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 25: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Conf

"Change" 發生在Build Environment !

CI-Tool's Job MIS's Job

DEV's Job

(change code)

Page 27: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 28: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 29: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 30: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Confhttps://stefanscherer.github.io/keep-your-windows-containers-up-to-date/

根本不用做Windows Update, 直接換新的 Base Image即可

Page 31: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Conf

#4. 跨版本的單元測試

Page 33: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Confhttps://blog.chmouel.com/2014/11/10/use-cases-for-docker-driven-development/

Page 34: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Confhttp://columns.chicken-house.net/2016/10/31/microservice5/

Page 35: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

該怎麼測試 Load Balance 的組態?

該如何測試不同版本 API / SDK 的相容性?

Page 36: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

舊版 新版

Page 37: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Conf

Page 39: 容器驅動開發 - .NET Conf 2017 @ 台中

.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 @ 台中

.NET Conf

Page 41: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Windows Server 2016

Windows

Server 2016Linux Kit

IP2C.

Worker

IP2C.

WebAPI

IP2C.

WebAPI

IP2C.

RevProxy

Page 42: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Confhttp://columns.chicken-house.net/2017/07/25/wc-swarm-labs2/

Page 43: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

WCS1

Service: WebAPI

Service: ReverseProxy

Service: Worker

Page 44: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

WCS1 WCS2 WCS3

Network: Ingress

LCS4

Service: WebAPI

Service: ReverseProxy

Service: Worker

Page 45: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Confhttp://columns.chicken-house.net/2017/08/05/what-cicd-do-you-need/

Page 46: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Q & A

Page 47: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Package Once,Run Everywhere!

Page 48: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

Page 49: 容器驅動開發 - .NET Conf 2017 @ 台中

.NET Conf

www.facebook.com/andrew.blog.0928

Page 50: 容器驅動開發 - .NET Conf 2017 @ 台中