Docker部署NetCore
一:Docker 安装及设置
安装Docker
yum -y install docker
启动Docker服务
systemctl start docker.service
二:新建Net Core 程序
dotnet new mvc -n "myCoreMvc"
1.添加 DockerFile文件
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
WORKDIR /app
EXPOSE 5000
COPY . .
ENTRYPOINT ["dotnet", "myCoreMvc.dll"]
2.设置程序入口,在Program.cs添加如下配置
webBuilder.UseUrls("http://*:5000").UseStartup();
3.发布程序,程序根目录执行以下命令
dotnet publish
三:上传到Linux 服务器,xshell连接,xftp上传文件
mkdir app
注:把发布后的文件放到app文件夹中
四:开始部署
进入执行目录
cd app
执行镜像构建
docker build -t mycore .
执行
docker images
查看build的镜像,如没意外会看到mycore
这个镜像。启动一个容器
docker run -itd -p 5000:5000 --name core01 mycore
启动第二个容器
docker run -itd -p 5001:5000 --name core01 mycore
查看运行的容器
docker ps
查看所有的容器
docker ps -a
至此,部署完成。
五:浏览器访问程序
输入:http://Linux主机ip:5000
输入:http://Linux主机ip:5001
六:补充Docker命令
镜像文件和容器命令
#查看所有镜像
docker images
#删除一个imageid的镜像
docker rmi [IMAE_ID]
#删除所有镜像
sudo docker rmi $(docker images -q)
#查看所有容器运行状态
docker ps -a
docker container ls -all
#删除一个containerid的容器(实例)
docker rm [CONTAINER_ID]
#删除所有容器
docker rm $(sudo docker ps -a -q)
容器日志
#查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2020-04-01" --tail=100 [CONTAINER_ID]
#查看某时间之后的日志:
docker logs -t --since="2020-04-01" [CONTAINER_ID]
#查看某时间段日志:
docker logs -t --since="2020-04-01" --until "2020-04-02" [CONTAINER_ID]
#查看最近30分钟的日志:
docker logs --since 30m [CONTAINER_ID]
七:补充Dockerfile基本语法
#FROM mcr.microsoft.com/dotnet/core/sdk:3.1
表示以版本为3.1 的mcr.microsoft.com/dotnet/core/sdk作为基础镜像进行新镜像的构建
#WORKDIR /app
指定工作目录为/app
#COPY . .
拷贝的意思,其中的点代表Dockerfile所在的目录,整句话的意思是将Dockerfile所在目录的所有文件拷贝到容器的当前目录下,注意点后面有空格
#EXPOSE 5000
暴露出的端口
#ENTRYPOINT ["dotnet", "myCoreMvc.dll"]
启动程序
八:部署过程遇到的其他问题
1. 拉取镜像报错
docker pull mcr.microsoft.com/dotnet/core/sdk:3.1
报错内容如下:
Error response from daemon: Get https://mcr.microsoft.com/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
解决:依次执行以下命令
#使用daocloud国内镜像源
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ef017c13.m.daocloud.io
#设置环境变量
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://f2d6cb40.m.daocloud.io"
#重启Docker
sudo service docker restart
#拉取镜像
docker pull mcr.microsoft.com/dotnet/core/sdk:3.1
2.安装的 .NET Core 工具未能运行
原因:找不到可执行文件 或 找不到 .NET Core 运行时的正确版本
报错内容如下:
Could not execute because the specified command or file was not found.
Possible reasons for this include:
* You misspelled a built-in dotnet command.
* You intended to execute a .NET Core program, but dotnet-xyz does not exist.
* You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
解决:检查DockerFile 执行目录是否正确
微软地址:排查 .NET Core 工具使用问题
2.删除多余的SDK
#查看所有的SDK包
dotnet --list-sdks
#查看所有的运行时包
dotnet --list-runtimes
#删除
yum remove dotnet-host
#安装SDK
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.1.1