如何建立 Ubuntu 18.04 + .NET Core 2.1 的 Docker Image ?
實務上我們會直接使用 .NET Core 2.1 的 microsoft/netcore
Docker image,但我們也可以使用 Ubuntu 18.04 為基底,自行撰寫 Dockerfile,練習建立包含 .NET Core 2.1 的 Docker image。
Version
macOS High Sierra 10.13.4
Docker for Mac 18.03-ce-mac65 (24312)
Ubuntu 18.04
.NET Core 2.1
建立 Dockerfile
Dockerfile
1 | FROM ubuntu |
根據 .NET Core 官方文件 Install .NET Core SDK on Linux Ubuntu 18.04,若要在 Ubuntu 18.04 安裝 .NET Core 2.1,必須依照這些步驟。
將這些步驟改寫在 Dockerfile 內。
第 1 行
1 | FROM ubuntu |
根據最新版 ubuntu 為基底 image。
第 3 行
1 | # Install Linux library dependency |
根據官網的 Install .NET Core SDK on Linux Ubuntu 18.04 所描述,若要在 Ubuntu 18.04 安裝 .NET Core,在 Ubuntu 還必須安裝以下 dependency:
- wget
- apt-transport-https
- gpg
第 7 行
1 | # Install microsoft.gpg |
根據官網的 Install .NET Core SDK on Linux Ubuntu 18.04 所描述,要安裝 .NET Core SDK 前,必須先將 microsoft.gpg
裝好。
15 行
1 | # Install .NET Core SDK |
所有的 dependency 與 microsoft.gpg
都裝好後,就可以正式安裝 .NET Core SDK 了。
19 行
1 | # Display Greeting |
成為 container 後,最後執行 echo Ubuntu 18.04 LTS with .NET Core 2.1
。
建立自己的 Image
1 | ~/UbuntuCore $ docker build -t myubuntu . |
進入 Dockerfile
所在的目錄,使用 docker build
建立自己的 image。
- -t : Docker image 的名稱
- . : 將目前目錄的
Dockerfile
建立成 image
1 | $ docker images |
docker build
的確幫我們建立了新的 myubuntu
image。
建立且執行 Container
1 | $ docker run --rm myubuntu |
使用 docker run
執行 myubuntu
image。
- –rm:執行完 container 後立即刪除,避免日後還要手動刪除 container
顯示剛剛在 Dockerfile
的 CMD [ "cat", "Ubuntu 18.04 LTS with .NET Core 2.1"]
。
顯示 Ubuntu 版本
1 | $ docker run --rm myubuntu cat /etc/lsb-release |
使用 docker run
執行剛剛建立的 image,並執行 cat /etc/lsb-release
顯示 Ubuntu 版本。
顯示 .NET Core 版本
1 | $ docker run --rm myubuntu dotnet --info |
使用 docker run
執行剛剛建立的 image,並執行 dotnet --info
顯示 .NET Core 版本。
Conclusion
- 以前使用 VM 時,若要自建 VM,最後會 export 出一大包 image,除了很佔空間外,還無法 git 版控;但若改用 Dockerfile 後,由於都是文字檔,檔案非常小,也可以很輕鬆 git 版控
- 實務上雖然會直接使用
microsoft/dotnet
Docker image,不過藉由此方式練習寫 Dockerfile 也很不錯,畢竟實務上會有很多機會要自己建立 Dockerfile
Sample Code
完整的範例可以在我的 GitHub 上找到