asp.net core 项目运行在docker容器

Docker

镜像
容器

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

asp.net core 项目运行在docker容器

1、创建项目

根据需求,创建好项目以后,保证可以正常运行

2、创建dockerfile文件

image

自动生成的dockerfile文件会包含build和publish命令,一般我们需要自己重新编写dockerfile,以满足最基本的需求

# 使用运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:8.0 

# 设置工作目录
WORKDIR /app

# 把目录下的内容都复制到当前目录下
COPY . .

# 暴露8080端口(注意:暴漏的端口就是程序启动的端口)
EXPOSE 8080

# 运行镜像入口命令和可执行文件名称
ENTRYPOINT ["dotnet", "dockerDemo.dll"]

修改Dockerfile文件的属性,修改为始终复制:

image

保证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文件生成镜像

image

此时,在docker中镜像中,就会出现刚刚创建的image

image

4、创建容器

有了镜像以后,我们就能根据镜像创建容器

docker run --name=dockerdemo -p 8082:8080 -d mydockerdemo

--name:指定容器名称
-p:指定容器端口(8082-映射到主机的端口,8080-容器内部暴露出去的端口,与dockerfile文件中暴露的端口保持一致,否则无法运行)
-d :指定容器在后台运行

image

出现下面的一长串字符串,则说明镜像运行成功。可以使用docker ps命令查看正在运行的容器:

image

image

浏览器中访问8082端口,即可看到程序正常运行

image

posted @ 2024-05-13 11:35  一抹嫣红  阅读(21)  评论(0)    收藏  举报