文章目录
前言
本篇主要记录将ASP.NET Core Web工程发布为docker镜像的步骤,.Net Core非Web工程发布步骤与之相同。
一、添加Dockerfile文件
分以下两种情况:
1.对于已经建好的ASP.NET Core Web应用程序
直接在web项目上右键->添加->Docker支持,然后选择linux,会自动生成一个Dockerfile文件
2.对于新建的ASP.NET Core Web应用程序
直接在创建即将结束时勾选docker支持
由于自动生成的Dockerfile难以理解,且不一定能够编译通过,因此使用以下精简版Dockerfile,直接替换默认生成的Dockerfile文件内容即可
# 引入镜像,低版本 docker 去掉 AS base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
# 设置工作目录
WORKDIR /app
# 把目录下的内容都复制到当前目录下
COPY . .
# 暴露容器内部5000端口
EXPOSE 5000
# 设置时区(时区不对连不上数据库)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
# 运行镜像入口命令和可执行文件名称
ENTRYPOINT ["dotnet", "Service.Web.dll"]
注意:添加Dockerfile文件之后,记得将属性改为始终复制
二、发布
按照正常发布netcore工程的步骤发布即可,发布后public目录下会有一个Dockerfile文件。
三、打包为docker镜像
此处只记录在linux下打包过程,默认已经在linux上安装docker。
- 将发布文件夹public压缩为public.rar文件
- 拷贝到linux下/tmp目录
- 解压缩 sudo unrar x public.rar
- 创建镜像
cd /tmp/public
sudo docker build -t webdocker .
注意:-t tag 指镜像名称
结尾必须加上点
- 所有步骤全都成功则打包镜像成功
四、运行容器
sudo docker images # 查询当前镜像
sudo docker run -p 5002:5000 --name [容器名] --restart=always -d [镜像名/镜像id]
参数说明:
-p 5002:5000 将容器内的5000端口映射为外部的5002端口
--name 容器名
-d 后台运行
--restart=always 总是重启