Popular blog tags

Part 3 - how to containerize a .NET Web application with Docker - using mcr.microsoft.com/dotnet/aspnet image

Published

 

Quick start

cd /var/www/***/developer_mini_core_json_***_docker/Miniblog.Core-master/src

create dockefile

docker build -t iaspnetcore/docker-miniblog .

docker run iaspnetcore/docker-miniblog

 

 

Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:9.0@sha256:3fcf6f1e809c0553f9feb222369f58749af314af6f063f389cbd2f913b4ad556 AS build
WORKDIR /App

# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:9.0@sha256:b4bea3a52a0a77317fa93c5bbdb076623f81e3e2f201078d89914da71318b5d8
WORKDIR /App
COPY --from=build /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]

see:https://learn.microsoft.com/en-us/dotnet/core/docker/build-container?tabs=linux&pivots=dotnet-10-0#create-the-dockerfile

 

# 基于microsoft/dotnet:latest构建Docker Image
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build

# 进入docker中的/usr/local/src目录
RUN cd /usr/local/src
 
# 创建DockerWebAPI目录
RUN mkdir DDockerWebApp
 
# 设置工作路径
WORKDIR /usr/local/src/DockerWebApp

# Copy everything
# 将当前文件夹下的所有文件全部复制到工作目录
COPY . ./


# Restore as distinct layers
RUN dotnet restore

# Build and publish a release
RUN dotnet publish -o out



# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:9.0

WORKDIR /usr/local/src/DockerWebApp

COPY --from=build /usr/local/src/DockerWebApp/out .

# 设置环境变量
ENV ASPNETCORE_URLS=http://+:80
ENV ASPNETCORE_ENVIRONMENT=Production

# 向外界暴露5000端口
EXPOSE 80

# 执行dotnet 命令
ENTRYPOINT ["dotnet", "Miniblog.Core.dll"]

 

cd /var/www/msly/developer_mini_core_json_blogmatterxiaomicom_docker/Miniblog.Core-master/src

docker build -t iaspnetcore/docker-miniblog .

 

output

