Docker部署
精简发布文件
如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 .csproj 并添加 <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>,如:
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>
若无需生成 .pdb 文件,可以继续添加:
<PropertyGroup>
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
一、Docker部署概述
1.1 部署方式
在 Docker 中部署 ThingsGateway 有两种方式:
- 发布后构建:此方式是先发布网站后再构建镜像,这样可以减少不必要的构建层,而且还能缩减镜像大小。(推荐)
- 编译+构建+发布:也就是说在
Dockerfile中配置网站从构建到发布的完整过程,此方式会速度慢,而且会产生冗余层,增加镜像大小。
1.2 优势
使用 Docker 部署 ThingsGateway 具有以下优势:
- 环境一致性:确保开发、测试和生产环境的一致性
- 快速部署:通过镜像 快速部署新实例
- 易于扩展:支持水平扩展和负载均衡
- 资源隔离:容器化隔离,提高系统安全性
- 便于维护:统一的管理和监控方式
二、发布后构建方式
2.1 编写 Dockerfile
创建 Dockerfile 文件,内容如下:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
COPY . /app
WORKDIR /app
EXPOSE 80
#linux安装
RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ sid main contrib non-free" > /etc/apt/sources.list
RUN apt-get update && apt-get -y install libfontconfig1
ENTRYPOINT ["dotnet", "ThingsGateway.Server.dll","--urls","http://*:7200"]
2.2 Dockerfile 参数说明
| 参数 | 说明 |
|---|---|
FROM | 指定基础镜像,使用 .NET 8.0 ASP.NET 运行时 |
COPY | 将发布文件复制到容器中的 /app 目录 |
WORKDIR | 设置工作目录为 /app |
EXPOSE | 暴露容器端口 80 |
RUN | 安装必要的系统依赖(字体配置库) |
ENTRYPOINT | 设置容器启动时执行的命令 |
提示git仓库中已经包含 Dockerfile 文件
2.3 拷贝 Dockerfile
将编写好的 Dockerfile 文件(注意 D 大写)拷贝到发布网站的根目录下。
2.4 构建 Docker 镜像
在网站发布后的路径根目录下(必须含 Dockerfile)打开 CMD/PowerShell 执行构建命令:
docker build -t thingsgateway:1.0 .
特别注意
命令末尾的 . 不能省略,表示使用当前目录作为构建上下文
2.5 启动容器
docker run --name thingsgateway -p 5000:80 --restart=always -d thingsgateway:1.0
参数说明
| 参数 | 说明 |
|---|---|
--name | 容器名称 |
-p | 端口映射,格式:主机端口:容器端口 |
--restart | 重启策略,always 表示自动重启 |
-d | 后台运行 |
thingsgateway:1.0 | 镜像名称和版本 |
.NET8 中 80 端口问题在使用 .NET8,默认的端口由原来的 80 端口变成了 8080。查看相关说明