Upgrade to Pro — share decks privately, control downloads, hide ads and more …

微服務開發及容器化基礎介紹

Brian
September 24, 2020

 微服務開發及容器化基礎介紹

介紹微服務 (Microservices) 的概念及容器 (Docker) 基礎操作

Brian

September 24, 2020
Tweet

More Decks by Brian

Other Decks in Programming

Transcript

  1. 4

  2. 環境準備 – 安裝套件管理工具 安裝 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'))
  3. 環境準備 - 安裝 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
  4. 容器模式 • Linux Container • Windows Container • 在 Docker

    按右鍵就可以看到選單中一項 switch to windows containers 可以針對 Windows / Linux 兩者進行切換動作, 預設是 Linux Containers 8
  5. 第一次 Docker 就上手 • 下載 Docker Image • 執行一個全新的容器,並且同時執行容器的 cmd

    • dir 指令可以看到容器的目錄和自己電腦本機不同,因為這是在容器 的環境裡面,所以容器化的好處就是執行的過程中不會影響到目前正 在使用的主機環境 10 docker pull mcr.microsoft.com/windows/nanoserver:1809 docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd
  6. 容器的應用程式 • 觀念: ▪ 一個容器只能執行一個主要的應用程式,主要應用程式結束後容器就會停止 ▪ 一個容器可以有很多非主要的應用程式,且結束後容器不會停止 • 範例: 執行一個全新的容器,並且同時執行容器的主要應用程式

    • 退出 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 (終端機)
  7. 常見的 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
  8. 啟動並執行容器 • docker run -d -p 80:80 REPOSITORYL:TAG -d: detach

    模式 (不執行應用程式) -p: port mapping (前面的 port number 代表 local 的 ,後面是容器的) 14
  9. 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
  10. 練習執行 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)
  11. 練習執行 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
  12. 隔離模式設定 • docker cp 發生錯誤 – Error response from daemon:

    filesystem operations against a running Hyper- V container are not supported • 解法: 18
  13. 使用 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 進行建置的動作
  14. 發行 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