[+] Building 82.7s (16/16) FINISHED                                                                                                                       docker:default
 => [internal] load build definition from Dockerfile                                                                                                                0.0s
 => => transferring dockerfile: 812B                                                                                                                                0.0s
 => [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:9.0                                                                                                0.2s
 => [internal] load metadata for mcr.microsoft.com/dotnet/sdk:9.0                                                                                                   0.2s
 => [internal] load .dockerignore                                                                                                                                   0.0s
 => => transferring context: 2B                                                                                                                                     0.0s
 => [build 1/7] FROM mcr.microsoft.com/dotnet/sdk:9.0@sha256:1f2cb07e7ced57c4ea61163d485a2ee1cffd63763c6b17a4447ce734ff236475                                      13.5s
 => => resolve mcr.microsoft.com/dotnet/sdk:9.0@sha256:1f2cb07e7ced57c4ea61163d485a2ee1cffd63763c6b17a4447ce734ff236475                                             0.0s
 => => sha256:8c3389f63006ab2550d32064c59f752e5768092bcbe0c18b00dedd332e01f8a5 17.51MB / 17.51MB                                                                    0.7s
 => => sha256:d802eab3e239903cd9c6b59db593726bf3db05d0d978b2f6d388ffb00794c16c 2.70kB / 2.70kB                                                                      0.1s
 => => sha256:3fd17f96bc43bd002026f3e23cef191ee9fa703bd7275137316ad58797687e9a 176.20MB / 176.20MB                                                                  2.7s
 => => sha256:4e5aac397c43961d16aeac80b369cfb1a1efc821b6ac84d9ccd9b8df4824fa50 31.09MB / 31.09MB                                                                    0.9s
 => => extracting sha256:4e5aac397c43961d16aeac80b369cfb1a1efc821b6ac84d9ccd9b8df4824fa50                                                                           1.4s
 => => extracting sha256:3fd17f96bc43bd002026f3e23cef191ee9fa703bd7275137316ad58797687e9a                                                                           6.1s
 => => extracting sha256:d802eab3e239903cd9c6b59db593726bf3db05d0d978b2f6d388ffb00794c16c                                                                           0.0s
 => => extracting sha256:8c3389f63006ab2550d32064c59f752e5768092bcbe0c18b00dedd332e01f8a5                                                                           0.7s
 => [stage-1 1/3] FROM mcr.microsoft.com/dotnet/aspnet:9.0@sha256:5d6784c19991f6cd2b07acbc4f40236e9b90fe4200aebb83c85370fc25a7f248                                  8.3s
 => => resolve mcr.microsoft.com/dotnet/aspnet:9.0@sha256:5d6784c19991f6cd2b07acbc4f40236e9b90fe4200aebb83c85370fc25a7f248                                          0.0s
 => => sha256:8a0e1c84da29c7992538183c144c3e6b649dc7bf4c1f979dcb3471f3096cb90a 167B / 167B                                                                          0.1s
 => => sha256:d5f21e44f6e587e57ecda867a6978d583ca15c5a32e45a54e6819eec53668f0c 3.33kB / 3.33kB                                                                      0.1s
 => => sha256:52e6ba810c215cc68e33ce97427495289955476852c9baef889715773f4cd834 11.32MB / 11.32MB                                                                    0.9s
 => => sha256:0301e63acb597dd4fc38493bf51400f6ec6261feba483f669b889b1bad310462 34.56MB / 34.56MB                                                                    1.8s
 => => sha256:b9136609bef0128191aa157637b98dd7b98e52154ca60c18258d65957a01c6d0 28.24MB / 28.24MB                                                                    1.6s
 => => sha256:aace5b47b3e8da79809de71ca3f39a56807addd2f7ffc74f7aea95dd1d9aa64e 15.73MB / 18.74MB                                                                   81.0s
 => => extracting sha256:b9136609bef0128191aa157637b98dd7b98e52154ca60c18258d65957a01c6d0                                                                           3.2s
 => => extracting sha256:aace5b47b3e8da79809de71ca3f39a56807addd2f7ffc74f7aea95dd1d9aa64e                                                                           0.7s
 => => extracting sha256:d5f21e44f6e587e57ecda867a6978d583ca15c5a32e45a54e6819eec53668f0c                                                                           0.0s
 => => extracting sha256:0301e63acb597dd4fc38493bf51400f6ec6261feba483f669b889b1bad310462                                                                           1.1s
 => => extracting sha256:8a0e1c84da29c7992538183c144c3e6b649dc7bf4c1f979dcb3471f3096cb90a                                                                           0.0s
 => => extracting sha256:52e6ba810c215cc68e33ce97427495289955476852c9baef889715773f4cd834                                                                           0.4s
 => [internal] load build context                                                                                                                                   1.1s
 => => transferring context: 50.32MB                                                                                                                                1.0s
 => [stage-1 2/3] WORKDIR /usr/local/src/DockerWebApp                                                                                                               0.0s
 => [build 2/7] RUN cd /usr/local/src                                                                                                                               1.0s
 => [build 3/7] RUN mkdir DDockerWebApp                                                                                                                             0.9s
 => [build 4/7] WORKDIR /usr/local/src/DockerWebApp                                                                                                                 0.0s
 => [build 5/7] COPY . ./                                                                                                                                           0.7s
 => [build 6/7] RUN dotnet restore                                                                                                                                 32.7s
 => [build 7/7] RUN dotnet publish -o out                                                                                                                          26.2s
 => [stage-1 3/3] COPY --from=build /usr/local/src/DockerWebApp/out .                                                                                               0.3s
 => exporting to image                                                                                                                                              3.2s
 => => exporting layers                                                                                                                                             2.5s
 => => exporting manifest sha256:33a8c2a95766a6d6a0e3c167a5e16e06bf7d75a1e980b080de82aa0a1fbab668                                                                   0.0s
 => => exporting config sha256:2bdfe4068d8b41e5ed2cdab73093bc7f076472e1257d3904b187befd1d752b8e                                                                     0.0s
 => => exporting attestation manifest sha256:8b526c6300f6403920a89d3aac5e0714c6befccab9f66bd928d2dbf1fe500f2a                                                       0.0s
 => => exporting manifest list sha256:095d232575494cd5182760e230a27bc4b5e2e16782d43b19ed2802b28149f82c                                                              0.0s
 => => naming to docker.io/iaspnetcore/docker-miniblog:latest                                                                                                       0.0s
 => => unpacking to docker.io/iaspnetcore/docker-miniblog:latest  

 

docker images
                                                                                                                                                   
IMAGE                                ID             DISK USAGE   CONTENT SIZE   EXTRA
iaspnetcore/docker-miniblog:latest   095d23257549        417MB          126MB        

 

 

 

docker run iaspnetcore/docker-miniblog
warn: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository[60]
      Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted outside of the container. Protected data will be unavailable when container is destroyed. For more information go to https://aka.ms/aspnet/dataprotectionwarning
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {1ad4b072-909a-4c4c-bfcd-83839918575f} may be persisted to storage in unencrypted form.

 

docker run -d -v /c/temp-keys:/root/.aspnet/DataProtection-Keys container-name

Add a -v volume flag to your docker run command to map the internal container directory to a named volume on your host machine:

docker run -d -p 8080:80 -v miniblog-keys:/root/.aspnet/DataProtection-Keys iaspnetcore/docker-miniblog

 

 

.NET's Docker Hub page

You can find a full list of all supported tags on .NET's Docker Hub page

https://hub.docker.com/r/microsoft/dotnet

https://github.com/dotnet/dotnet-docker/blob/main/README.aspnet.md