asp.net core 项目运行在docker容器
Docker
镜像
容器
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
asp.net core 项目运行在docker容器
1、创建项目
根据需求,创建好项目以后,保证可以正常运行
2、创建dockerfile文件
自动生成的dockerfile文件会包含build和publish命令,一般我们需要自己重新编写dockerfile,以满足最基本的需求
# 使用运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# 设置工作目录
WORKDIR /app
# 把目录下的内容都复制到当前目录下
COPY . .
# 暴露8080端口(注意:暴漏的端口就是程序启动的端口)
EXPOSE 8080
# 运行镜像入口命令和可执行文件名称
ENTRYPOINT ["dotnet", "dockerDemo.dll"]
修改Dockerfile文件的属性,修改为始终复制:
保证dockerfile文件可以随程序一起发布
3、生成镜像
首先发布程序,发布程序可以简单写成bat文件(和解决方案同一目录),内容列子如下
set testAPI="."
:: echo "delete publish folder"
rd /s/q publish\testAPI
del /s/q publish\testAPI
:: testAPI
echo "start publish testAPI"
dotnet clean -c Release %testAPI% -v quiet
dotnet restore %testAPI%
dotnet publish -c Release %testAPI% -o ./publish/DockerDemo -v quiet
执行完bat文件以后,会在同目录生成publish文件夹,生成的内容都在其下。
进入到发布目录,就可以生成镜像,使用PowerShell或cmd。使用下面的命令生成镜像:
docker build -t mydockerdemo .
-t :表示tag,标识,为镜像起一个名字
mydockerdemo:镜像名称,方便后面查看区分(必须是小写)
最后的点不能省,代表基于当前目录下的dockerfile文件生成镜像
此时,在docker中镜像中,就会出现刚刚创建的image
4、创建容器
有了镜像以后,我们就能根据镜像创建容器
docker run --name=dockerdemo -p 8082:8080 -d mydockerdemo
--name:指定容器名称
-p:指定容器端口(8082-映射到主机的端口,8080-容器内部暴露出去的端口,与dockerfile文件中暴露的端口保持一致,否则无法运行)
-d :指定容器在后台运行
出现下面的一长串字符串,则说明镜像运行成功。可以使用docker ps命令查看正在运行的容器:
浏览器中访问8082端口,即可看到程序正常运行