.net core 程序 通过Docker 部署到 Centos8

最近在学习Docker ,顺便把学习日记记录一下。

先说一下环境配置,我是在Windows10 用自带Hyper-v创建了linux虚拟机,系统是Centos8。

在Centos8 设置镜像仓库并安装Docker:

设置仓库:

 sudo yum install -y yum-utils device-mapper-persistent-data lvm2

稳定仓库:

 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

安装docker(因为docker最新版本没有可用的containerd.io,我安装的docker版本是18.09.1):

sudo yum install docker-ce-18.09.1 docker-ce-cli containerd.io

启动docker:

sudo systemctl start docker

运行docker(判断是否成功):

sudo docker run hello-world

配置好环境后,开始创建程序

新建.net core 3.1 web应用程序 CoreWebTest1 ,选择linux 支持

根目录下有个Dockerfile

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 ["CoreWebTest01/CoreWebTest01.csproj", "CoreWebTest01/"]
RUN dotnet restore "CoreWebTest01/CoreWebTest01.csproj"
COPY . .
WORKDIR "/src/CoreWebTest01"
RUN dotnet build "CoreWebTest01.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "CoreWebTest01.dll"]

把整个程序打包 CoreWebTest1.zip

使用xshell 6 连接linux ,找到docker 目录

cd /var/lib/docker

创建项目目录 mkdir CoreWebTest01 ,进入该目录 cd CoreWebTest01 

把程序文件传输到linux

输入rz ,选择CoreWebTest01.zip

传输完解压文件 unzip CoreWebTest01.zip

解压完查看当前目录,输入ls ,看到已经.net 项目文件已经解压到当前目录

把 CoreWebTest01 文件夹下的Dockerfile 移动到当前目录

mv CoreWebTest01/Dockerfile .

进入CoreWebTest01目录,先执行Dockerfile文件中这两句

cd CoreWebTest01

dotnet build "CoreWebTest01.csproj" -c Release -o /app/build
dotnet publish "CoreWebTest01.csproj" -c Release -o /app/publish

执行完再回到上级目录 cd ..

开始构建docker镜像

docker build -t webtest01 .

构建完 输入 docker images ,可以看到有 webtest01 的镜像

然后发布镜像

docker run -d -P webtest01 (-d 表示后台运行容器, -P 表示随机映射端口)

输入 docker ps -a ,可以看到当前有哪些运行的镜像

其中还有对应的端口号(如果发布完看不到对应端口,可能是防火墙的原因,先关闭防火墙)

在浏览器输入对应ip:port ,就可以访问网站了

 

成功通过Docker发布.net core  程序后我在想,Dockerfile 文件那么多行,能否简化一下呢,答案是可以的

修改Dockerfile 如下

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /webtest2
COPY . .
EXPOSE 8080
ENTRYPOINT ["dotnet", "CoreWebTest01.dll"]

Dockerfile 指定暴露端口是8080,稍后发布镜像时也同步映射8080端口到docker

注,如果觉得 mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim 下载太慢,可以换成 mcr.azk8s.cn/dotnet/core/aspnet:3.1-buster-slim

设置Dockerfile属性为始终复制

发布.net core 程序,发布时选择依赖框架,可移植

发布完,打包发布文件,同样方式传到linux

进入发布文件根目录

docker build -t webtest2 .

 docker run -d -p 8080:80 webtest2

这里小写-p 8080:80 表示把8080 外部端口映射到 Docker 80 端口

最后浏览器输入ip:8080 ,可以正常访问网站

以上,是通过Docker 发布.net core 程序到Centos 的方法

原文地址:https://www.cnblogs.com/redo/p/12595420.html