- ASP.NET 5 更名為 ASP.NET Core 1.0
- .NET Core 更名為 .NET Core 1.0
- Entity Framework 7 更名為 Entity Framework Core 1.0 或者簡稱 EF Core 1.0
現在伴隨著ASP.NET Core 1.0 RC2版的更新速度,許多官方文件都跟不上,還停留在RC1版的使用方式上(RC1版是繼Beta版之後第一個釋出的穩定版本)。RC1和RC2的區別在於RC1版使用dnvm、dnx來restore packages和run(dnu是包含在dnx中的),而RC2版會基於.NET Core CLI,使用dotnet命令來進行building,compiling, NuGet package management, running, testing。
如果想了解更多ASP.NET Core 1.0 的釋出進度和里程碑可以檢視:ASP.NET Core 1.0 Schedule and Roadmap。就目前而言,在某些系統中我們已經可以遺棄mono,只使用.NET Core 和.NET Core CLI 就可以提供對.Net程式進行生成編譯執行環境(同時包含.NET Core 和.NET Core CLI的.NET Core SDK二進位制包,可以在這裡下載)。
至於mono的未來,微軟的SocttHunter和Scott Hasnselman說到:切換到MIT開源許可協議的mono將作為公司未來構建一個統一.NET庫的計劃中的一部分,瞭解詳情。可見開源的mono會逐步融入.NET Core體系中。
- .NET Core SDK=.Net Core+.NET Core command-line(簡稱CLI.NET CLI.NET Core CLI,dotnet commands)
- .NET Core=基礎類庫.NET Core Framework(CoreFX)+執行時.NET Core Runtime(CoreCLR)+編譯器管理(如管理編譯器Roslyn)+More
本文章主要介紹ASP.NET Core 1.0 RC2版的跨平臺部署,(【部署環境】作為第一步,有助於理解程式的執行環境和機理)。如果想了解跨平臺部署RC1版,請檢視
1、環境
2、安裝docker
首先檢視CentOS的核心版本(CentOS7系統必須為64位,核心必須3.10及以上)
1 2 |
uname -r 3.10.0-229.el7.x86_64 |
更新已經安裝的包
1 |
sudo yum update |
安裝docker
1 |
curl -fsSL https://get.docker.com/ | sh |
啟動docker
1 |
sudo service docker start 或 systemctl start docker |
執行docker hello world demo
1 |
sudo docker run hello-world |
3、建立docker使用者組
(2) sudo usermod -aG docker
your_username(你的使用者名稱)(3) 登出再登入控制檯
(4) 不帶sudo執行docker run hello-world,看是否正確輸出Hello world
(5) 設定開機啟動sudo chkconfig docker on 或 systemctl enable docker
4、 docker相關概念
-P
或 -p
引數來指定埠對映。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
docker images //顯示所有映象檔案 docker ps -q -a //顯示所有容器 docker run -it --name dn_container -d -p 5000:5000 microsoft/dotnet:latest //新增一個容器用於載入 microsoft/dotnet:latest映象檔案,-p host port:container port docker run -it --name dn_container -d -p 127.0.0.1:5000:5000 microsoft/dotnet:latest docker start dn_container //啟動容器 docker attach dn_container //關聯並進入啟動容器,需要先啟動容器 docker stop dn_container //停止容器 docker kill $(docker ps -a -q) //強制停止所有容器 docker rm $(docker ps -a -q) //刪除所有容器 doker commit ContainerID NewImageName //將容器裡的內容提交為新的映象檔案 docker rmi -f 7d9495d03763 //刪除所有容器 //標記映象,push到Docker Hub docker images docker tag a66b7258f574 sobit17/sobit-dotnet:1.0.0-beta-002252 docker images docker login --username=test --email=test@qq.com docker push sobit17/sobit-dotnet |
5、製作HelloMvc image
1 2 3 4 |
mkdir app cd app git clone https://github.com/aspnet/cli-samples.git cd cli-samples |
需要顯式指定HelloMvc的埠(即使指定的是5000埠),目前嘗試過不加下面這段程式碼,發現預設的5000並不起作用
1 2 |
//拷貝命令 cp -p /root/app/cli-samples/NuGet.Config /root/app/cli-samples/HelloMvc/NuGet.Config |
- dotnet:0.0.1-alpha
- dotnet:0.0.1-alpha-onbuild
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
FROM microsoft/dotnet:latest RUN mkdir -p /webapp COPY . /webapp WORKDIR /webapp RUN ["dotnet", "restore"] RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && sudo make install \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600 ENTRYPOINT ["dotnet", "run"] |
(2)基於dotnet:0.0.1-alpha-onbuild
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
FROM microsoft/dotnet:0.0.1-alpha-onbuild RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && sudo make install \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600 |
由於.NET Core時刻在更新,所以導致官網NET CLI Preview Docker image 提供的dotnet image更新不及時而在執行dotnet restore時候會報錯:unknown keyword platform(主要是dotnet image內部的
1 2 3 4 5 |
mkdir test cd test it clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore |
檢視是否報錯
1 |
cd ~rm -r test |
(2)解決方案
1 |
docker run --name dotnet_container -it microsoft/dotnet:0.0.1-alpha |
1 2 |
docker start dotnet_container dokcer attach dotnet_container |
檢視.NET Core版本(dotnet image中使用的是Ubuntu14.04系統)
1 2 3 |
dotnet --version 或 dotnet --info |
1 2 3 |
apt-get update wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-ubuntu-x64.latest.tar.gz tar -zxf dotnet-dev-ubuntu-x64.latest.tar.gz -C /usr/bin |
或
1 2 3 4 |
apt-get update wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-ubuntu-x64.latest.tar.gz tar -zxf dotnet-dev-ubuntu-x64.latest.tar.gz ln -s /dn_new/dotnet /usr/bin/dotnet |
接下來執行下面命令
1 2 3 4 |
dotnet --info //檢視版本 exit //退出容器 docker images //查詢dotnet_container 的ConrainerID docker commit 3a09b2588478(ContainerID) dotnet_new(new image name) //commit成一個新的image |
至此base image製作完畢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
FROM dotnet_new 或 sobit17/sobit-dotnet:1.0.0-beta-002252 RUN mkdir -p /webapp COPY . /webapp WORKDIR /webapp RUN ["dotnet", "restore"] ##備註:安裝libuv這一過程其實可以在製作dotnet_new映象時也安裝進去,就不需要下面這段【註釋在Dockerfile中需刪掉】 RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && sudo make install \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600 ENTRYPOINT ["dotnet", "run"] |
所有把HelloMvc製作成image的資料已經準備完畢。
1 |
docker build -t hellomvc-image . //記得命令最後有'.' |
- 編譯試執行:docker run –rm -w /webapp hellomvc-image
- 執行:docker run -t –name web_container -d -p 5100:5600 hellomvc-image
二、在CentOS 7中執行
1、環境
2、安裝.NET Core SDK
1 2 3 4 |
sudo yum updatemkdir dn_cli cd dn_cli wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-centos-x64.latest.tar.gz tar -zxf dotnet-dev-centos-x64.latest.tar.gz |
嘗試執行命令:. /dotnet
提示錯誤:
Failed to load /root/dotnet/bin/libcoreclr.so, error: libunwind.so.8: cannot open shared object file: No such file or directory
解決方法:
yum install -y libunwind
嘗試執行命令:. /dotnet
提示錯誤:
Failed to initialize CoreCLR, HRESULT: 0x80131500
解決方法:
yum install -y icu
嘗試執行命令:. /dotnet –info,正常。
永久儲存環境變數
找到/etc/profile檔案(當使用者第一次登入時,該檔案被執行.),在最後面新增:
3、下載cli-samples的HelloMvc例子
1 2 3 4 5 6 7 |
cd ~sudo yum -y install git mkdir app cd app git clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore cd HelloMvc |
需要顯式指定HelloMvc的埠(即使指定的是5000埠),目前嘗試過不加下面這段程式碼,發現預設的5000並不起作用
4、編譯執行HelloMvc
將執行命令的當前目錄定位到HelloMvc,並執行下面命令
1、安裝Ubuntu Installers
1 2 3 4 5 6 7 8 9 10 |
apt-get updatemkdir dn_cli cd dn_cli wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-host-ubuntu-x64.latest.deb wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-sharedframework-ubuntu-x64.latest.deb wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-sdk-ubuntu-x64.latest.deb //安裝 dpkg -i dotnet-host-ubuntu-x64.latest.deb dpkg -i dotnet-sharedframework-ubuntu-x64.latest.deb dpkg -i dotnet-sdk-ubuntu-x64.latest.deb//如果執行上述安裝語句後提示缺少依賴包,可以執行下面命令會自動補全依賴包,然後再重新執行報錯的安裝語句apt-get -f install |
2、下載cli-samples的HelloMvc例子
1 2 3 4 5 6 7 |
cd ~apt-get -y install git mkdir app cd app git clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore cd HelloMvc |
需要顯式指定HelloMvc的埠(即使指定的是5000埠),目前嘗試過不加下面這段程式碼,發現預設的5000並不起作用
3、編譯執行HelloMvc
1 |
dotnet run |
開啟瀏覽器 http://IP:5600(防火牆和檢視網路相關命令請檢視本篇文章第四點)
四、其他
1 2 3 4 5 6 |
systemctl status firewalld或firewalld.service ##檢視firewalld是否啟動。active(running)代表啟動 systemctl start firewalld ##如果firewalld沒啟動,可以使用此命令啟動 systemctl enable firewalld ##設定為隨機器啟動 systemctl stop firewalld ##關閉firewalld systemctl disable firewalld ##清除隨機器啟動 systemctl restart firewalld ##重啟firewalld |
1 2 3 4 5 6 7 8 9 10 11 12 |
firewall-cmd --state ##檢視防火牆狀態,是否是running firewall-cmd --list-all ##檢視所有規則 firewall-cmd --reload ##重新載入配置,比如新增規則之後,需要執行此命令 firewall-cmd --get-zones ##列出支援的zone firewall-cmd --get-services##列出支援的服務,在列表中的服務是放行的 firewall-cmd --query-service ftp##檢視ftp服務是否支援,返回yes或者no firewall-cmd --add-service=ftp ##臨時開放ftp服務 firewall-cmd --add-service=ftp --permanent##永久開放ftp服務 firewall-cmd --add-service=http --permanent##永久開放http服務 firewall-cmd --remove-service=ftp --permanent##永久移除ftp服務 firewall-cmd --add-port=80/tcp --permanent ##永久新增80埠 firewall-cmd --zone=public --add-port=80/tcp --permanent ##--zone #作用域 |
1 2 3 4 5 6 7 8 9 10 11 |
iptables -L -n --line-number #檢視防火牆的規則鏈 iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT iptables -I INPUT -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW -j ACCEPT iptables -A INPUT -i lo -j ACCEPT #測試不加此條會導致mysql在內部無法連線 檢視/etc/sysconfig/iptables檔案(記錄著防火牆的規則鏈) 如果沒有這個檔案,請執行下面命令儲存 iptables-save > /etc/sysconfig/iptables 檢視儲存後的規則 cat /etc/sysconfig/iptables |
4、部分網路埠查詢命令
1 2 3 |
netstat -tunlp -a # 檢視所有網路埠情況 netstat -l -n #檢視監聽(Listen)的埠,-n 代表顯示埠數字而不是名稱 netstat -antp #檢視所有建立的TCP連線 |
相關資料:
- Getting started with .NET Core
- Running ASP.NET 5 applications in Linux Containers with Docker
- Get Started with Docker Engine for Linux
- .NET CLI Preview Docker Image
- Installing ASP.NET 5 On Linux
- Docker Dockerfile詳解
- 最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2嚐鮮】
- ASP.NET Core 1.0 Hello World
- CentOS 7.1下安裝dotnet core