最近研究 docker 在Linux 下部署 .net core 项目,在过程中踩了很多坑,网上的资料对我帮助确实大,但有些问题未指明出来。

特地整理一份在发布文档

本文使用的是 root 账号操作,如果不是root账号,命令前需要增加 sudo

1、安装dotnet (这一步可以不需要)

https://dotnet.microsoft.com/download

以安装运行时 2.1版本为例

https://dotnet.microsoft.com/download/linux-package-manager/centos/runtime-current

rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

yum update

yum -y install aspnetcore-runtime-2.1

查看 dotnet 版本

dotnet --info

2、安装Docker CE 版

https://www.cnblogs.com/longjieboke/p/10734557.html

3、配置docker加速器

本方使用的是阿里云镜像加速器,参考

https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.549.19e611be46gAPY

容器镜像服务 -> 镜像加速器

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["你的镜像加速地址"]

}

EOF

重启docker服务

systemctl daemon-reload

systemctl restart docker

4、.net core 创建 Dockerfile

由于默认生成的 Dockerfile 是包含编译和发布。更改Dockerfile文件内容

#基于 `microsoft/dotnet:2.1-aspnetcore-runtime` 来构建镜像,自行更改为你自己的

FROM microsoft/dotnet:2.1-aspnetcore-runtime

#拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中 , publish 可自行更改名称

COPY . /publish

#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹

WORKDIR /publish

#设置Docker容器对外暴露5000端口,防火墙需要开放此端口,必须和 dotnet xx.dll运行时的端口保持一致

EXPOSE 5000

#使用`dotnet xx.dll`来运行应用程序

ENTRYPOINT ["dotnet", "ToolManager.dll"]

5、发布项目

6、将发布的文件拷备到 能发os的系统文件夹中

创建 docker(自定义名称)文件夹

使用winSCP工具上传文件到linux服务器的指定文件夹

7、生成镜像

cd 到 刚才的文件夹下

docker build -t 镜像名称 .       (注意:最后空格后面有一个.)。

示例: docker build -t demo-netcore .

8、查看生成的镜像

docker images

9、运行docker容器

docker run --name 容器名称 -d -p 5000:5000 镜像名称

示例: docker run --name democore -d -p 54907:80 demo-netcore

democore 容器的名称。

-d 后台进程。

-p是进行宿主和容器之间端口的映射,(-p 宿主端口:容器端口)

docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always

10、检验docker容器是否运行成功

docker ps -a

docker ps 查看正在运行的容器

如果异常,使用命令

docker run -it 镜像名称 bash

查看异常

如果 提示 sdk版本不同

删除旧版 yum remove -y aspnetcore*

更新 yum  -y install aspnetcore-runtime-2.1

11、防火墙开放端口

查看防火墙状态:systemctl status firewalld

开启防火墙:systemctl start firewalld

开放端口:firewall-cmd --zone=public --add-port=【端口】/tcp --permanent

firewall-cmd --reload   重启防火墙

firewall-cmd --query-port=【端口】/tcp  查看端口是否开放

12、访问

因为运行docker容器的时候 进行了 端口映射 所以外部访问端口 为 5000

http://192.168.1.1:5000

13、停止和删除容器

docker stop (容器id)

sudo docker rm (容器id)

14、删除镜像

docker rmi (镜像ID)

15、查看docker日志

docker logs -f -t --since="2017-05-31" --tail=10 alibaba-vica-netapi

docker logs 6dc1e5f74c0

16、停止和删除容器

docker stop (容器id)

sudo docker rm (容器id)

17、删除镜像

docker rmi (镜像ID)

18、创建容器

docker commit -p 容器ID 快照名称

19、保存本地tar备份

docker save -o ~/xxxx.tar 容器名称

20、恢复docker备份

docker load -i docker-alibaba-server.tar

21、进入 docker容器内部

docker exec -it 容器id /bin/bash

22、退出容器

Ctrl + D 或 exit

遇到的问题

发布后访问时提示 连接被重置

原因由于程序中

并且

dockerfile 文件中

EXPOSE 5000 #端口必须跟里面的端口保持一致

