Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
微服務開發及容器化基礎介紹
Search
Brian
September 24, 2020
Programming
0
64
微服務開發及容器化基礎介紹
介紹微服務 (Microservices) 的概念及容器 (Docker) 基礎操作
Brian
September 24, 2020
Tweet
Share
More Decks by Brian
See All by Brian
Introduction of Git
brian90191
0
73
JavaScript 基礎入門
brian90191
0
35
Other Decks in Programming
See All in Programming
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.3k
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
190
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
300
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
930
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
270
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
380
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
200
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
290
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
430
AHC041解説
terryu16
0
310
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
360
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Agile that works and the tools we love
rasmusluckow
328
21k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
The Cult of Friendly URLs
andyhume
78
6.1k
Unsuck your backbone
ammeep
669
57k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Music & Morning Musume
bryan
46
6.3k
Optimizing for Happiness
mojombo
376
70k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
It's Worth the Effort
3n
183
28k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Transcript
微服務開發及容器化基礎介紹 Date: 09/24/2020 CSI TECHNOLOGY GROUP | CSI Taipei –
Dept. of Court Product Brian
什麼是微服務 (Microservices) • 微服務既是一種架構,也是編寫軟體的方法。 • 微服務可將應用程式分解成最小型且彼此獨立的元件。有別於 傳統單一的應用程式創建法將所有元件都設置於一處,微服務 是將所有元件分開,再一起運作以完成相同的任務,而其中每 一項元件或流程,都屬於一種微服務。 •
這種軟體開發方法重視細粒化、屬輕量級,並且能在多重應用 程式間共享類似的流程。 2
什麼是容器化技術 (Docker) • 容器技術為應用程式提供標準化的封裝、發行與部署流程,不 但讓應用程式之間可以得到更佳的隔離性,更能讓我們在不受 硬體、主機、作業系統、資料中心等等限制下,彈性的配置我 們的應用程式。 • 這幾年容器技術發展十分迅速,微服務化架構更是大量依賴容 器化基礎建設的幫助下,更容易實現
DevOps 與 CI / CD 等自 動化基礎建設。 3
4
環境準備 - 開啟 Hyper-V & Containers Turn Windows features on
or off → Check Hyper-V and Containers 5
環境準備 – 安裝套件管理工具 安裝 chocolatey 套件管理工具: 1. Install Now →
複製 PowerShell 指令 2. 使用系統管理員身分開啟 PowerShell 並貼上指令執行 6 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.p s1'))
環境準備 - 安裝 Windows 容器 使用 chocolatey 安裝 Docker Desktop
1. 從 chocolatey 的 packages 中找到 Docker Desktop 套件,複製安 裝指令並貼上 PowerShell 安裝 2. 建議同時安裝: • docker-compose (docker 工具,方便管理多個容器) • Kitematic (可以用視覺化的方式管理 docker) 3. 安裝 docker 並啟動後,查看版本 7 C:\Users\bye>docker version Client: Docker Engine - Community Version: 19.03.12 API version: 1.40 Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:43:18 2020 OS/Arch: windows/amd64 Experimental: false choco install docker-desktop
容器模式 • Linux Container • Windows Container • 在 Docker
按右鍵就可以看到選單中一項 switch to windows containers 可以針對 Windows / Linux 兩者進行切換動作, 預設是 Linux Containers 8
None
第一次 Docker 就上手 • 下載 Docker Image • 執行一個全新的容器,並且同時執行容器的 cmd
• dir 指令可以看到容器的目錄和自己電腦本機不同,因為這是在容器 的環境裡面,所以容器化的好處就是執行的過程中不會影響到目前正 在使用的主機環境 10 docker pull mcr.microsoft.com/windows/nanoserver:1809 docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd
容器的應用程式 • 觀念: ▪ 一個容器只能執行一個主要的應用程式,主要應用程式結束後容器就會停止 ▪ 一個容器可以有很多非主要的應用程式,且結束後容器不會停止 • 範例: 執行一個全新的容器,並且同時執行容器的主要應用程式
• 退出 cmd (退出容器的主要應用程式,容器則立刻停止) • 退出 cmd 但不停止容器的方式 – 按下 ctrl + P 然後 ctrl + Q 跳離容器,讓容器繼續在背景執行 • 範例: 執行其他非主要的應用程式,退出後容器不會停止 11 docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd exit docker exec –it (Container Name/ID) (應用程式名稱) -it 代表直接進入容器的 terminal (終端機)
查看 Docker 狀態 • 查看目前執行中的容器狀態 • 查看曾經執行過的容器狀態 12 docker ps
docker ps -a
常見的 Docker 執行生命週期和管理工具 • Container: 13 • Image: # 啟動容器
docker container run # 列出容器 docker container ls # 停止容器 docker container stop # 重啟容器 docker container start # 進入容器並執行主要的應用程式 docker container attach # 執行/掛載容器的應用程式 docker container exec # 刪除容器 docker container rm # 列出目前的映像檔 docker images # 列出映像檔 (等同 docker images) docker image ls # 檢視映像檔的內容 docker image inspect # 下載映像檔 docker image pull # 上傳映像檔至遠端空間 docker image push # 刪除本地的映像檔 docker image rm # 加上標籤名稱 docker image tag
啟動並執行容器 • docker run -d -p 80:80 REPOSITORYL:TAG -d: detach
模式 (不執行應用程式) -p: port mapping (前面的 port number 代表 local 的 ,後面是容器的) 14
DEMO: 建立 Windows IIS • 使用 microsoft-windows-servercore-iis (執行靜態檔案的 IIS) 1.
Pull Image 2. Run Image 3. 檢查 localhost:8080 看看 IIS 是否成功運行 15 docker pull mcr.microsoft.com/windows/servercore/iis:windowsservercore- ltsc2019 docker run -d -p 8080:80 mcr.microsoft.com/windows/servercore/iis:windowsservercore- ltsc2019
練習執行 IIS 容器並重新建立網頁 16 docker run -d -p 8080:80 mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
docker ps docker exec -it (Container Name/ID) cmd cd inetpub cd wwroot del * echo Hello world > index.html exit docker ps docker rm -f (Container Name/ID)
練習執行 ASP.NET 容器 • servercore 是用來執行靜態檔案的 IIS 如果是要用來執行 asp.net 的
IIS 需使用 microsoft-dotnet- framework-aspnet 17 # 下載 image docker pull mcr.microsoft.com/dotnet/framework/aspnet:4.8 # 執行 container docker run -d -p 8080:80 mcr.microsoft.com/dotnet/framework/aspnet:4.8 # 移動到 ASP.NET 專案目錄後,把整個專案本機的目錄和檔案複製進去 docker cp . (Container Name/ID):c:/inetpub/wwwroot/. # 執行 container 的 CMD,再去 wwwroot 就可以發現目錄確實被複製進去 docker exec -it (Container Name/ID) cmd
隔離模式設定 • docker cp 發生錯誤 – Error response from daemon:
filesystem operations against a running Hyper- V container are not supported • 解法: 18
使用 Dockerfile 自建 Docker Image • 在專案根目錄建立 Dockerfile • 建立
Docker Image 19 # 下載 base image From mcr.microsoft.com/dotnet/framework/aspnet:4.8 # 把目前根目錄的檔案複製進 container 的目錄 COPY . C:/Inetpub/wwwroot docker build –f .\Dockerfile –t testapp1:0.1 . • 如果沒有指定 Dockerfile 以外的檔案來建立 image 的話, –f .\Dockerfile 可以省略 • -t 代表貼 tag • 最後的 . 非常重要,代表目前目錄要送進 docker engine 進行建置的動作
執行自建的 Image • 執行建置好的 image 20 docker image ls docker
run –d –p 8080:80 testapp1:0.1
發行 Docker Image 至 Docker Hub • Docker Hub 是官方提供的
Docker Registry,所謂的 Docker Registry 就是一個讓大家可以 pull(下載)或是 push(上傳) image 的地方,把 image 上傳到 Docker Registry 後大家就可 以直接 pull 下來用,不用再根據 Dockerfile 自建出 image • 發行方式: 21 # 登入 Docker Hub docker login # 貼標籤,必須符合 Docker Hub 的命名規則 docker tag testapp1:0.1 userID/testapp1:0.1 # 推到 Docker Hub 上 docker push
其他參考資源 • 全面易懂的 Docker 指令大全 • 《Docker —— 從入門到實踐》正體中文版 •
用30天來介紹和使用 Docker 22
Q & A 23