一、环境

   操作系统:windows 10 64bit

   开发环境:vs2017

   部署环境:docker  — windows

二、准备

  安装docker:

  见:https://www.cnblogs.com/xiaoerlang90/p/10285434.html

三、新建并发布项目

  打开 vs2017,新建.netCore Web 应用程序,选择web应用程序,勾选“启用Docker支持”,点击确定。

  

新建完成的项目目录如下:

右键项目发布后,选择发布到文件,这种方式发布的项目只适用于windows平台运行

想要项目在linux、osx系统上运行,需要用命令发布,也可能有别的方式,暂时只知道这一种:
1.dos命令转到项目的主目录下
2.运行命令:

dotnet publish --runtime ubuntu.16.04-x64 

--runtime后面跟的是运行时环境的操作系统
3.如果上面的命令成功了,你会看到生成了这样一个文件夹:bin\Debug\netcoreapp2.0\ubuntu.16.04-x64\publish,这里面的文件就是发布好的项目文件了,我们将publish文件夹拷贝到对应的操作系统下,运行命令dotnet NetCore.dll (NetCore.dll指的是主程序文件),不出意外的话项目就可以正常启动了,如果出意外的话,请进行以下检查:

a、发布时输入的目标系统是否正确
b、服务器是否正确安装了.net sdk

四、创建Dockerfile文件

  在发布目录下创建一个文本文档Dockerfile.txt ,或者在Linux系统创建一个文件Dockerfile
内容:

# 声明使用的基础镜像
FROM microsoft/dotnet:2.1-sdk-nanoserver- AS base # 设置工作目录
WORKDIR /app # 将本地应用拷贝到 容器 /app/ 目录下 "./"代表的就是/app 因为dockerfile文件和程序文件都在发布文件夹下 所以两个目录是一样的
COPY ./ ./ #设置环境变量,修改.netCore 默认的80端口
ENV ASPNETCORE_URLS http://+:5000 # 设置导出端口
EXPOSE # 指定应用入口点 NetCore.dll代表的是主程序文件
ENTRYPOINT ["dotnet", "DockerTest.dll"]

编辑完成后去掉文件的后缀名。

五、创建镜像并运行

  打开命令界面,cd到发布文件夹下:

  执行命令:

docker build -t mycore . (注意命令中的最后一个点 代表的是命令从你的当前目录下执行)

  或者:

docker build 发布文件目录 -t mycore

  其中 mycore为自定义镜像名称,如下所示:

  然后继续执行命令运行:

docker run -it -p 5000:5000 mycore

这里的5000:5000 代表把容器内的5000端口映射到你主机的5000端口

然后 http://localhost:5000 就可以访问啦!

六、附docker命令

docker pull microsoft/dotnet    //从docker仓库拉取一个名称为“microsoft/dotnet”的镜像

docker build light    //构建一个名称为light的容器

docker run hello-world    //运行hello-world容器

docker images    //查看所有镜像

docker rmi [image_id]    //删除一个imageid的镜像

docker rmi $(docker images -q)    //删除所有镜像

docker ps -a    //查看所有容器运行状态

docker rm [container_id]//删除一个containerid的容器(实例)

docker rm $(docker ps -a -q)   //删除所有容器

七、修改.NetCore端口号

  修改.net core的默认端口号,除了上文中提到的增加Dockerfile文件中环境变量外,或也可通过修改项目中program.cs文件中的BuildWebHost函数,修改启动端口号:

WebHost.CreateDefaultBuilder(args)
             .UseUrls("http://*:5000") //修改服务在docker中启动端口
               .UseKestrel()
               .UseContentRoot(Directory.GetCurrentDirectory())
               .UseIISIntegration()
               .UseApplicationInsights()
            .UseStartup<Startup>()
            .Build();

八、遇到的问题及解决方案:

  docker调试项目时出现“错误 CTC1005 Your Docker server host is configured for 'Linux', however your project target 'windows' ”,即:docker配置的环境与项目目标环境不一致。

  切换docker的container类型至“windows”

  后又出现了“尝试生成Docker镜像时发生错误”,重新配置了切换到Windows环境后的Daemon。

  关于Https重定向的问题可参考:

  https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.2&tabs=visual-studio

  https://github.com/aspnet/Docs/issues/6199

