.NET ์ผ๋ก Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์์ต๋๋ค.
A ํ๋ก์ ํธ๋ฅผ Image๋ก ๋ง๋ค ๋ ํ์ฌ๋ B,C,D,E,F ํ๋ก์ ํธ๊ฐ ์ฐธ์กฐ๋ก ๋ฌ๋ ค์๊ณ ๊ทธ ๋ฐ์ Nuget ํจํค์ง๋ ์ฝ๊ฐ ์์ต๋๋ค.
์ด ์ํ์์ Docker Build๋ฅผ ์ํํ๋ฉด ์๊ฐ์ด 5~10๋ถ ๊ฐ๋ ์์๋๋ฉฐ, ๊ฐํน grpc ํต์ ์ฅ์ ๋ผ๋ ๋ด์ฉ์ด ๋ฐ์ํ๋ฉด์ ์ทจ์๋๋ค๋ ๋ก๊ทธ๊ฐ ๋จ์ต๋๋ค. ๋จ์ํ ๋น๋ ์๊ฐ์ด ๊ธธ์ด์ ๊ทธ๋ฐ๊ฑด์ง ๊ฐ์ด ์ ์์กํ๋ค์.
ํน์ ์ด B,C,D,E,F ๋ฅผ Nuget ํจํค์ง๋ก ๋ง๋ค์ด์ A ํ๋ก์ ํธ์ ์ฐธ์กฐ์ํค๋ฉด, ๋น๋์๋๊ฐ ๋นจ๋ผ์ง๋์ง ์ฌ์ญ๋๋ค.
์๋ฌด๋๋ .NET์์ Docker ๋น๋ํ ๋ ๋ฐ์ํ๋ ์๋ฆฌ๋ฅผ ์ดํดํ์ง ๋ชปํ๋ค๋ณด๋ ์ด๋ฐ ์ง๋ฌธ์ด ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋๋ Dockerfile ์ ๋๋ค. PAT ๋ถ๋ถ์ ์ ๊ฑฐํ์ต๋๋ค.
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["AwesomeSwagWeb/AwesomeAutoImageSlice/Nuget.config", "."]
COPY ["Translate/Translate/Translate/nuget.config", "./Translate/"]
COPY ["AwesomeSwagWeb/AwesomeAutoImageSlice/AwesomeAutoImageSlice.csproj", "./AwesomeAutoImageSlice/"]
COPY ["AwesomeSwagWeb/AwesomeSwagSDK/AwesomeSwagSDK.csproj", "./AwesomeSwagSDK/"]
COPY ["Crawling/ElevenStreet/ElevenStreet.csproj", "./Crawling/ElevenStreet/"]
COPY ["Crawling/NaverSmartStore/NaverSmartStore.csproj", "./Crawling/NaverSmartStore/"]
COPY ["ShopeeV2/ShopeeSDKV2/ShopeeSDKV2.csproj", "./ShopeeV2/ShopeeSDKV2/"]
COPY ["Translate/Translate/Translate/Translate.csproj", "./Translate/"]
COPY ["Crawling/GMarket/GMarket.csproj", "./Crawling/GMarket/"]
COPY ["AwesomeSwagWeb/AwesomeFunctionInfraStructure/AwesomeFunctionInfraStructure.csproj", "./AwesomeFunctionInfraStructure/"]
ARG PAT=localhost
RUN sed -i "s|</configuration>|<packageSourceCredentials><EcremmoceSDK><add key=\"Username\" value=\"PAT\" /><add key=\"ClearTextPassword\" value=\"${PAT}\" /></EcremmoceSDK></packageSourceCredentials></configuration>|" nuget.config
RUN wget -qO- https://aka.ms/install-artifacts-credprovider.sh | bash
ENV DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0
ENV NUGET_CREDENTIALPROVIDER_SESSIONTOKENCACHE_ENABLED true
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS {\"endpointCredentials\": [{\"endpoint\":\"https://pkgs.dev.azure.com/ecremmoce/_packaging/EcremmoceSDK/nuget/v3/index.json\", \"username\":\"Email\", \"password\":\"PAT\"}]}
RUN dotnet restore "AwesomeAutoImageSlice/AwesomeAutoImageSlice.csproj"
COPY . .
WORKDIR "/src/AwesomeAutoImageSlice"
RUN dotnet build "AwesomeAutoImageSlice.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "AwesomeAutoImageSlice.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AwesomeAutoImageSlice.dll"]
์๋๋ ๋ก๊ทธ์ ๋๋ค.
PS docker build --tag awesomeautoimageslice:v1 -f ./AwesomeSwagWeb/AwesomeAutoImageSlice/Dockerfile .
[+] Building 2.4s (7/28)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 2.60kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.1s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> [internal] load build context 2.1s
=> => transferring context: 1.35MB 2.1s
=> [build 1/18] FROM Microsoft Artifact Registry 2.1s
=> => resolve Microsoft Artifact Registry 0.0s
=> => sha256:9de0f41d10e468114e385ab1160a345f5fc22a08b9470d94a17e58fd9e60846e 13.63MB / 27.56MB 2.1s
=> => sha256:9a62ac752fdce16f8531a11e900d9851a6316fd978a23e2a589fc4534fd7d6c7 14.68MB / 106.09MB 2.1s
=> => sha256:d11f0b2c983ad35ae7b129745ce4bc33c29720f4e746658fb856a776271c013e 2.01kB / 2.01kB 0.0s
[+] Building 464.0s (10/28)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 2.60kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.1s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> ERROR [internal] load build context 463.8s
=> => transferring context: 5.77GB 386.1s
=> [build 1/18] FROM Microsoft Artifact Registry 13.2s
=> => resolve Microsoft Artifact Registry 0.0s
=> => sha256:9de0f41d10e468114e385ab1160a345f5fc22a08b9470d94a17e58fd9e60846e 27.56MB / 27.56MB 3.5s
=> => sha256:9a62ac752fdce16f8531a11e900d9851a6316fd978a23e2a589fc4534fd7d6c7 106.09MB / 106.09MB 6.6s
=> => sha256:d11f0b2c983ad35ae7b129745ce4bc33c29720f4e746658fb856a776271c013e 2.01kB / 2.01kB 0.0s
=> => sha256:4541344c527ed4f6515a5408c21c56a032b1087ddda44314e0d5bc91d4fa6138 7.11kB / 7.11kB 0.0s
=> => sha256:d1c77e057844e46417d0d034b7a976e2f0a36b9f40e3abb2371a89d2b7f4eadc 8.65MB / 8.65MB 1.6s
=> => sha256:c4e077f49300f7f624ae7624โ โ 7a12599c32c146d25dea6b62d4405d067a2ec1 2.17kB / 2.17kB 0.0s
=> => sha256:3bcabca0b205c751ff0f7d8178bf36817aac273eacc8fa79164daa823d19b6c1 12.69MB / 12.69MB 3.3s
=> => extracting sha256:d1c77e057844e46417d0d034b7a976e2f0a36b9f40e3abb2371a89d2b7f4eadc 0.4s
=> => extracting sha256:9de0f41d10e468114e385ab1160a345f5fc22a08b9470d94a17e58fd9e60846e 2.0s
=> => extracting sha256:9a62ac752fdce16f8531a11e900d9851a6316fd978a23e2a589fc4534fd7d6c7 5.4s
=> => extracting sha256:3bcabca0b205c751ff0f7d8178bf36817aac273eacc8fa79164daa823d19b6c1 0.7s
=> [base 1/2] FROM Microsoft Artifact Registry 0.0s
=> CACHED [base 2/2] WORKDIR /app 0.0s
=> CACHED [final 1/2] WORKDIR /app 0.0s
=> [build 2/18] WORKDIR /src 0.5s
------CHED [final 1/2] WORKDIR /app 0.0s
[internal] load build context:
rpc error: code = Canceled desc = grpc: the client connection is closing
PS C:\Users\user\source\repos\christian289_Ecremmoce> docker build --tag awesomeautoimageslice:v1 -f ./AwesomeSwagWeb/AwesomeAutoImageSlice/Dockerfile .
[+] Building 579.3s (10/28)
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> CANCELED [internal] load build context 579.0s
=> => transferring context: 4.87GB 578.4s
=> [build 1/18] FROM Microsoft Artifact Registry 0.0s
=> [base 1/2] FROM Microsoft Artifact Registry 0.0s
=> CACHED [base 2/2] WORKDIR /app 0.0s
=> CACHED [final 1/2] WORKDIR /app 0.0s
=> CACHED [build 2/18] WORKDIR /src 0.0s
context canceled
PS C:\Users\user\source\repos\christian289_Ecremmoce> docker build --tag awesomeautoimageslice:v1 -f ./AwesomeSwagWeb/AwesomeAutoImageSlice/Dockerfile .
[+] Building 658.2s (9/28)
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 2.70kB 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B
=> [internal] load build definition from Dockerfile 0.1scrosoft.com/dotnet/sdk:5.0
=> => transferring dockerfile: 2.70kB 0.0scrosoft.com/dotnet/runtime:5.0
=> [internal] load .dockerignore 0.1sm/dotnet/sdk:5.0
=> => transferring context: 2B 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.0sotnet/runtime:5.0
=> [build 1/18] FROM Microsoft Artifact Registry 0.0s
[+] Building 755.2s (21/28)
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 2.70kB 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> [internal] load metadata for Microsoft Artifact Registry 0.0s
=> [build 1/18] FROM Microsoft Artifact Registry 0.0s
=> [internal] load build context 749.6s
=> => transferring context: 26.22GB 749.0s
=> [base 1/2] FROM Microsoft Artifact Registry 0.0s
=> CACHED [base 2/2] WORKDIR /app 0.0s
=> CACHED [final 1/2] WORKDIR /app 0.0s
=> CACHED [build 2/18] WORKDIR /src 0.0s
=> [build 3/18] COPY [AwesomeSwagWeb/AwesomeAutoImageSlice/Nuget.config, .] 3.5s
=> [build 4/18] COPY [Translate/Translate/Translate/nuget.config, ./Translate/] 0.2s
=> [build 5/18] COPY [AwesomeSwagWeb/AwesomeAutoImageSlice/AwesomeAutoImageSlice.csproj, ./AwesomeAutoImageSlice/] 0.1s
=> [build 6/18] COPY [AwesomeSwagWeb/AwesomeSwagSDK/AwesomeSwagSDK.csproj, ./AwesomeSwagSDK/] 0.1s
=> [build 7/18] COPY [Crawling/ElevenStreet/ElevenStreet.csproj, ./Crawling/ElevenStreet/] 0.1s
=> [build 8/18] COPY [Crawling/NaverSmartStore/NaverSmartStore.csproj, ./Crawling/NaverSmartStore/] 0.1s
=> [build 9/18] COPY [ShopeeV2/ShopeeSDKV2/ShopeeSDKV2.csproj, ./ShopeeV2/ShopeeSDKV2/] 0.1s
=> [build 10/18] COPY [Translate/Translate/Translate/Translate.csproj, ./Translate/] 0.1s
=> [build 11/18] COPY [Crawling/GMarket/GMarket.csproj, ./Crawling/GMarket/] 0.1s
=> [build 12/18] COPY [AwesomeSwagWeb/AwesomeFunctionInfraStructure/AwesomeFunctionInfraStructure.csproj, ./AwesomeFunctionInfraStructure/] 0.1s
=> ERROR [build 13/18] RUN sed -i โs|||โ nuget.config 0.5s
[build 13/18] RUN sed -i โs|||โ nuget.config:
#21 0.421 sed: canโt read nuget.config: No such file or directory
executor failed running [/bin/sh -c sed -i โs||<add key="Username" value="PAT" /><add key="ClearTextPassword" value="${PAT}" />|โ nuget.config]: exit code: 2
PS C:\Users\user\source\repos\christian289_Ecremmoce>
์ ๋ก๊ทธ๋ docker build๋ฅผ 3ํ ์ํํ ๋ก๊ทธ์ ๋๋ค.