容器部署 .NET Core API

微软在其官方网站 - .NET Core 中提供了各种平台下 .NET Core 环境的搭建方法,其中包括了 Windows、Linux、Mac 以及 Docker 。其代码托管在GitHub - dotnet/cli。如果你使用Docker进行部署的话,微软官方也提供了相应的已经搭建好环境的官方镜像:microsoft/dotnet 和 microsoft/dotnet-preview,而且针对不同的用途发布了不同的版本,即镜像的标签不同,这里用的是 microsoft/dotnet:latest。其镜像构建文件 Dockerfile。接下来是我的一些操作记录。
部署的demo文件:点击下载;

在Linux系统中部署virgo-api-demo

这里我选择的操作系统:Ubuntu Server 16.04 LTS,也可点击这里直接下载;
接下来需要在实体机或者虚拟机上进行 Ubuntu Server 16.04 LTS 的安装;
紧接着就是要搭建 .NET Core 环境:

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 417A0893sudo apt-get update

如果现有环境中已安装有 .NET Core ,请先用下面的脚本进行卸载清理:

# !/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 1fihost_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 0remove_all[ "$?" -ne 0 ] && echo "Failed to remove dotnet packages." && exit 1is_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 1echo "dotnet package removal succeeded."exit 0

安装 .NET Core SDK:

sudo apt-get install dotnet-dev-1.0.0-preview2-003121

查看 .NET Core 的版本信息:

dotnet --version

做一个简单的demo并编译运行:

mkdir democd demodotnet newdotnet restoredotnet run

如果上面两步都正常,说明安装没什么问题,接下来就进行部署操作。上面提供的demo下载是发布好的文件,所以这里就不需要编译了。将下载好的文件解压后直接连同文件夹一起上传到host的根路径“/”下。然后进入发布文件夹并执行部署操作:

cd virgo-api-demodotnet Virgo.WebApi.dll

会有这样的提示:

Hosting environment: ProductionContent root path: /appNow listening on: http://*:5000Application started. Press Ctrl+C to shut down.

再通过另外一个ssh客户端连接该host,然后执行:

curl http://localhost:5000/api/values

如果返回结果如下则正常:

["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部署virgo-api-demo

在主机上部署完成且可以正常访问后在用Docker部署就很容易了。我部署的过程中主要就是不知道上面提到的那个参数,通过上面的操作明白了其作用,再来用Docker部署就只需三条命令:

# 第一条命令用于定位到发布文件夹所在的位置cd /opt/virgo-api-demodocker run --rm -ti -p 8888:5000 -v $(pwd)/virgo-api-demo:/virgo microsoft/dotnet:latestdotnet ./virog/Virgo.WebApi.dll --server.urls http://*:5000

接着就可以通过外部其他主机的浏览器访问了。当然,也可以先构建镜像然后直接启动容器
Dockerfile:

FROM microsoft/dotnet:latest                                    MAINTAINER Mongo # 这里Dockerfile和virgo-api-demo在同一目录下ADD virgo-api-demo /virgo-apiWORKDIR /virgo-apiEXPOSE 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。

.net-core

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部