如何将.NET 6项目成功部署到Docker容器中?

2026-04-01 10:081阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1186个文字,预计阅读时间需要5分钟。

如何将.NET 6项目成功部署到Docker容器中?

将.NET 6项目部署到Docker中的步骤如下:

1. 新建.NET 6 MVC或WebAPI项目;

2.在项目根目录下创建Dockerfile文件,并配置如下:

Dockerfile

使用Microsoft的.NET 6 SDK基础镜像FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /app

复制项目文件到容器中COPY . .

设置环境变量ENV ASPNETCORE_URLS=http://*:5000

构建项目RUN dotnet publish -c Release -o out

使用基础镜像作为最终镜像FROM mcr.microsoft.com/dotnet/runtime:6.0 AS publish

复制发布后的应用文件到容器中COPY --from=base /app/out .

设置容器启动命令ENTRYPOINT [dotnet, YourApp.dll]

部署.net6项目到docker

新建.net6 mvc或webapi项目;
在mvc或webapi项目的根目录下创建Dockerfile文件,并设置为始终复制;

Dockerfile文件内容为:

#添加.net6基础镜像 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base #容器工作目录 WORKDIR /app #指定项webapi或mvc站点的内部启动端口,默认是80 #ENV ASPNETCORE_URLS +:5001 #暴露docker容器端口 #EXPOSE 8001 #EXPOSE 443 #拷贝发布目录下的所有文件到容器的工作根目录 #COPY . . (这样写也可以) COPY ./ ./ # 如果用System.SqlClient.dll访问数据库,需要加这一句 RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf #容器入口点 ENTRYPOINT ["dotnet", "dotnet6Demo.web.dll"]

发布mvc或webapi项目;
将发布后的mvc或webapi项目拷贝到centos服务器的某个文件夹,例如拷贝到文件夹;
安装docker

安装方法参考:www.jb51.net/article/232534.htm

安装.net6镜像

docker pull mcr.microsoft.com/dotnet/aspnet:6.0

进入到centos服务器的 /wwwroot/myproject 目录,构建一个镜像,镜像名格式为,比如:dotnet6-demo:0.0.1

构建镜像命令:

cd /wwwroot/myproject docker build -t dotnet6-demo:0.0.1 .

dotnet6-demo 表示构建的镜像名称,:0.0.1表示镜像版本号,注意镜像名后面有个空格 + 英文点号,表示构建当前路径下的文件

上面这条命令是用默认配置文件名 Dockerfile 构建的镜像,如果用自定义配置文件名构建镜像,需要加 -f 参数。

docker build -f Dockerfile02 -t dotnet6-demo:0.0.1 .

创建自定义网络

默认网络docker0,它不能用域名访问,所以要创建自定义网络。

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

参数说明:

  • --driver bridge #表示桥接模式
  • --subnet 192.168.0.0/16 #16表示最多支持65535个ip,可以分配192.168.0.2到192.168.255.255,如果没有指定--subnet参数默认网段为172.17.0.0/16,默认网关为172.17.0.1;
  • --subnet 192.168.0.0/24 #24表示最多支持254个ip,可以分配192.168..0.2到192.168.0.255
  • --gateway #表示docker容器的网关

mynet表示网络名

在docker 中直接 run 创建容器时不加自定义的网络,默认使用网络名为bridge的网络,这是docker0网络,容器之间无法使用容器名相互ping通,只能通过ip相互ping通。

我们自己定义的网络,容器之间是可以直接通过容器名相互ping通的。

查看mynet网络的详细信息:

docker network inspect mynet

创建并运行容器

创建容器格式:

docker run -d --name 容器名 -p 外部端口号:docker容器端口号 --restart=always -v /宿主机目录 : /容器目录 镜像名

使用默认网络 docker0 创建容器(生产环境不推荐):

docker run -d --name my-dotnet6-demo01 -p 8001:80 --restart=always -v /www-appdata/dotnet6-demo/logs:/logs -v /www-appdata/dotnet6-demo/upload:/upload dotnet6-demo:0.0.1

使用自定义网络创建容器(多了个 --net 参数):

docker run -d --name my-dotnet6-demo01 -p 8001:80 --restart=always -v /www-appdata/dotnet6-demo/logs:/logs -v /www-appdata/dotnet6-demo/upload:/upload --net mynet dotnet6-demo:0.0.1

参数说明:

  • -d #后台运行
  • -p 8001:80 #缩主机端口号:docker端口号
  • -v #数据卷路径,格式:(-v /宿主机目录:容器目录)或者(-v /容器目录),可以带多个 -v 参数。
  • --restart=always #dokcer重新启动时也将容器自动启动
  • --net mynet #指定网络名

查看正在运行的容器:

docker ps

查看所有容器:

docker ps -a

访问容器

访问方式:宿主机ip:端口号

192.168.1.200:8002

进入到容器

进入到容器

docker exec -it my-dotnet6-demo01 /bin/bash

容器设置

给已有容器设置开机自动启动

如何将.NET 6项目成功部署到Docker容器中?

docker update --restart=always 容器名字

取消容器开机自动启动

