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
74
微服務開發及容器化基礎介紹
介紹微服務 (Microservices) 的概念及容器 (Docker) 基礎操作
Brian
September 24, 2020
Tweet
Share
More Decks by Brian
See All by Brian
Introduction of Git
brian90191
0
88
JavaScript 基礎入門
brian90191
0
41
Other Decks in Programming
See All in Programming
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
高速開発のためのコード整理術
sutetotanuki
1
410
Python’s True Superpower
hynek
0
110
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
dchart: charts from deck markup
ajstarks
3
1k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
240
Package Management Learnings from Homebrew
mikemcquaid
0
230
組織で育むオブザーバビリティ
ryota_hnk
0
180
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
Featured
See All Featured
Bash Introduction
62gerente
615
210k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
37k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
120
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Raft: Consensus for Rubyists
vanstee
141
7.3k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
240
Agile that works and the tools we love
rasmusluckow
331
21k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Why Our Code Smells
bkeepers
PRO
340
58k
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