Linux下使用docker部署发布后的netcore(四)

Linux下使用docker部署前后分离netcore webapi项目、前端vue页面、Mysql、Redis、SQLite

说明

这篇文章是为了记录公司的项目部署过程,方便给其他运维人员查阅,我对linux的详细操作谈不上非常精通,如果只是想了解实战项目的部署流程可以查看这篇文章。本文介绍了linux下使用docker的基本操作、使用docker部署netcore webapi项目、vue项目、Mysql、Redis、SQLite。我们先是一步一步部署,之后会采用docker-compose一步生成多种环境。 本人能力有限,底层的东西讲不清楚,但是会把遇到的问题的解决办法分享出来供大家查阅。废话不多说,直接整。

前面我们说到了怎么讲程序复制到服务器,在服务器上进行编译发布,这次我们来处理一下在VS上发布后的程序怎么部署到服务器上。

DockerFile组成

我们知道使用docker部署netcore应用程序需要DockerFile文件,DockerFile文件的结构分为四块,分别是:

  1. 第一部分
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app   #这里我们在镜像中创建了一个 /app 路径作为我们程序在镜像中的工作目录
COPY /app
EXPOSE 80   #将 80 端口暴露给 Docker,从而可以使我们在镜像外面通过端口访问到当前镜像中的运行的程序
EXPOSE 443
ENTRYPOINT ["dotnet", "DataVisualization.dll"]
复制代码

我们在镜像中创建了一个 /app 路径作为我们程序在镜像中的工作目录,同时,将 80 端口暴露给 Docker,从而可以使我们在镜像外面通过端口访问到当前镜像中的运行的程序。

  1. 第二部分
FROM mcr.microsoft.com/dotnet/core/sdk:2.1-stretch AS build
WORKDIR /src
COPY ["DataVisualization/DataVisualization.csproj", "DataVisualization/"]
RUN dotnet restore "DataVisualization/DataVisualization.csproj"
COPY . .
WORKDIR "/src/DataVisualization"
RUN dotnet build "DataVisualization.csproj" -c Release -o /app/build

因为我们的应用是一个多层架构的单体应用,最终的 MVC 项目依赖于解决方案中的各个类库以及我们从 Nuget 中下载的各种第三方组件,在部署时,需要将这些组件打包成 dll 引用。所以,这里我们需要使用 .NET Core SDK 中包含的 .NET Core CLI 进行还原和构建。

就像在上面的代码中,我们在镜像的内部创建了一个 /src 的路径,将当前解决方案下的类库都复制到这个目录下,之后通过 dotnet restore 命令还原我们的主程序所依赖的各个组件。当我们还原好依赖的组件后,就可以使用 dotnet build 命令生成 Release版本的 dll 文件,同时输出到之前创建的 /app/build 路径下。

  1. 第三部分
FROM build AS publish
RUN dotnet publish "DataVisualization.csproj" -c Release -o /app/publish

上面一步可以看成我们在使用 VS 生成 Release 版本的解决方案,当生成没有出错之后,我们就可以进行程序的发布。

  1. 第四部分
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DataVisualization.dll"]

当已经生成发布文件之后,按照我们平时部署在 Windows 上的过程,这时就可以通过 IIS 部署运行了,因此,构建我们应用镜像的最后一步就是通过 dotnet 命令执行我们的程序。

一般添加Docker支持都会出现这种文件结构的DockerFile,我们可以把整个项目拷贝到服务器,使用DockerFile进行编译,参考之前写的Linux下使用docker部署netcore(一)
但是在我们实际应用场景中可能会涉及项目安全、项目过大之类的情况,可就会出现编译后、发布后的项目进行部署的情况,接下来介绍怎么部署我们编译、VS发布后的项目。

部署编译后、VS发布后的项目

首先我们需要修改DockerFile,因为我们不需要它来编译处理了,也就是第二、第三部门就可以完全省略掉了。所以我们只需对这部门进行删除即可,删除后的文件是这样的:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim
WORKDIR /app   
COPY . /app
EXPOSE 80   
ENTRYPOINT ["dotnet", "DataVisualization.dll"]

需要注意的是,我将这里的注释都去掉了,因为在服务器中会出现乱码的情况

接下来我们就可以将我们的发布项目打包压缩,使用FTP或者其它工具,我直接使用的rz命令进行上传到服务器的操作。
创建项目目录、解压编译后的项目。(这两步操作可以参考Linux下使用docker部署netcore(一)
之后我们定位到DockerFile所在的文件夹中,使用命令创建镜像:

docker build -t mynetcore:1.1 .

1.1:代表你的镜像版本,可以写也可以不写
. :代表当前目录,目的是让程序找到你的DockerFile

查看镜像:

docker images

在这里插入图片描述
镜像创建成功了,之后我们运行起来我们的镜像:

docker run --name=datavisual2 -d -p 8056:80 -v ~/datavisual2/PublishDocker:/app mynetcore:1.1

注意此处-v,将冒号前面的文件挂载到服务器宿主机上(冒号后面的app需要跟DockerFile上一致),便于后续更改时,可以直接重启生效

之后使用下面的命令查看容器是否运行起来,STATUS为Up时代表成功,就可以直接访问了。

docker ps -a 

在这里插入图片描述

最后我要补充一下我遇到的问题,当我们在运行容器(docker run)的时候,加的文件挂载还是很有必要的,虽然你不加他他也可以运行,但是我遇到一个问题,就是当你在服务器上修改一些配置的时候,重新启动容器,修改后没有作用,详细的原因应该是修改的位置不对,所以我们需要使用程序的挂载,以我浅显的理解就是告诉服务器,你就读取我告诉你的文件路径下的东西,就别瞎找了。所以你修改配置的时候,服务器才会正确读取你的配置。

修改配置之后需要重启服务器,命令是:

docker restart datavisual2 #可以是容器ID或容器名字

就这样,有问题留言,只要我看到并且我了解的一定回复!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章