NetCore的Docker部署
NetCore的Docker部署
一、NetCore与Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口 。
微软的.NET Core本身就是一个对跨平台支持比较好的语言,有vs这样的集成工具对开发与部署也很友好,项目上进行发布可直接获得对应平台的可运行程序,也可以发布可移植程序,但是对应平台需要安装netcore运行时。
安装运行时需要针对不同的环境来处理,微软的下载页面提供安装的各种支持:https://dotnet.microsoft.com/download,运行时在windows平台下直接安装一个dotnet-hosting-2.1.12-win.exe即可,linux环境需要根据不同的操作系统命令行安装。
安装运行时的过程中可能会遇到一些不可预料的状况,开发机与生产环境的一些差异可能会导致安装失败,而采用Docker容器可以直接将开发环境打包,不用在每个不同的操作系统安装运行时。 NetCore在vs中就有Docker支持,但需要手动在windows环境下安装docker以支持镜像打包。
二、Docker安装
直接在https://hub.docker.com/网站下载win平台docker安装包,但docker for window只支持win10以上版本,如果是win7,需要下载DockerToolBox来安装(https://get.daocloud.io/toolbox/)。
安装过程网上教程一大把,百度即可。但某些电脑的win7版本可能装好后安装虚拟机失败,最终我换了一台电脑安装成功。下面这个错误截图最终也没解决。

三、Docker打包运行
Vs2017自带的docker支持由于我本机docker安装失败未进行深入研究,由于之前已经打包过现成的Linux可执行程序出去,就考虑直接打包现有的dll。
1.Docker build 镜像打包
Docker build命令是需要提供一个Dockerfile配置文件来告诉打包程序需要进行哪些操作的。微软默认生成的Dockerfile是打包源码的,可以参考一下,大部分都可以删除。

最终其实就是一句copy或add即可

其中设置utf-8是为了支持容器中的中文显示,urls是告诉容器需要提供这个对外的接口开放,workdir是指定程序的初始目录。
拷贝相应文件到linux主机目录 如/tmp/netcore,putty远程上去,定位到netcore目录,执行命令:docker build -t testdocker .
注意最后的”.”,这是命令的一部分,这个会将当前目录的所有文件拷贝到docker容器中,然后默认解析当前目录的Dockerfile文件进行镜像构建。
2.Docker run镜像运行
“docker run -d --name mytest -p 5000:5001 -v /tmp:/tmp testdocker”
解释这个命令的参数前,首先要了解镜像与容器的概念。
镜像:就是之前build的结果,叫testdocker,在linux主机中用docker images命令可以显示当前本地总共有多少镜像,有点类似Class类的概念
容器:就是这个命令中的 --name mytest,就好比new的一个Class对象。一个镜像可以有多个容器运行。Docker ps可以查看当前运行的容器,参数-a可以查看所有容器。
接下来说参数,
-d 指定后台运行。
--rm 与-d互斥,前台运行完成后删除容器
-p指定linux主机端口映射容器内的端口,容器内通过Dockerfile指定的端口是5001,在主机指定5000端口与之对应。
-v是目录对应,容器中要访问的目录如果用该参数对应过,则访问的是宿主机中的目录,前一个是主机中的目录。
3.Docker pull镜像获取
Docker pull hello-world可以从仓库获取镜像,仓库是一个镜像的合集,现在访问仓库镜像速度不是很理想,可以用阿里的镜像加速服务,需要注册一下,怎么操作修改都有提示。

4.Docker push 镜像推送
镜像打包好之后如何提供给别人,可以直接推送到docker hub,别人就能直接用pull命令获取。如果程序太放心放在公有仓库中,可以自己搭建一个私有仓库,网上教程也很多,由于已有现成的公司私有仓库,我就直接用了。
推送首先要将本地镜像docker tag testdocker registry.*.com\test打tag, 然后docker login 私有仓库地址登录,最后docker push tag名称将镜像推送到仓库中。
5.Docker exec -it mytest bash
进入容器中,可以查看打包的目录是否符合预期,运行的日志等
6.容器镜像删除
Docker rmi可以删除镜像,docker rm可以删除容器,-f可以强制删除。
四、遇到的问题与解决
1.容器运行成功后无法访问.
查看dockerfile中的端口与docker run命令中的端口是否对应。
2.镜像推送失败
这个可能有多种原因,比如没登录等,主要看提示。比如证书

添加配置即可:# vim /etc/docker/daemon.json
{
"insecure-registries": ["registry.xxx.com.cn"]
}
3.Dockerfile基础镜像修改为centos
默认运行的基础镜像是FROM microsoft/dotnet:2.1-aspnetcore-runtime,但原本没用docker时发布的程序是能够直接运行在centos上的,那修改基础镜像后能不能直接运行呢?答案是不行,遇到了icu问题,可以修改程序的配置文件,或安装icu包,可以在docker中直接指定(run yum install -y icu)。https://www.cnblogs.com/xakoy/p/9039218.html

