【Docker】使用 Docker 部署 .Net Core 项目 (四)
系列目录:
【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )
【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二)
【Docker】 .Net Core 3.1 webapi 集成EF Code First (MySql) (三)
【Docker】使用Docker 发布 .Net Core 项目 (四)
.......持续不定期更新中
如果安装使用Docker 请看目录(一)、(二),此文章不再介绍。
首先要生成Dockerfile文件,然后根据这个文件build docker 的 image(镜像),然后根据image,创建container(容器)。
1.把要发布的项目添加 Docker 支持(或者在新建项目的时候就添加docker支持),然后在项目目录下找到 Dockerfile 配置文件。
右键dockerfile文件,复制到输出目录改为 始终复制 ,这样发布的项目才会包含这个文件。
2. 修改dockerfile文件
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base #工作目录 WORKDIR /app #将整个publish文件 放到该文件夹下 ..的意识是 ./app COPY . . EXPOSE 8001 #启动命令 如果项目内没有指定useUrl 可以使用 ENTRYPOINT ["dotnet", "Test.dll","urls=http://*:8001"] 指定 ENTRYPOINT ["dotnet", "Test.dll"]
发布项目,把Publish目录下的文件 拷贝到Linux 服务器中
3. 到目标目录下,使用构建docker image
docker build -t test .
test的意思是这个 image 的名字取名为test
使用 docker images查看镜像是否创建
docker images
4. 启动容器
生成容器,每运行一次,就会新建一个容器(这里的5000:5000 代表把容器内的5000端口映射到你主机的5000端口,容器端口在后)
--name 是指定容器的名字 不指定会默认
docker run --name test1 -it -p 5000:5000 test
执行完之后报错,提示如下
研究后得知,我在项目中配置了https的地址,然而https在docker中不启用。
解决办法:删除不使用https 或者修改 appsetting文件
"Kestrel": { "Endpoints": { "HttpsInlineCertFile": { "Url": "https://*:8001", "Certificate": { "Path": "socialnetwork.pfx", "Password": "xxx" } } } }
5.继续创建容器,先删除之前容器和镜像,再重新build镜像,run容器。
docker rmi test docker rm test1 docker build -t test . docker run --name test1 -it -p 5000:5000 test
运行成功
测试启动成功,现在把这个容器删除 继续创建容器,命令加上 -d,使容器后台运行
docker run --name test1 -it -d -p 5000:5000 test
网页正常访问,你看到端口是80,是因为使用了nginx转发
6.检查运行状态、日志
查看容器运行状态
docker ps -a
查看docker日志
docker logs --since 30m CONTAINER_ID
其他具体操作请看【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )