- linux配置
- .net程序
- https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.">See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
- 添加.net6基础镜像
- 容器工作目录
- 可注释EXPOSE EXPOSE
- 拷贝发布目录下的所有文件到容器的工作根目录
- COPY . . (这样写也可以)
- 如果用System.SqlClient.dll访问数据库,需要加这一句
- RUN sed -i ‘s/TLSv1.2/TLSv1.0/g’ /etc/ssl/openssl.cnf
- 容器入口点
学习参考自部署.Net6项目到docker
linux配置
docker安装
请参考安装docker
安装.net6镜像
docker pull mcr.microsoft.com/dotnet/aspnet:6.0
创建webapi目录
创建/wwwroot/myproject,将web api程序文件存放在此目录下
mkdir -p /wwwroot/myproject
开放webapi端口
web api预使用8001端口,需要对外开放8001端口,端口配置步骤如下:
防火墙相关命令
# 查看防火墙状态
systemctl status firewalld
# 启动防火墙
systemctl start firewalld
# 重新启动防火墙
firewall-cmd --reload
# 关闭防火墙命令:
systemctl stop firewalld
开放端口
firewall-cmd --zone=public --add-port=8001/tcp --permanent
# 建议同时设置开放portainer的8090端口
firewall-cmd --zone=public --add-port=8090/tcp --permanent
重启防火墙
firewall-cmd --reload
- 命令含义:
– zone #作用域
– add-port=1935/tcp #添加端口,格式为:端口/通讯协议
– permanent #永久生效,没有此参数重启后失效查看端口状态
firewall-cmd --query-port=8001/tcp
yes 表示已开启 no表示未开启
配置好开放的端口后,建议重新关闭并停止防火墙服务。systemctl stop firewalld
.net程序
新建webapi
【1】新建.net6 mvc或webapi项目;Dockerfile
【2】在mvc或webapi项目的根目录下创建Dockerfile文件,并设置为始终复制; ```bashSee https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
添加.net6基础镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
容器工作目录
WORKDIR /app
可注释EXPOSE EXPOSE
EXPOSE 80 EXPOSE 443
拷贝发布目录下的所有文件到容器的工作根目录
COPY . . (这样写也可以)
COPY ./ ./
如果用System.SqlClient.dll访问数据库,需要加这一句
RUN sed -i ‘s/TLSv1.2/TLSv1.0/g’ /etc/ssl/openssl.cnf
容器入口点
ENTRYPOINT [“dotnet”, “WebApp1.dll”]
<a name="MTbGC"></a>
### 发布程序包
![1657699101217.png](https://cdn.nlark.com/yuque/0/2022/png/12561771/1657699105703-70d02406-c228-449a-8634-a28cbc89d22a.png#clientId=u2e952665-d7ab-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=547&id=u2aab3696&margin=%5Bobject%20Object%5D&name=1657699101217.png&originHeight=547&originWidth=1072&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21801&status=done&style=none&taskId=u3c431e61-8abf-44cb-bfcc-9089fd20879&title=&width=1072)<br />将发布后的mvc或webapi项目拷贝到centos服务器的某个文件夹,例如拷贝到之前创建好的/wwwroot/myproject文件夹;<br />![1657699151568.png](https://cdn.nlark.com/yuque/0/2022/png/12561771/1657699157097-0c02e3d5-3fdf-4427-83cf-f6f38f51d0c9.png#clientId=u2e952665-d7ab-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=364&id=u27b4dbdf&margin=%5Bobject%20Object%5D&name=1657699151568.png&originHeight=364&originWidth=402&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21378&status=done&style=none&taskId=ub9f96802-9ee5-41ee-9258-fcbde8014cb&title=&width=402)
<a name="N7Hkr"></a>
## docker部署
<a name="vYbRc"></a>
### 构建镜像
进入到centos服务器的 /wwwroot/myproject 目录,构建一个镜像,镜像名格式为【镜像名:版本号】,比如:dotnet6-demo:0.0.1
```bash
cd /wwwroot/myproject
docker build -t dotnet6-demo:0.0.1 .
:::warning
- dotnet6-demo 表示构建的镜像名称,
:0.0.1表示镜像版本号,注意镜像名后面有个空格 + 英文点号,表示构建当前路径下的文件 :::
创建自定义网络
默认网络docker0,它不能用域名访问,所以要创建自定义网络。
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
参数说明: :::warning
—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通的docker network inspect mynet
创建并运行容器
创建容器格式: :::warning docker run -d —name 容器名 -p 外部端口号:docker容器端口号 —restart=always -v /宿主机目录 : /容器目录 镜像名 ::: 使用自定义网络创建容器(多了个 —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
使用默认网络 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
参数说明: :::warning
-d #后台运行
- -p 8001:80 #缩主机端口号:docker端口号
- -v #数据卷路径,格式:-v /宿主机目录:容器目录)或者(-v /容器目录),可以带多个 -v 参数。
- —restart=always #dokcer重新启动时也将容器自动启动
- —net mynet #指定网络名
:::
查看容器
docker ps
进入容器
docker exec -it my-dotnet6-demo01 /bin/bash
设置容器开机自启
docker update --restart=always 容器名字
取消容器开机自启
docker update --restart=no 容器名字
访问容器Web API
访问方式:http://linux宿主机ip:端口号(8001)
http://192.168.234.133:8001