vs2017 开发.NetCore部署docker的更多相关文章

  1. .netcore mvc docker环境jenkins一键部署(DevOps)

    [前言] DevOps方面的文章很早之前就想分享了,挤出一点时间把前段时间搭建的一些提高开发效率的东西给大家分享一下吧. 本文介绍了一个.netcore mvc web项目,从项目push到githu ...

  2. NetCore的Docker部署

    NetCore的Docker部署 一.NetCore与Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或 ...

  3. .net core——Docker化开发和部署

    原文:.net core--Docker化开发和部署 本篇文章是使用Vs2017生成的Dockerfile进行部署的. 目录 VS2017生成Docker部署项目 Dockerfile内容 在开发服务 ...

  4. 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署

    庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介      我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...

  5. Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

    转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-d ...

  6. 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S

    使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish   等几个常用命令. 2.了解Dock ...

  7. 点评cat系列-服务器开发环境部署

    我们有三种部署方式:1. docker 部署2. 采用官方的 war 包部署. 3. 源码部署 很显然 docker 部署是最简单的, 我尝试了多次, 都在 cat docker 容器镜像的编译过程失 ...

  8. [转]基于boot2docker部署Docker环境

    本文转自:https://www.cnblogs.com/52fhy/p/8413029.html Docker轻量级的特性使得我们可以快速打包开发环境:一处编译,到处使用.我们可以在第一次编译好需要 ...

  9. 基于boot2docker部署Docker环境

    Docker轻量级的特性使得我们可以快速打包开发环境:一处编译,到处使用.我们可以在第一次编译好需要的开发环境,然后把镜像导出打包,只有有docker环境,便可以快速还原原来的开发环境. 很常用的一个 ...

随机推荐

  1. MySQL数据优化总结-查询备忘录

    一.优化分类 二.测试数据样例 参考mysql官方的sakina数据库. 三.使用mysql慢查询日志对有效率问题的sql进行监控 第一个,开启慢查询日志.第二个,慢查询日志存储位置.第三个,没有使用 ...

  2. LOAD DATA INFILE & mysqlimport

    +++++++++++++++++++++++++++++++++++++++++++++mysqlimport++++++++++++++++++++++++++++++++++++++++++++ ...

  3. IDEA中使用Sqlite3

    去maven下载驱动包 ( jar包 )  下载地址:http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.23.1 打开IDEA 创建 ...

  4. 【JZOJ5605】【NOI2018模拟3.26】Arg

    题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 解题思路 如何求出一个序列的LIS? 对于二分的方法,每次插入一个数,将它放到第一个 ...

  5. 题解 【BZOJ4700】适者

    题面 解析 看了好多dalao们的题解,然而还是不明白... 于是在想了半天后,决定自己写一篇题解. step 1 首先,分析题意, 应该还是比较容易想到, 要一直攻击一个兵器, 直到破坏它为止. 因 ...

  6. linux系统下nginx/mysql/php启动、停止、重启命令

    /usr/local/nginx/sbin/nginx /etc/init.d/mysql start /usr/local/php/sbin/php-fpm start   #nginx命令     ...

  7. js的三种异步处理

    js的三种异步处理   Promise 对象 含义: Promise是异步编程的一种解决方案, 优点: 相比传统回调函数和事件更加合理和优雅,Promise是链式编程(后面会详细讲述),有效的解决了令 ...

  8. luogu 1072 Hankson 的趣味题 唯一分解定理+线性筛

    貌似是比大多数题解优的 $O(n^2logn)$ ~ Code: #include <bits/stdc++.h> #define N 50004 #define setIO(s) fre ...

  9. cookbook 10.1生成随机密码

    任务: 随机地创造出新密码.比如,有时需要给新的用户账号分配新的密码. 解决方案: from random import choice import string def GenPasswd(leng ...

  10. 灰度图像--图像分割 Sobel算子,Prewitt算子和Scharr算子平滑能力比较

    学习DIP第47天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https://g ...