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

特地整理一份在发布文档

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

 

1、安装dotnet

 

以安装运行时 2.2版本为例

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

yum update

install aspnetcore-runtime-2.2

 

查看 dotnet 版本

dotnet –info

 

2、安装docker

yum install docker

 

查看docker版本信息

docker version

 

3、启动docker

systemctl  start docker.service

 

4、配置开机启动

systemctl enable docker.service

 

5、配置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

 

6、.net core 创建 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”]

 

7、发布项目

 

 

 

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

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

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

 

9、生成镜像

cd 到 刚才的文件夹下

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

 

示例: docker build -t demo-netcore . 

 

10、查看生成的镜像

docker images

 

11、运行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

 

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

docker ps -a

docker ps 查看正在运行的容器

 

如果异常,使用命令

docker run -it 镜像名称 bash

查看异常

 

如果 提示 sdk版本不同

删除旧版 rpm -qa | grep dotnet*

更新对应的 sdk yum install dotnet-sdk-2.1

 

13、防火墙开放端口

查看防火墙状态:systemctl status firewalld

开启防火墙:systemctl start firewalld

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

firewall-cmd –reload   重启防火墙

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

 

 

14、访问

 

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

http://192.168.1.1:5000

 

15、停止和删除容器

docker stop (容器id)

sudo docker rm (容器id)

 

16、删除镜像

docker rmi (镜像id)

 

17、查看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 #端口必须跟里面的端口保持一致