NetCore的Docker部署

NetCoreDocker部署

一、NetCoreDocker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口 。

微软的.NET Core本身就是一个对跨平台支持比较好的语言,有vs这样的集成工具对开发与部署也很友好,项目上进行发布可直接获得对应平台的可运行程序,也可以发布可移植程序,但是对应平台需要安装netcore运行时。

安装运行时需要针对不同的环境来处理,微软的下载页面提供安装的各种支持:https://dotnet.microsoft.com/download,运行时在windows平台下直接安装一个dotnet-hosting-2.1.12-win.exe即可,linux环境需要根据不同的操作系统命令行安装。

安装运行时的过程中可能会遇到一些不可预料的状况,开发机与生产环境的一些差异可能会导致安装失败,而采用Docker容器可以直接将开发环境打包,不用在每个不同的操作系统安装运行时。 NetCorevs中就有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是打包源码的,可以参考一下,大部分都可以删除。

 

最终其实就是一句copyadd即可

 

其中设置utf-8是为了支持容器中的中文显示,urls是告诉容器需要提供这个对外的接口开放,workdir是指定程序的初始目录。

拷贝相应文件到linux主机目录 如/tmp/netcoreputty远程上去,定位到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://stackoverflow.com/questions/51598627/access-to-the-path-proc-1-map-files-is-denied-net-core-2-1-centos-7?r=SearchResults

 

参考链接:

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

转载于:https://www.cnblogs.com/zhanglb163/p/11299550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,关于使用Docker部署.NET Core,可以按照以下步骤进行操作: 1. 安装Docker:首先需要在您的计算机上安装Docker。可以在Docker官网上下载并安装Docker Desktop。 2. 创建.NET Core应用程序:使用.NET Core命令行工具创建.NET Core应用程序,可以使用以下命令在终端中创建一个简单的.NET Core应用程序: ``` dotnet new console -n myapp ``` 3. 创建Dockerfile:在应用程序根目录下创建一个名为Dockerfile的文件,并添加以下内容: ``` FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env WORKDIR /app COPY . ./ RUN dotnet restore RUN dotnet publish -c Release -o out FROM mcr.microsoft.com/dotnet/aspnet:5.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "myapp.dll"] ``` 其中,FROM指令指定了使用的.NET Core镜像版本,WORKDIR指令设置了工作目录,COPY指令将应用程序复制到Docker容器中,RUN指令运行了dotnet restore和dotnet publish命令,将应用程序编译和打包成发布版本,ENTRYPOINT指令指定了容器启动后要执行的命令。 4. 构建Docker镜像:在应用程序根目录下,运行以下命令构建Docker镜像: ``` docker build -t myapp . ``` 其中,-t指定了镜像名称和标签。 5. 运行Docker容器:运行以下命令启动Docker容器: ``` docker run -it --rm -p 8080:80 myapp ``` 其中,-it参数指定了交互式运行,并删除容器退出时的数据,-p参数指定了容器内部的80端口映射到宿主机的8080端口,myapp指定了要启动的镜像名称和标签。 希望这些步骤可以帮助您使用Docker部署.NET Core应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值