注意:Net 6 的Program的代碼中要加入:
builder.WebHost.UseKestrel(so =>
{
? ? so.ListenAnyIP(8080);
});其目的是要讓服務(wù)再容器內(nèi)運(yùn)行時(shí)監(jiān)聽(tīng)某端口惕澎,最好和dockerfile暴露端口一致卒密,否則你訪問(wèn)容器訪問(wèn)不到
一.編寫(xiě)dockerfile
由于dockerfile一堆命令讓人頭暈眼花摸不著頭腦,再加上我喜歡自己先發(fā)布項(xiàng)目release文件后拖到linux文件里拔稳,故則排除了一堆命令,只用了簡(jiǎn)單的命令:
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其實(shí)只干了兩件事:1.走來(lái)表明了容器的引用dotnet運(yùn)行時(shí)環(huán)境為6.0.可以更具需要直接改寫(xiě)為對(duì)應(yīng)環(huán)境就行说搅,如3.1等
2.指示容器暴露監(jiān)聽(tīng)了端口8080
3.容器運(yùn)行時(shí)執(zhí)行dotnet命令伍绳,則可以拖此dockerfile到對(duì)應(yīng)linux需要打包的項(xiàng)目相同目錄下就行
二。打開(kāi)cmd或其他終端害捕,連接linux服務(wù)器绿淋,cd 到項(xiàng)目和dockerfile對(duì)應(yīng)的目錄下即可
三。執(zhí)行:docker build -t yourimagesname .? ? ? ? (**注意你的鏡像名稱(chēng)后要空格加點(diǎn))尝盼。這樣就能打包生成了項(xiàng)目的鏡像
四。執(zhí)行:docker run -p 主機(jī)暴露的端口:容器暴露的端口 --name 容器名稱(chēng) -d 上一步的鏡像名稱(chēng)
執(zhí)行完第四步佑菩,若端口沒(méi)被占用則能正確運(yùn)行起來(lái)一個(gè)容器
以下是其他Linux一些命令:
docker logs 容器ID? ? ? --可以查看容器的日志
docker ps? ? ? ? ? ? ? ? ? ? ?--可以查看正確運(yùn)行的容器信息
docker ps -a? ? ? ? ? ? ? ? ?--可以查看所有容器信息盾沫,包含停用的等
docker images? ? ? ? ? ? ? --可以查看主機(jī)下的所有鏡像信息
docker stop 容器id? ? ? ? --可以停用某容器
docker rm -f 容器id? ? ? ? --可以刪除某容器
docker exec -it 容器id? bash? 進(jìn)入容器
docker logs --since 30m 容器id? ?查看某容器30min的日志