在Mac的Docker中运行DotNetCore2.0
最近學習Angular4,服務端準備使用DotNetCore API來實現,本文簡單介紹下在Mac中怎樣將DotNetCore程序部署在Docker中,并使用Nginx做反向代理讓程序可以跑起來。
具體步驟如下
安裝Docker
拉取DotNetCore鏡像
使用VS For Mac創建DotNetCore應用
發布應用到Docker
安裝Nginx
配置Nginx代理Docker中的DotNetCore應用
常用命令
docker pull 鏡像名稱 #拉取鏡像 docker rm -f 容器id #強制刪除容器 docker rmi imageid #刪除鏡像 docker logs -f 容器ID #查看容器日志 docker ps -a #查看所有的容器 docker attach 容器id #進入到容器 docker build -t s2appadmin . #使用Dockerfile文件編譯Docker dotnet publish #發布dotnetcore應用 dotnet run #啟動dotnetcore應用 dotnet *.dll #在發布后的目錄中執行dotnet 程序集的dll文件名,啟動應用 nginx -v #查看nginx版本 nginx -s reload #重新加載nginx nginx -s stop #停止nginx |
Mac中安裝Docker
在下面鏈接中下載Mac版的Docker安裝文件進行Docker的安裝
https://docs.docker.com/docker-for-mac/install/
安裝成功后,在系統的頂欄中可以看到下圖代表安裝成功:
在終端中執行docker --version?查看下Doker的版本
fengwei@localhost:~$ docker --version Docker version 17.06.2-ce, build cec0b72 |
在Docker中拉取NetCore鏡像
直接執行下面命令,拉取最新版本的microsoft/dotnet鏡像
docker pull microsoft/dotnet:latest |
啟動一個容器實例
docker run -itd -p 5000:5000 microsoft/dotnet |
因為DotNetCore的默認端口監聽為5000,所以將容器的5000端口映射到宿主機到5000端口。啟動成功后執行docker ps -a?,如一切順利,可以看到如下圖所示:
主要關注STATUS,狀態為up表示是正常啟動,否則通過docker logs -f 容器id來查看相關日志,通常可以看到容器沒有啟動成功的錯誤日志,然后Google之。
創建DotNetCore應用
在創建應用之前先將VS For Mac升級到最新版本,因為稍微老一點的版本不支持NetCore 2.0,即便是安裝了最新的dotnet-sdk-2.0.0,最后發布的程序運行在Docker中時會遇到各種問題。所以為了避免麻煩,先升級VS。
在VS中創建新項目,選擇API項目:
我的API項目的名稱為S2AppAdmin,在終端中進入到項目的目錄中,執行dotnet publish,如下圖:
在終端中進入到publish目錄中,執行dotnet S2AppAdmin.dll,如下圖:
可以看出已經監聽了5000端,現在在瀏覽器中輸入http://localhost:5000/api/values/get,可以看到API接口的返回值已經在界面顯示了。
發布應用到Docker
在網上找了很多資料,都是使用Dockerfile來發布應用到Docker中,用此方法試過很多次,但沒有運行成功,后面找到原因再單獨開篇來介紹,下面介紹另一種方法。
前面已經使用docker run?命令運行起一個Docker實例來,容器id為:3be4cfc30126,執行下面命令進入到容器中:
docker attach 3be4cfc30126 |
進入到home目錄后,使用mkdir s2app命令創建s2app目錄,如下圖:
執行exit,退出容器回到宿主環境,進入到S2AppAdmin項目的目錄中,執行下面命令將publish的文件復制到容器中
docker cp bin/Debug/netcoreapp2.0/publish/ hardcore_leavitt:/home/s2app/ |
注意:上面的hardcore_leavitt為容器的名稱。
再次執行docker attach 3be4cfc30126進入容器,在publish目錄中執行dotnet S2AppAdmin.dll,如下圖:
這時在宿主環境中訪問http://localhost:5000/api/values/get,發現無法訪問,說明容器和宿主沒有打通。
在VS中打開Program.cs文件,添加.UseUrls("http://*:5000"),如下圖:
在項目目錄下執行下面命令:
dotnet publish docker cp bin/Debug/netcoreapp2.0/publish/ hardcore_leavitt:/home/s2app/ |
在容器內執行:
dotnet S2APPAdmin.dll |
再在瀏覽器中訪問http://localhost:5000/api/values/get,發現結果已經可以正常顯示了。
Nginx安裝
使用brew來安裝Nginx,至于什么是brew,自行去Google。下面先看幾個brew的常用命令
brew search nginx #brew 搜索軟件 brew install nginx #brew 安裝軟件 brew uninstall nginx #brew 卸載軟件 sudo brew info nginx #查看安裝信息 brew list #查看已經安裝的軟件 |
安裝成功后,輸入nginx -v,可以看到nginx的版本信息
在/usr/local/etc/nginx目錄中找到并打開nginx.conf文件,添加如下代碼:
server { listen ? ? ? 8000; #listen ? ? ? somename:8080; server_name ?localhost; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } |
如下圖:
正常情況下,在瀏覽器中輸入http://localhost:8000/api/values/get,可以看到API的輸出結果。
常見問題
問題:nginx-1.8.0 already installed, it’s just not linked
解決:執行命令:brew link nginx |
問題:出現如下錯誤信息:
Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink share/man/man8/nginx.8 /usr/local/share/man/man8 is not writable. |
解決: /usr/local/share/man/man8 ?設置權限 |
相關文章:?
.NET Core 2.0 正式發布信息匯總
.NET Standard 2.0 特性介紹和使用指南
.NET Core 2.0 的dll實時更新、https、依賴包變更問題及解決
.NET Core 2.0 特性介紹和使用指南
Entity Framework Core 2.0 新特性
體驗 PHP under .NET Core
.NET Core 2.0使用NLog
升級項目到.NET Core 2.0,在Linux上安裝Docker,并成功部署
解決Visual Studio For Mac Restore失敗的問題
ASP.NET Core 2.0 特性介紹和使用指南
.Net Core下通過Proxy 模式 使用 WCF
.NET Core 2.0 開源Office組件 NPOI
ASP.NET Core - Razor頁面之Handlers處理方法
ASP.NET Core Razor頁面 vs MVC
Razor Page–Asp.Net Core 2.0新功能 ?Razor Page介紹
ASP.Net Core 2.0中的Razor Page不是WebForm
Error Handling in ASP.NET Core
ASP.NET Core Razor 視圖組件
原文地址:http://fwhyy.com/2017/09/run-netcore-two-in-mac-docker/
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在Mac的Docker中运行DotNetCore2.0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Entity Framework Cor
- 下一篇: 分布式ID自增算法 Snowflake