Как мне изменить мой DOCKERFILE для установки wget в kubernetes pod? - PullRequest
0 голосов
/ 26 февраля 2020

Прямо сейчас мой DOCKERFILE создает образ do tnet, который устанавливается / обновляется и запускается в своем модуле в кластере Kubernetes.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ARG DOTNET_CLI_TELEMETRY_OPTOUT=1
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ARG DOTNET_CLI_TELEMETRY_OPTOUT=1
ARG ArtifactPAT
WORKDIR /src

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*

COPY /src .

RUN dotnet restore "./sourceCode.csproj" -s "https://api.nuget.org/v3/index.json"

RUN dotnet build "./sourceCode.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "./sourceCode.csproj" -c 
Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "SourceCode.dll"]
EXPOSE 80

Кластер очень прост и не включает ни скручиваться, ни wget на нем. Итак, мне нужно установить wget или curl в модуле pod / cluster для выполнения скриптовых команд, которые настроены на автоматический запуск после завершения развертывания и запуска. Команда для установки:

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*

внутри DOCKERFILE, похоже, ничего не делает для установки в кластере Kubernetes. Как и после сборки, она запускается и развертывается, если я должен выполнить exe c в модуле и попытаться запустить

wget --help 

Я получаю wget не существует. У меня нет большого опыта в создании DOCKERFILEs, поэтому я действительно зашла в тупик. И я хочу, чтобы это было автоматизировано в DOCKERFILE, так как я не смогу войти в среды выше нашего Теста, чтобы выполнить установку вручную.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

это не относится ни к кубернетам, ни к стручкам. На самом деле вы не можете установить что-либо в kubernetes pod. вы можете устанавливать пакеты в контейнеры, которые запускаются на pod.

Ваша проблема в том, что вы устанавливаете wget в свой образ сборки. Когда вы используете этот образ ниже, вы потеряли все установленные пакеты. потому что эти пакеты принадлежат к образу сборки. build, base, final это разные изображения. Вам нужно явно копировать файлы, как вы делали финальное изображение. например,

  COPY --from=publish /app .

, так что добавьте команду ниже к вашему окончательному изображению, и вы можете без проблем использовать wget.

RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*

см. эту ссылку для получения дополнительной информации && рекомендации.
https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/

0 голосов
/ 26 февраля 2020

Все между:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
ARG DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ARG DOTNET_CLI_TELEMETRY_OPTOUT=1
WORKDIR /app

и:

FROM base AS final

не имеет значения. С этой строки вы начинаете создавать новое изображение из base, которое было определено в первом блоке.

(Кстати, на следующей строке вы без необходимости дублируете оператор WORKDIR. Также, final это имя, которое вы будете использовать для ссылки на base, это не имя для окончательно определенного изображения, так что на самом деле это не имеет смысла - вы не хотите делать, например, COPY --from=final.)

Вам нужно установить wget либо в образе base, либо в последнем определенном образе, который вы фактически будете запускать, в конце.

...