.net core 部署 docker (CentOS7)的更多相关文章

  1. ASP.NET Core部署到CentOS7,使用Nginx代理

    ASP.NET Core 的运行环境由新开发的 Kestrel Server 负责,IIS 退回到 HTTP 的侦听器的角色,微软也特别为了这个需求开发了 IIS Platform Handler,以 ...

  2. asp.net Core 部署到CentOs7上,使用Nginx做代理

    一.CentOs7部署Nginx 1.准备工作 Nginx的安装依赖于以下三个包,意思就是在安装Nginx之前首先必须安装一下的三个包,注意安装顺序如下: 1 SSL功能需要openssl库,直接通过 ...

  3. .net core 部署 Docker 所遇到的几个问题

    1.Connection reset by peer 造成这个问题的主要原因是在program.cs 文件中,未加入端口: public static IWebHostBuilder CreateWe ...

  4. .Net Core 部署到 CentOS7 64 位系统中的步骤

    建议使用 root 管理员账户操作 1.安装工具 1.apache 2..Net Core(dotnet-sdk-2.0) 3.Supervisor(进程管理工具,目的是服务器一开机就启动服务器 上发 ...

  5. ASP .Net Core系统部署到 CentOS7 64 具体方案

    .Net Core 部署到 CentOS7 64 位系统中的步骤 1.安装工具 1.apache 2..Net Core(dotnet-sdk-2.0) 3.Supervisor(进程管理工具,目的是 ...

  6. docker+efk+.net core部署

    部署环境 centos7 本主要利用efk实现日志收集 一.创建docker-compose es地址:https://www.elastic.co/guide/en/elasticsearch/re ...

  7. Linux环境基于CentOS7 搭建部署Docker容器

    1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...

  8. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  9. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

随机推荐

  1. 字符串匹配 - sunday算法

    常见的字符串匹配算法有BF.KMP(教科书中非常经典的).BM.Sunday算法 这里主要想介绍下性能比较好并且实现比较简单的Sunday算法 . 基本原理: 从前往后匹配,如果遇到不匹配情况判断母串 ...

  2. tomcat+bean例子

    C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\app\WEB-INF\classes\文件夹下 建立beanTestPa ...

  3. JS下拉页面时一个横幅的样式和js

    整理之前的代码,发现有一个js,就是页面往下浏览时,上面的商品名称和购买按钮在页面上方悬浮的,就整理下来,代码如下: <script type="text/javascript&quo ...

  4. The Django Book(自定义ModelAdmi类)

    默认的,管理界面下显示的东西只是 python2:def __unicode__(self): 和 python3:def __str__(self): 中返回的字段内容 想要让它更加的多元化的话 c ...

  5. Unity2017新功能Sprite Atlas详解

    Sprite Atlas(精灵图集)Sprite Atlas 针对现有的图集打包系统Sprite Packer在性能和易用性上的不足,进行了全面改善.除此之外,相比Sprite Packer,Spri ...

  6. 格式化输出python

    一.格式化输出 1.实例 name = input("Name:") age = input("Age:") job = input("Job:&qu ...

  7. ios 数组和字典

    一.数组.  数组只能存放对象类型的数据  2.数组中的对象是有序的 (index)     (一)可变数组   NSArray:NSObject  不可变数组 作用:容器类 存放的是对象类型的数据, ...

  8. 2019.01.14 bzoj5343: [Ctsc2018]混合果汁(整体二分+权值线段树)

    传送门 整体二分好题. 题意简述:nnn种果汁,每种有三个属性:美味度,单位体积价格,购买体积上限. 现在有mmm个询问,每次问能否混合出总体积大于某个值,总价格小于某个值的果汁,如果能,求所有方案中 ...

  9. C++之输出100-200内的素数

    素数(质数)    除了1和它本身以外不再被其他的除数整除. // 输出100--200内的素数 #include<iostream> using namespace std; int m ...

  10. rm与管道使用

    一 问题初始:用通常意义的管道使用这样可以:(1)ls -l | sed -n '/~$/p' 我用显示出系统自己建立的备份文件这时,我想删除这些文件,我仍然使用了管道,并执行了以下命令(2)ls - ...