iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
1
Kubernetes

Kubernetes~成為Devops工程師的必經試煉系列 第 3

Day3 dotnet Core Webapi on Docker

  • 分享至 

  • xImage
  •  

前言

今天會安裝Docker,使用dotnet core 製作Webapi, 並且將它包成docker container,並在日後能跑在 Kubernetes 上。教學大綱如下:

  1. 安裝Docker
  2. 建立dotnet core Webapi 專案
  3. 建立Docker Image
  4. 在本機運行Container

安裝Docker

在建立 Docker Image 之前,必須先在本機上安裝 Docker。Docker 支援許多種平台,在官網上也列出所有支援的平台,在這邊筆者選擇 Mac 的版本。

下載後,點擊安裝,一直按下一步,安裝完後在status bar看到一隻小鯨魚的符號就代表裝好。
https://ithelp.ithome.com.tw/upload/images/20181017/20111882bkuayqKA7A.png

並且可以查看目前docker的版本與狀態

$docker version 
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:21:31 2018
 OS/Arch:           darwin/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:29:02 2018
  OS/Arch:          linux/amd64
  Experimental:     true

建立dotnet core Webapi 專案

我們可以在本機端新增一個資料夾,並且新增一個webapi專案

mkdir mywebapi
dotnet new webapi

會在該目錄底下建立一個dotnet core webapi 的Project
這時將該專案執行起來,他會執行完restore後將該專案run起來

dotnet run

會在localhost:5000 起一個Webapi的Application,
http://localhost:5000/api/values
則會顯示

["value1","value2"]

建立Docker Image

我們將上述建立起來的Webapi Application包成 Docker Image。 首先要該專案底下加入Dockerfile.

Dockerfile

將程式包成Image時,都需要有一個 Dockerfile 來描述包裝過程

FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:2.0-aspnetcore-runtime

WORKDIR /app

COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "webapi.dll"]

  • FROM microsoft/dotnet:2.0-sdk AS build

    這行會載入程式需要的執行環境,會根據不同的需求下載不同的映像檔,這裡是指 microsoft/dotnet:2.0

  • WORKDIR /app

    在這個 Docker 中的 Linux 即將會建立一個目錄 /app

  • COPY *.csproj ./

    代表會將本機端與 *.csproj 同一層的所有檔案加到 Linux 的 /app 目錄底下

  • RUN dotnet restore

    執行dotnet restore,將相依的檔案下載下來

  • COPY . ./

    將所有檔案加到 Linux 的 /app 目錄底下

  • RUN dotnet publish -c Release -o out
    Publish目前的專案**

  • FROM microsoft/dotnet:2.0-aspnetcore-runtime

    建立run time的 Image

  • WORKDIR /app

    在這個 Docker 中的 Linux 即將會建立一個目錄 /app

  • COPY --from=build-env /app/out .

 將build好的專案複製到/app/out目錄底下

  • ENTRYPOINT ["dotnet", "webapi.dll"]

    設定進入點為webapi.dll

Docker Build

在該專案底下建好Dockerfile後執行以下指令

$ docker build . 

建立好後,可以查詢製作好的Image

$ docker image ls
REPOSITORY                   TAG                  IMAGE ID            CREATED              SIZE
<none>                       <none>               ca5ea1b4ba20        About a minute ago   1.96GB

在本機上運行containerized app

在包好 Docker Image 之後,我們可以先在本機上透過 docker指令 跑起我們的 Docker Container。記住你剛剛的 Docker Image ID,並輸入指令 docker run

在這之前要輸入以下指令,以免發生錯誤

docker container stop stoic_goldstine
docker container rm stoic_goldstine

現在我們可以執行以下的指令,將包好的Application 執行起來

docker run --name core-api --env ASPNETCORE_ENVIRONMENT=Development -p 80:80 core-api:latest

現在你可以在
http://localhost/api/values
看到你製作好的Docker Container

參考文章

1.Build a REST API with .NET Core 2 and run it on Docker Linux container

2.Beginning .NET Core development with docker on Linux, Part 1


上一篇
Day2 安裝Kubernetes與相關工具
下一篇
Day4 在Minikube 上 執行你的 Docker container
系列文
Kubernetes~成為Devops工程師的必經試煉17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言