在Mac的Docker中运行DotNetCore2.0
最近學(xué)習(xí)Angular4,服務(wù)端準(zhǔn)備使用DotNetCore API來實(shí)現(xiàn),本文簡單介紹下在Mac中怎樣將DotNetCore程序部署在Docker中,并使用Nginx做反向代理讓程序可以跑起來。
具體步驟如下
安裝Docker
拉取DotNetCore鏡像
使用VS For Mac創(chuàng)建DotNetCore應(yīng)用
發(fā)布應(yīng)用到Docker
安裝Nginx
配置Nginx代理Docker中的DotNetCore應(yīng)用
常用命令
docker pull 鏡像名稱 #拉取鏡像 docker rm -f 容器id #強(qiáng)制刪除容器 docker rmi imageid #刪除鏡像 docker logs -f 容器ID #查看容器日志 docker ps -a #查看所有的容器 docker attach 容器id #進(jìn)入到容器 docker build -t s2appadmin . #使用Dockerfile文件編譯Docker dotnet publish #發(fā)布dotnetcore應(yīng)用 dotnet run #啟動dotnetcore應(yīng)用 dotnet *.dll #在發(fā)布后的目錄中執(zhí)行dotnet 程序集的dll文件名,啟動應(yīng)用 nginx -v #查看nginx版本 nginx -s reload #重新加載nginx nginx -s stop #停止nginx |
Mac中安裝Docker
在下面鏈接中下載Mac版的Docker安裝文件進(jìn)行Docker的安裝
https://docs.docker.com/docker-for-mac/install/
安裝成功后,在系統(tǒng)的頂欄中可以看到下圖代表安裝成功:
在終端中執(zhí)行docker --version?查看下Doker的版本
fengwei@localhost:~$ docker --version Docker version 17.06.2-ce, build cec0b72 |
在Docker中拉取NetCore鏡像
直接執(zhí)行下面命令,拉取最新版本的microsoft/dotnet鏡像
docker pull microsoft/dotnet:latest |
啟動一個容器實(shí)例
docker run -itd -p 5000:5000 microsoft/dotnet |
因?yàn)镈otNetCore的默認(rèn)端口監(jiān)聽為5000,所以將容器的5000端口映射到宿主機(jī)到5000端口。啟動成功后執(zhí)行docker ps -a?,如一切順利,可以看到如下圖所示:
主要關(guān)注STATUS,狀態(tài)為up表示是正常啟動,否則通過docker logs -f 容器id來查看相關(guān)日志,通常可以看到容器沒有啟動成功的錯誤日志,然后Google之。
創(chuàng)建DotNetCore應(yīng)用
在創(chuàng)建應(yīng)用之前先將VS For Mac升級到最新版本,因?yàn)樯晕⒗弦稽c(diǎn)的版本不支持NetCore 2.0,即便是安裝了最新的dotnet-sdk-2.0.0,最后發(fā)布的程序運(yùn)行在Docker中時會遇到各種問題。所以為了避免麻煩,先升級VS。
在VS中創(chuàng)建新項(xiàng)目,選擇API項(xiàng)目:
我的API項(xiàng)目的名稱為S2AppAdmin,在終端中進(jìn)入到項(xiàng)目的目錄中,執(zhí)行dotnet publish,如下圖:
在終端中進(jìn)入到publish目錄中,執(zhí)行dotnet S2AppAdmin.dll,如下圖:
可以看出已經(jīng)監(jiān)聽了5000端,現(xiàn)在在瀏覽器中輸入http://localhost:5000/api/values/get,可以看到API接口的返回值已經(jīng)在界面顯示了。
發(fā)布應(yīng)用到Docker
在網(wǎng)上找了很多資料,都是使用Dockerfile來發(fā)布應(yīng)用到Docker中,用此方法試過很多次,但沒有運(yùn)行成功,后面找到原因再單獨(dú)開篇來介紹,下面介紹另一種方法。
前面已經(jīng)使用docker run?命令運(yùn)行起一個Docker實(shí)例來,容器id為:3be4cfc30126,執(zhí)行下面命令進(jìn)入到容器中:
docker attach 3be4cfc30126 |
進(jìn)入到home目錄后,使用mkdir s2app命令創(chuàng)建s2app目錄,如下圖:
執(zhí)行exit,退出容器回到宿主環(huán)境,進(jìn)入到S2AppAdmin項(xiàng)目的目錄中,執(zhí)行下面命令將publish的文件復(fù)制到容器中
docker cp bin/Debug/netcoreapp2.0/publish/ hardcore_leavitt:/home/s2app/ |
注意:上面的hardcore_leavitt為容器的名稱。
再次執(zhí)行docker attach 3be4cfc30126進(jìn)入容器,在publish目錄中執(zhí)行dotnet S2AppAdmin.dll,如下圖:
這時在宿主環(huán)境中訪問http://localhost:5000/api/values/get,發(fā)現(xiàn)無法訪問,說明容器和宿主沒有打通。
在VS中打開Program.cs文件,添加.UseUrls("http://*:5000"),如下圖:
在項(xiàng)目目錄下執(zhí)行下面命令:
dotnet publish docker cp bin/Debug/netcoreapp2.0/publish/ hardcore_leavitt:/home/s2app/ |
在容器內(nèi)執(zhí)行:
dotnet S2APPAdmin.dll |
再在瀏覽器中訪問http://localhost:5000/api/values/get,發(fā)現(xiàn)結(jié)果已經(jīng)可以正常顯示了。
Nginx安裝
使用brew來安裝Nginx,至于什么是brew,自行去Google。下面先看幾個brew的常用命令
brew search nginx #brew 搜索軟件 brew install nginx #brew 安裝軟件 brew uninstall nginx #brew 卸載軟件 sudo brew info nginx #查看安裝信息 brew list #查看已經(jīng)安裝的軟件 |
安裝成功后,輸入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的輸出結(jié)果。
常見問題
問題:nginx-1.8.0 already installed, it’s just not linked
解決:執(zhí)行命令:brew link nginx |
問題:出現(xiàn)如下錯誤信息:
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 ?設(shè)置權(quán)限 |
相關(guān)文章:?
.NET Core 2.0 正式發(fā)布信息匯總
.NET Standard 2.0 特性介紹和使用指南
.NET Core 2.0 的dll實(shí)時更新、https、依賴包變更問題及解決
.NET Core 2.0 特性介紹和使用指南
Entity Framework Core 2.0 新特性
體驗(yàn) PHP under .NET Core
.NET Core 2.0使用NLog
升級項(xiàng)目到.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社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的在Mac的Docker中运行DotNetCore2.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Entity Framework Cor
- 下一篇: ASP.NET Core中为指定类添加W