.Net Core部署在Linux . Docker上

2021-01-29 18:16

阅读:593

标签:base   mode   from   官方   没有   上层建筑   lrzsz   云服务器   打开   

前言

看名字也知道了,
要想将.Net Core应用部署到Linux的Docker中,
需要一些前提条件

  • .Net Core知识
  • Linux系统基本操作
  • Docker基本操作

万事开头难,作为一个"云"开发工程师,
第一步当然是去网上找相关文档[微软官方文档,博客,书籍...]

除了万事开头难,其实另外的一个就是很多细节需要注意,
看着博客上写着挺简单的,
但是自己由于不知道其中缘由,可能一个标点就导致了全军覆没...

如果你只对.Net Core有所了解,
对Linux和Docker以前没有接触过.
你与其去将Linux学习个把月,
再回来学习如何将.Net Core如何部署在Docker上.
倒不如趁这个机会,学习一下Linux.
只是啃书,远远不如在搞事情的时候啃书,其中更重要是要多思考.

你如果感觉每次学习一个新知识都感觉很吃力,
总觉很难理解,
一个原因可能因为你积累不够,并且只是学习的表皮知识,
没有真正去运用它.
你的地基没打牢固,所以在构建上层建筑的时候,
会感觉摇摇欲坠.
另外一个原因可能就是学习方法有问题了...

.Net Core 发布

原来的{Dockerfile}里面东西太多了,当我的Linux发布的时候,
报错

#原来的Dockerfile内容
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["DockerCoreSample.csproj", ""]
RUN dotnet restore "./DockerCoreSample.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "DockerCoreSample.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DockerCoreSample.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerCoreSample.dll"]
#修改后的Dockerfile内容
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
COPY . .
EXPOSE 11000
ENTRYPOINT ["dotnet", "DockerCoreSample.dll"]

需要注意的一点就是

Dockerfile.属性.
复制到输出目录:始终复制

然后将发布目录中的文件上传到Linux服务器即可.
我这里用的XShell
和Linux一个插件"lrzsz"

Docker相关命令

主要用到的命令

#进入到程序的发布目标
cd usr/core/

#创建 image文件 (-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签 PS:注意最后的 点)
docker build -t coredocker1.0 .  

#生成容器,每运行一次,就会新建一个容器
#(这里的21000:11000 代表把容器内的11000端口映射到你主机的21000端口,容器端口在后)
docker run --name coredocker -it -p 21000:11000 coredocker1.0

一些辅助命令

#查看docker的版本 version
docker -v
#开启Docker服务
systemctl start docker.service
#开机启动Docker服务
systemctl enable docker.service
#查看Docker服务启动状态
systemctl status docker.service
#重启Docker服务
systemctl restart docker.service

#查看所有容器
docker ps -a 

#容器.启动
docker start {容器名称}

坑.

  • 将本机发布文件上传到Linux服务器的时候,直接复制到{root}目录下...

  • 执行docker build命令,创建镜像的时候,名称使用了大写字母,报错.
# 错误示范
docker build -t coreDocker1.0 

提示:

invalid argument "coreDocker1.1" for "-t, --tag" flag:
invalid reference format: repository name must be lowercase
See ‘docker build --help‘.


执行{docker build -t Name .}花费的时间还是比较长...
是我云服务器的网络太慢嘛?


rz -eb
上传失败,可能因为Linux服务器的某些文件已经被占用了,无法替代了.
先在{usr/core}执行{rm -rf *}删除这些文件.


#Dockerfile EXPOSE

#原来错误写法
EXPOSE 11000,11001

#修改后正确写法
EXPOSE 11000 11001

最大的坑还是陷在了端口这里...
我的腾讯云服务器IP:11000
访问总是失败,
然后我去腾讯云服务器,安全组将该端口打开了.
还是不行...

telent X.X.X.X 11000

测试端口也是打开的.
实在不行,我重启下电脑就可以了...
太奇怪了???

参考文档

  • 微软.Visual Studio 如何构建容器化应用
  • 博客园.docker部署Asp.net core应用
  • 博客园.Docker 部署 Net Core
  • CSDN.asp net core 3.1 发布到 docker

.Net Core部署在Linux . Docker上

标签:base   mode   from   官方   没有   上层建筑   lrzsz   云服务器   打开   

原文地址:https://www.cnblogs.com/love-zf/p/13200404.html


评论


亲,登录后才可以留言!