一、背景
最近参与开发一个烟草行业的项目, 由于项目的特殊性, 所有的服务器都只能访问内网, 以往使用 “ docker pull images ” 下载镜像的方式不可行了。只能另寻办法。 经过一番的查找, 发现 docker 提供了镜像“转换保存”的功能, 这么一来,就完美解决了 docker 无法联网下载的问题。
二、离线环境部署
其实联网部署和离线部署的步骤大同小异, 唯一的区别就是,离线安装没办法通过“ docker pull 镜像” 的方式获取到 .net core 6.0 运行所需要的环境(ASP.NET Core 6.0 运行时),所以我们只要解决了镜像问题, 那么离线部署的问题就解决了。而 docker 官方提供了Save 和 load 来实现镜像的导出和导入。 官方文档地址:docker save | Docker Documentation ,这里就不过多介绍了。
- 使用可以上网的电脑(服务器), 并且电脑(服务器)安装了Docker 环境
- 执行 “ docker pull mcr.microsoft.com/dotnet/aspnet:6.0” 命令下载镜像
- 执行 “docker save mcr.microsoft.com/dotnet/aspnet:6.0 > aspnet.tar ” 命令将镜像导出为静态文件
- 将静态文件复制/拷贝到内网服务器
- 登录到内网服务器上, 在内网服务器上执行 “docker load < aspnet.tar ” 命令将镜像加载到 docker 中。
通过上述的操作,.net core 6.0 的运行环境就已经安装完成了。下面就来讲 .net core 的程序部署起来。
三、发布
1、发布的话, 需要在项目的根目录创建一个 “Dockerfile” 的文件,文件内容如下,(注意:其中“NTI.IoT.Edge.PSS.Web.Entry.dll” 要改成你自己的项目名称)
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5000
EXPOSE 5001
COPY . .
ENTRYPOINT ["dotnet", "NTI.IoT.Edge.PSS.Web.Entry.dll"]
2、将发布的文件拷贝到服务器上,进入项目的文件夹
3、生成网站镜像
docker build -t nti.iot.edge.pss.web.entry:1.0 .
4、然后启动镜像即可就发布成功了。
docker run --name=nti.iot.edge.pss.web.entry -d -p 5000:80 nti.iot.edge.pss.web.entry:1.0
本文含有隐藏内容,请 开通VIP 后查看