4.Netcoreapi运行失败
这是一个很奇怪的问题,最终在Stack Overflow上找到答案,dockerfile中必须设置workdir,不设置就会报这个错。而这个问题在win平台的docker中是没问题的。
'/proc/1/map_files' is denied


参考链接:
https://www.cnblogs.com/nanlan2017/p/10451671.html
https://blog.csdn.net/vitaair/article/details/80894890
https://blog.csdn.net/qq_33256688/article/details/80319673
https://blog.csdn.net/u013469944/article/details/84202396
https://www.cnblogs.com/xhyan/p/6593075.html
NetCore的Docker部署的更多相关文章
- 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S
使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish 等几个常用命令. 2.了解Dock ...
- Docker部署NETCORE应用程序
Docker部署NETCORE应用程序 创建.netcore项目,本文以ASP.NET Core2.2 版本为例 设置Dockerfile属性始终复制 编辑Dockerfile内容 FROM micr ...
- 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署
庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介 我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...
- docker部署带mysql数据库连接的.netcore程序
docker部署带mysql数据库连接的程序和部署普通的程序完全一致 数据库可以是物理机删的mysql,同时也可以是docker里的mysql. 如果是docker中的mysql,配置连接字符串和物理 ...
- Asp.NetCore轻松学-部署到 Linux 进行托管
前言 上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS,且学习了进程内托管和进程外托管的区别:接下来就要说说应用 Asp.Net Core 的特性(跨平台),将 .Ne ...
- ubuntu中使用docker部署.netcore2.1
概述 .netcore发布这么久,到现在才在项目中实际运用,之前算是了解一点,一般找工作都会问是否运用过.netcore,软件研发来说,如果这个技术没用过,觉得挺难,其实不难..netcore ...
- AspNetCore容器化(Docker)部署(一) —— 入门
一.docker注册安装 Windows Docker Desktop https://www.docker.com/products/docker-desktop Linux Docker CE h ...
- Docker 部署Dotnet Core MVC项目
原文:Docker 部署Dotnet Core MVC项目 1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八 ...
- azure k8s netcore 程序初次部署
以下都是我在2018年12月份做的实验,今天才发布出来. 念想 首先是了解一些关于K8s的一些基础概念,推荐查看一下这个链接,非常适合入门k8s.是因为K8S的环境搭建比较复杂(最主要是懒),其实也有 ...
随机推荐
- C语言笔记 07_枚举&指针
emum(枚举) 枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读. 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,--}; 举个例子,比如:一星期有 7 天,如果 ...
- confluence 挖矿木马应急响应
最近遇到一台confluence wiki主机被挖矿,收到CPU 告警异常之后,登录查看,进行分析. top c 命令查看,果然CPU 已经资源已经被吃完了.. 看到用户是confluence,100 ...
- netcore在CentOS7 下使用处理图片的问题
请看代码,当你在centos下要把图片转为Base64的时候 MemoryStream ms = new MemoryStream(); try { Bitmap bmp = new Bitmap(f ...
- CentOS 7 安装 Nginx 配置反向代理
Linux使用Nginx Yum存储库上安装Nginx,适用于Red Hat Enterprise Linux和CentOS系统. 1.添加设置Nginx Yum存储库 在CentOS中首次安装Ngi ...
- IoT缺德相关
https://github.com/nebgnahz/awesome-iot-hacks <揭秘家用路由器0day漏洞挖掘技术> Embedded Device Security: Pw ...
- gohook 一个支持运行时替换 golang 函数的库实现
运行时替换函数对 golang 这类静态语言来说并不是件容易的事情,语言层面的不支持导致只能从机器码层面做些奇怪 hack,往往艰难,但如能成功,那挣脱牢笼带来的成就感,想想就让人兴奋. gohook ...
- python3数据分析,安装学习
python3数据分析,安装学习 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-09-26. 为了简单.安装 anaconda3 就好啦. 因为安装原版python3,用pip安装 ...
- 从无到有通过IDEA搭建SpringBoot项目
本人第一次写博客希望记录当下,努力成为IT界中的清流,写的不好多多包涵. SpringBoot是由Pivotal团队在2013年开始研发.2014年4月发布第一个版本的全新开源的轻量级框架.它基于Sp ...
- Cordova搭建,所遇到问题处理
环境:NodeJs.[Android SDK | IOS] 安装:npm install -g cordova 过程: 1.创建一个项目:cordova create myApp 2.选择平台: co ...
- Leetcode题解 - DFS部分简单题目代码+思路(113、114、116、117、1020、494、576、688)
这次接触到记忆化DFS,不过还需要多加练习 113. 路径总和 II - (根到叶子结点相关信息记录) """ 思路: 本题 = 根到叶子结点的路径记录 + 根到叶子结点 ...