把net6创建的core项目丢docker里面运行

88 阅读2分钟

docker-compose命令默认会执行当前目录下的

docker-compose.yml 和 docker-compose.override.yml这两个文件

一般在docker-compose.override.yml里面放构建Dockerfile,docker-compose.yml里面放配置,为什么没研究可能约定俗成吧

如果要使用docker-compose运行非docker-compose.yml,docker-compose.override.yml文件可以使用命令开关 docker-compose -f xxx.yml -f xx.yml (build或者up -d)

Dockerfile可以自动生成很方便,但是默认开放端口都是80,这个端口通过如下方式修改

docker-compose

#添加.net6基础镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
#指定项webapi或mvc站点的内部启动端口,默认是80
ENV ASPNETCORE_URLS http://+:5000

#暴露docker容器端口
EXPOSE 5000

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Vboot.Web/Vboot.Web.csproj", "Vboot.Web/"]
COPY ["Vboot.App/Vboot.App.csproj", "Vboot.App/"]
COPY ["Vboot.Extend/Vboot.Extend.csproj", "Vboot.Extend/"]
COPY ["Vboot.Core/Vboot.Core.csproj", "Vboot.Core/"]
RUN dotnet restore "Vboot.Web/Vboot.Web.csproj"

#拷贝发布目录下的所有文件到容器的工作根目录
#COPY . . (这样写也可以)
COPY . .
WORKDIR "/src/Vboot.Web"
RUN dotnet build "Vboot.Web.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Vboot.Web.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
#容器入口点
ENTRYPOINT ["dotnet", "Vboot.Web.dll"]

接着去Dockerfile目录下构建image

docker build -t rootweb:0.0.1 .

rootweb 表示构建的镜像名称,:0.0.1表示镜像版本号,注意镜像名后面有个空格 + 英文点号,表示构建当前路径下的文件。

上面这条命令是用默认配置文件名 Dockerfile 构建的镜像,如果用自定义配置文件名构建镜像,需要加 -f 参数。

默认网络docker0,它不能用域名访问,所以要创建自定义网络

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

参数说明:

--driver bridge #表示桥接模式\

--subnet 192.168.0.0/16 #16表示最多支持65535个ip,可以分配192.168.0.2到192.168.255.255,如果没有指定--subnet参数默认网段为172.17.0.0/16,默认网关为172.17.0.1;\

--subnet 192.168.0.0/24 #24表示最多支持254个ip,可以分配192.168..0.2到192.168.0.255\

--gateway #表示docker容器的网关\

mynet表示网络名

在docker 中直接 run 创建容器时不加自定义的网络,默认使用网络名为bridge的网络,这是docker0网络,容器之间无法使用容器名相互ping通,只能通过ip相互ping通。

我们自己定义的网络,容器之间是可以直接通过容器名相互ping通的。

查看mynet网络的详细信息:

docker network inspect mynet

或者直接在docker run 的时候 加上 --net=host 的开关 共享宿主机网卡。

给已有容器设置开机自动启动

docker update --restart=always 容器名字

取消容器开机自动启动

docker update --restart=no 容器名字