Fork me on Gitee

【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 及其使用方法 ( 一 ) 

 

posted @ 2020-12-25 17:41  Roushan_IT  阅读(304)  评论(0编辑  收藏  举报