如何 运行 使用自举的 .NET Core API Docker 项目搭建支架?
How to run Skaffold with a bootstrapped .NET Core API Docker project?
我正在考虑使用 Skaffold.dev 来改善我的 Kubernetes 开发体验。
我创建了一个默认的 .NET API 项目,它自动生成了我的 docker 文件:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["TestMicro/TestMicro.csproj", "TestMicro/"]
RUN dotnet restore "TestMicro/TestMicro.csproj"
COPY . .
WORKDIR "/src/TestMicro"
RUN dotnet build "TestMicro.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestMicro.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestMicro.dll"]
我已经创建了一个 Kubernetes 清单,使用 kubectl apply
一切正常 运行。
安装 skaffold 后,我 运行 skaffold init
它自动生成了这个
apiVersion: skaffold/v2beta8
kind: Config
metadata:
name: microservices-investigation
build:
artifacts:
- image: testmicro
context: src\Microservices\TestMicro
deploy:
kubectl:
manifests:
- k8s/TestMicro.yaml
然而,当我 运行 skaffold run
我得到以下信息:
$ skaffold run
Generating tags...
- testmicro -> testmicro:bd61fc5-dirty
Checking cache...
- testmicro: Error checking cache.
failed to build: getting hash for artifact "testmicro": getting dependencies for "testmicro": file pattern [TestMicro/TestMicro.csproj] must match at least one file
我认为这是因为,当我从 CLI 运行 docker build
时,我必须 运行 docker build -f Dockerfile ..
see why here.
我只是不知道如何将其运行写入 skaffold 的 yaml 文件。有什么想法吗?!
在 Skaffold 中,工件 context
(有时称为 工作区)是构建工件时的工作目录。对于基于 Docker 的工件(默认工件类型),工件上下文是 Docker 构建上下文的根,Dockerfile
是工件上下文的根。您可以指定另一个 Docker 文件位置,但它必须位于工件上下文中。
通常 skaffold init
会创建一个 skaffold.yaml
,其中工件上下文是包含 Dockerfile
的目录。所以如果我了解你的情况,我认为你通常 运行 你的 docker build -f Dockerfile ..
在 src/Microservices/TestMicro
。所以你也应该能够 运行 你的 docker build
通过:
C:> cd ...\src\Microservices
C:> docker build -f TestMicro\Dockerfile .`
因此您需要将工件定义更改为以下内容:
build:
artifacts:
- image: testmicro
context: src/Microservices
docker:
dockerfile: TestMicro/Dockerfile
我正在考虑使用 Skaffold.dev 来改善我的 Kubernetes 开发体验。
我创建了一个默认的 .NET API 项目,它自动生成了我的 docker 文件:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["TestMicro/TestMicro.csproj", "TestMicro/"]
RUN dotnet restore "TestMicro/TestMicro.csproj"
COPY . .
WORKDIR "/src/TestMicro"
RUN dotnet build "TestMicro.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestMicro.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestMicro.dll"]
我已经创建了一个 Kubernetes 清单,使用 kubectl apply
一切正常 运行。
安装 skaffold 后,我 运行 skaffold init
它自动生成了这个
apiVersion: skaffold/v2beta8
kind: Config
metadata:
name: microservices-investigation
build:
artifacts:
- image: testmicro
context: src\Microservices\TestMicro
deploy:
kubectl:
manifests:
- k8s/TestMicro.yaml
然而,当我 运行 skaffold run
我得到以下信息:
$ skaffold run
Generating tags...
- testmicro -> testmicro:bd61fc5-dirty
Checking cache...
- testmicro: Error checking cache.
failed to build: getting hash for artifact "testmicro": getting dependencies for "testmicro": file pattern [TestMicro/TestMicro.csproj] must match at least one file
我认为这是因为,当我从 CLI 运行 docker build
时,我必须 运行 docker build -f Dockerfile ..
see why here.
我只是不知道如何将其运行写入 skaffold 的 yaml 文件。有什么想法吗?!
在 Skaffold 中,工件 context
(有时称为 工作区)是构建工件时的工作目录。对于基于 Docker 的工件(默认工件类型),工件上下文是 Docker 构建上下文的根,Dockerfile
是工件上下文的根。您可以指定另一个 Docker 文件位置,但它必须位于工件上下文中。
通常 skaffold init
会创建一个 skaffold.yaml
,其中工件上下文是包含 Dockerfile
的目录。所以如果我了解你的情况,我认为你通常 运行 你的 docker build -f Dockerfile ..
在 src/Microservices/TestMicro
。所以你也应该能够 运行 你的 docker build
通过:
C:> cd ...\src\Microservices
C:> docker build -f TestMicro\Dockerfile .`
因此您需要将工件定义更改为以下内容:
build:
artifacts:
- image: testmicro
context: src/Microservices
docker:
dockerfile: TestMicro/Dockerfile