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 容器名字