27.2 在 Docker 部署

27.2.1 关于 Docker 部署#

Docker 中部署网站有两种方式:

  • 发布后构建:此方式是先发布网站后在再构建镜像,这样可以减少不必要的构建层,而且还能缩减镜像大小。(推荐)
  • 编译+构建+发布:也就是说在 Dockerfile 中配置网站从构建到发布的完整过程,此方式会速度慢,而且会产生冗余层,增加镜像大小。

27.2.2 两种方式构建#

27.2.2.1 发布后构建#

  • 👉 发布网站

首先在 Visual Studiodotnet cli 中发布网站,可以参考 在 IIS 部署-发布网站

  • 👉 编写 Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:5.0.1
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY . .
ENTRYPOINT ["dotnet", "Furion.Web.Entry.dll"]
  • 👉 将 Dockerfile 文件拷贝到发布根目录

将编写好的 Dockerfile 文件(注意 D 大写)拷贝到发布网站的根目录下。

  • 👉 构建 Docker 镜像

在网站发布后的路径根目录下(必须含 Dockerfile)打开 CMD/PowerShell 只需构建命令:

docker build -t 网站名称:网站版本号 .
特别注意

后端的 . 不能省略

  • 👉 启动镜像
docker run --name 容器名称 -p 5000:80 --restart=always -d 网站名称:网站版本号
发布到 hub.docker.com

如果需要将该网站的镜像公开出去,那么可以发布到 hub.docker.com 中。发布步骤如下:

  • 👉 为镜像打 tag 标签
docker tag 网站名称:网站版本号 docker账号名/网站名称:网站版本号

如:

docker tag furion:v1.8.0 monksoul/furion:v1.8.0
  • 👉 登录 docker
docker login
  • 👉 推送到 hub.docker.com
docker push docker账号名/网站名称:网站版本号

如:

docker push monksoul/furion:v1.8.0

27.2.2.2 编译+构建+发布#

此方式可以偷懒,但是不太推荐,不过在某些场景下非常有用,就是集成 Devops 工具链可以做到一步到位。

  • 👉 编写 Dockerfile

这种方式只需要把 Dockerfile 内容替换成以下即可:

FROM mcr.microsoft.com/dotnet/sdk:5.0.1 AS build
WORKDIR /source
# Download Source
RUN git init
RUN git remote add -t master -m master origin 你的源码Git地址
RUN git config core.sparseCheckout true
RUN echo samples >> .git/info/sparse-checkout
RUN git pull --depth 1 origin main
# Restore And Publish
WORKDIR /source/samples
RUN dotnet restore
RUN dotnet publish -c release -o /app --no-restore
# Run
FROM mcr.microsoft.com/dotnet/aspnet:5.0.1
WORKDIR /app
COPY --from=build /app ./
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["dotnet", "Furion.Web.Entry.dll"]
  • 👉 在 Dockerfile 所在路径构建

接下来的步骤和上述步骤一致,不再重复编写

27.2.3 反馈与建议#

与我们交流

给 Furion 提 Issue