今天會安裝Docker,使用dotnet core 製作Webapi, 並且將它包成docker container,並在日後能跑在 Kubernetes 上。教學大綱如下:
在建立 Docker Image 之前,必須先在本機上安裝 Docker。Docker 支援許多種平台,在官網上也列出所有支援的平台,在這邊筆者選擇 Mac 的版本。
下載後,點擊安裝,一直按下一步,安裝完後在status bar看到一隻小鯨魚的符號就代表裝好。
並且可以查看目前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
我們可以在本機端新增一個資料夾,並且新增一個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"]
我們將上述建立起來的Webapi Application包成 Docker Image。 首先要該專案底下加入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
在該專案底下建好Dockerfile後執行以下指令
$ docker build .
建立好後,可以查詢製作好的Image
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> ca5ea1b4ba20 About a minute ago 1.96GB
在包好 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