docker update --restart=no 容器名字

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

本文共计1186个文字,预计阅读时间需要5分钟。

如何将.NET 6项目成功部署到Docker容器中?

将.NET 6项目部署到Docker中的步骤如下:

1. 新建.NET 6 MVC或WebAPI项目;

2.在项目根目录下创建Dockerfile文件,并配置如下:

Dockerfile

使用Microsoft的.NET 6 SDK基础镜像FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /app

复制项目文件到容器中COPY . .

设置环境变量ENV ASPNETCORE_URLS=http://*:5000

构建项目RUN dotnet publish -c Release -o out

使用基础镜像作为最终镜像FROM mcr.microsoft.com/dotnet/runtime:6.0 AS publish

复制发布后的应用文件到容器中COPY --from=base /app/out .

设置容器启动命令ENTRYPOINT [dotnet, YourApp.dll]

部署.net6项目到docker

新建.net6 mvc或webapi项目;
在mvc或webapi项目的根目录下创建Dockerfile文件,并设置为始终复制;

Dockerfile文件内容为:

#添加.net6基础镜像 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base #容器工作目录 WORKDIR /app #指定项webapi或mvc站点的内部启动端口,默认是80 #ENV ASPNETCORE_URLS +:5001 #暴露docker容器端口 #EXPOSE 8001 #EXPOSE 443 #拷贝发布目录下的所有文件到容器的工作根目录 #COPY . . (这样写也可以) COPY ./ ./ # 如果用System.SqlClient.dll访问数据库,需要加这一句 RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf #容器入口点 ENTRYPOINT ["dotnet", "dotnet6Demo.web.dll"]

发布mvc或webapi项目;
将发布后的mvc或webapi项目拷贝到centos服务器的某个文件夹,例如拷贝到文件夹;
安装docker

安装方法参考:www.jb51.net/article/232534.htm

安装.net6镜像

docker pull mcr.microsoft.com/dotnet/aspnet:6.0

进入到centos服务器的 /wwwroot/myproject 目录,构建一个镜像,镜像名格式为,比如:dotnet6-demo:0.0.1

构建镜像命令:

cd /wwwroot/myproject docker build -t dotnet6-demo:0.0.1 .

dotnet6-demo 表示构建的镜像名称,:0.0.1表示镜像版本号,注意镜像名后面有个空格 + 英文点号,表示构建当前路径下的文件

上面这条命令是用默认配置文件名 Dockerfile 构建的镜像,如果用自定义配置文件名构建镜像,需要加 -f 参数。

docker build -f Dockerfile02 -t dotnet6-demo:0.0.1 .

创建自定义网络

默认网络docker0,它不能用域名访问,所以要创建自定义网络。

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

参数说明:

  • --driver bridge #表示桥接模式
  • --subnet 192.168.0.0/16 #16表示最多支持65535个ip,可以分配192.168.0.2到192.168.255.255,如果没有指定--subnet参数默认网段为172.17.0.0/16,默认网关为172.17.0.1;
  • --subnet 192.168.0.0/24 #24表示最多支持254个ip,可以分配192.168..0.2到192.168.0.255
  • --gateway #表示docker容器的网关

mynet表示网络名

在docker 中直接 run 创建容器时不加自定义的网络,默认使用网络名为bridge的网络,这是docker0网络,容器之间无法使用容器名相互ping通,只能通过ip相互ping通。

我们自己定义的网络,容器之间是可以直接通过容器名相互ping通的。

查看mynet网络的详细信息:

docker network inspect mynet

创建并运行容器

创建容器格式:

docker run -d --name 容器名 -p 外部端口号:docker容器端口号 --restart=always -v /宿主机目录 : /容器目录 镜像名

使用默认网络 docker0 创建容器(生产环境不推荐):

docker run -d --name my-dotnet6-demo01 -p 8001:80 --restart=always -v /www-appdata/dotnet6-demo/logs:/logs -v /www-appdata/dotnet6-demo/upload:/upload dotnet6-demo:0.0.1

使用自定义网络创建容器(多了个 --net 参数):

docker run -d --name my-dotnet6-demo01 -p 8001:80 --restart=always -v /www-appdata/dotnet6-demo/logs:/logs -v /www-appdata/dotnet6-demo/upload:/upload --net mynet dotnet6-demo:0.0.1

参数说明:

  • -d #后台运行
  • -p 8001:80 #缩主机端口号:docker端口号
  • -v #数据卷路径,格式:(-v /宿主机目录:容器目录)或者(-v /容器目录),可以带多个 -v 参数。
  • --restart=always #dokcer重新启动时也将容器自动启动
  • --net mynet #指定网络名

查看正在运行的容器:

docker ps

查看所有容器:

docker ps -a

访问容器

访问方式:宿主机ip:端口号

192.168.1.200:8002

进入到容器

进入到容器

docker exec -it my-dotnet6-demo01 /bin/bash

容器设置

给已有容器设置开机自动启动

如何将.NET 6项目成功部署到Docker容器中?

docker update --restart=always 容器名字

取消容器开机自动启动

docker update --restart=no 容器名字

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。