微軟在其官方網站 - .NET Core 中提供了各類平臺下 .NET Core 環境的搭建方法,其中包括了 Windows、Linux、Mac 以及 Docker 。其代碼託管在GitHub - dotnet/cli。若是你使用Docker進行部署的話,微軟官方也提供了相應的已經搭建好環境的官方鏡像:microsoft/dotnet 和 microsoft/dotnet-preview,並且針對不一樣的用途發佈了不一樣的版本,即鏡像的標籤不一樣,這裏用的是 microsoft/dotnet:latest
。其鏡像構建文件 Dockerfile。接下來是個人一些操做記錄。
部署的demo文件:點擊下載;git
這裏我選擇的操做系統:Ubuntu Server 16.04 LTS,也可點擊這裏直接下載;
接下來須要在實體機或者虛擬機上進行 Ubuntu Server 16.04 LTS 的安裝;
緊接着就是要搭建 .NET Core 環境:github
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update
若是現有環境中已安裝有 .NET Core ,請先用下面的腳本進行卸載清理:docker
#!/usr/bin/env bash # # Copyright (c) .NET Foundation and contributors. All rights reserved. # Licensed under the MIT license. See LICENSE file in the project root for full license information. # DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" current_user=$(whoami) if [ $current_user != "root" ]; then echo "$(basename "$0") uninstallation script requires superuser privileges to run" exit 1 fi host_package_name="dotnet-host" remove_all(){ apt-get purge -y $host_package_name } is_dotnet_host_installed(){ local out="$(dpkg -l | grep $host_package_name)" [ -z "$out" ] } is_dotnet_host_installed [ "$?" -eq 0 ] && echo "Unable to find dotnet installation to remove." \ && exit 0 remove_all [ "$?" -ne 0 ] && echo "Failed to remove dotnet packages." && exit 1 is_dotnet_host_installed [ "$?" -ne 0 ] && \ echo "dotnet package removal succeeded but appear to still be installed. Please file an issue at https://github.com/dotnet/cli" && \ exit 1 echo "dotnet package removal succeeded." exit 0
安裝 .NET Core SDK:ubuntu
sudo apt-get install dotnet-dev-1.0.0-preview2-003121
查看 .NET Core 的版本信息:segmentfault
dotnet --version
作一個簡單的demo並編譯運行:api
mkdir demo cd demo dotnet new dotnet restore dotnet run
若是上面兩步都正常,說明安裝沒什麼問題,接下來就進行部署操做。上面提供的demo下載是發佈好的文件,因此這裏就不須要編譯了。將下載好的文件解壓後直接連同文件夾一塊兒上傳到host的根路徑「/」下。而後進入發佈文件夾並執行部署操做:瀏覽器
cd virgo-api-demo dotnet Virgo.WebApi.dll
會有這樣的提示:bash
Hosting environment: Production Content root path: /app Now listening on: http://*:5000 Application started. Press Ctrl+C to shut down.
再經過另一個ssh客戶端鏈接該host,而後執行:app
curl http://localhost:5000/api/values
若是返回結果以下則正常:ssh
["value1","value2"]
可是當經過局域網的其餘主機訪問http://localhost:5000/api/values
時則會發現被拒絕···說到這裏須要謝謝VIVA LA VIDA的解惑。在部署完成後,運行的過程當中偵聽的是host內部的5000端口,與外部的其餘主機是不互通的,因此本地訪問正常,而外部卻被拒絕。要解決這個問題有兩個方法:
運行時傳入參數--server.urls http://*:5000
dotnet Virgo.WebApi.dll --server.urls http://*:5000
或者在項目的 program
下的 host
中添加參數.UseUrls("http://*:5000")
而後再從局域網中的其餘主機經過瀏覽器訪問http://192.168.2.129:5000/api/values
便可返回正確的結果["value1","value2"]
。如需瞭解更多詳情請移步 .NET Core
在主機上部署完成且能夠正常訪問後在用Docker部署就很容易了。我部署的過程當中主要就是不知道上面提到的那個參數,經過上面的操做明白了其做用,再來用Docker部署就只需三條命令:
# 第一條命令用於定位到發佈文件夾所在的位置 cd /opt/virgo-api-demo docker run --rm -ti -p 8888:5000 -v $(pwd)/virgo-api-demo:/virgo microsoft/dotnet:latest dotnet ./virog/Virgo.WebApi.dll --server.urls http://*:5000
接着就能夠經過外部其餘主機的瀏覽器訪問了。固然,也能夠先構建鏡像而後直接啓動容器
Dockerfile:
FROM microsoft/dotnet:latest MAINTAINER Mongo <willem@xcloudbiz.com> # 這裏Dockerfile和virgo-api-demo在同一目錄下 ADD virgo-api-demo /virgo-api WORKDIR /virgo-api EXPOSE 5000 CMD dotnet Virgo.WebApi.dll --server.urls http://*:5000
構建鏡像,啓動容器:
docker build -t virgoapi . docker run -d -p 6677:5000 virgoapi
外部主機經過瀏覽器訪問 hostip:6677/api/values
。