注意:Net 6 的Program的代码中要加入:
builder.WebHost.UseKestrel(so =>
{
so.ListenAnyIP(8080);
});其目的是要让服务再容器内运行时监听某端口,最好和dockerfile暴露端口一致,否则你访问容器访问不到
一.编写dockerfile
由于dockerfile一堆命令让人头晕眼花摸不着头脑,再加上我喜欢自己先发布项目release文件后拖到linux文件里,故则排除了一堆命令,只用了简单的命令:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN sed -i 's/TLSv1.2/TLSv1/g' /etc/ssl/openssl.cnf
WORKDIR /app
COPY . /app
EXPOSE 8080
#ENTRYPOINT ["dotnet", "mmm.net.cooperation.Api.dll","-b","0.0.0.0"]
ENV ASPNETCORE_ENVIRONMENT=Production
ENTRYPOINT ["dotnet","Yarp.dll"]
上述dockerfile其实只干了两件事:1.走来表明了容器的引用dotnet运行时环境为6.0.可以更具需要直接改写为对应环境就行,如3.1等
2.指示容器暴露监听了端口8080
3.容器运行时执行dotnet命令,则可以拖此dockerfile到对应linux需要打包的项目相同目录下就行
二。打开cmd或其他终端,连接linux服务器,cd 到项目和dockerfile对应的目录下即可
三。执行:docker build -t yourimagesname . (**注意你的镜像名称后要空格加点)。这样就能打包生成了项目的镜像
四。执行:docker run -p 主机暴露的端口:容器暴露的端口 --name 容器名称 -d 上一步的镜像名称
执行完第四步,若端口没被占用则能正确运行起来一个容器
以下是其他Linux一些命令:
docker logs 容器ID --可以查看容器的日志
docker ps --可以查看正确运行的容器信息
docker ps -a --可以查看所有容器信息,包含停用的等
docker images --可以查看主机下的所有镜像信息
docker stop 容器id --可以停用某容器
docker rm -f 容器id --可以删除某容器
docker exec -it 容器id bash 进入容器
docker logs --since 30m 容器id 查看某容器30min的日志