Öğretici: .NET uygulamasını kapsayıcıya alma

Bu öğreticide Docker ile bir .NET uygulamasını kapsayıcılı hale getirme hakkında bilgi edineceksiniz. Kapsayıcılar sabit bir altyapı olmak, taşınabilir mimari sağlamak ve ölçeklenebilirliği etkinleştirmek gibi birçok özellik ve avantaja sahiptir. Görüntü yerel geliştirme ortamınız, özel bulutunuz veya genel bulutunuz için kapsayıcılar oluşturmak için kullanılabilir.

Bu öğreticide şunları yaptınız:

  • Basit bir .NET uygulaması oluşturma ve yayımlama
  • .NET için Dockerfile oluşturma ve yapılandırma
  • Docker görüntüsü oluşturma
  • Docker kapsayıcısı oluşturma ve çalıştırma

Bir .NET uygulaması için Docker kapsayıcı derleme ve dağıtma görevlerini anlayacaksınız. Docker platformu, docker altyapısını kullanarak uygulamaları hızla Docker görüntüleri olarak derleyip paketler. Bu görüntüler, katmanlı bir kapsayıcıda dağıtılacak ve çalıştırılacak Dockerfile biçiminde yazılır.

Not

Bu öğretici ASP.NET Core uygulamalarına yönelik değildir . ASP.NET Core kullanıyorsanız ASP.NET Core uygulamasını kapsayıcıya almayı öğrenme öğreticisine bakın.

Önkoşullar

Aşağıdaki önkoşulları yükleyin:

  • .NET 8+ SDK
    .NET yüklüyse, hangi SDK'yı kullandığınızı dotnet --info belirlemek için komutunu kullanın.
  • Docker Community Edition
  • Dockerfile ve .NET örnek uygulaması için geçici bir çalışma klasörü. Bu öğreticide, çalışma klasörü olarak docker-working adı kullanılır.
  • .NET 7+ SDK
    .NET yüklüyse, hangi SDK'yı kullandığınızı dotnet --info belirlemek için komutunu kullanın.
  • Docker Community Edition
  • Dockerfile ve .NET örnek uygulaması için geçici bir çalışma klasörü. Bu öğreticide, çalışma klasörü olarak docker-working adı kullanılır.

.NET uygulaması oluşturma

Docker kapsayıcısının çalıştığı bir .NET uygulamasına ihtiyacınız vardır. Terminalinizi açın, henüz yapmadıysanız bir çalışma klasörü oluşturun ve girin. Çalışma klasöründe aşağıdaki komutu çalıştırarak Uygulama adlı alt dizinde yeni bir proje oluşturun:

dotnet new console -o App -n DotNet.Docker

Klasör ağacınız aşağıdaki gibi görünür:

📁 docker-working
    └──📂 App
        ├──DotNet.Docker.csproj
        ├──Program.cs
        └──📂 obj
            ├── DotNet.Docker.csproj.nuget.dgspec.json
            ├── DotNet.Docker.csproj.nuget.g.props
            ├── DotNet.Docker.csproj.nuget.g.targets
            ├── project.assets.json
            └── project.nuget.cache

komutu App dotnet new adlı yeni bir klasör oluşturur ve "Merhaba Dünya" konsol uygulaması oluşturur. Dizinleri değiştirin ve terminal oturumunuzdan Uygulama klasörüne gidin. dotnet run Uygulamayı başlatmak için komutunu kullanın. Uygulama çalışır ve komutun altına yazdırır Hello World! :

cd App
dotnet run
Hello World!

Varsayılan şablon, terminale yazdıran ve hemen sonlandıran bir uygulama oluşturur. Bu öğreticide süresiz döngüler oluşturan bir uygulama kullanırsınız. Program.cs dosyasını bir metin düzenleyicisinde açın.

İpucu

Visual Studio Code kullanıyorsanız, önceki terminal oturumundan aşağıdaki komutu yazın:

code .

Bu işlem, Visual Studio Code'da projeyi içeren Uygulama klasörünü açar.

Program.cs aşağıdaki C# kodu gibi görünmelidir:

Console.WriteLine("Hello World!");

dosyasını, sayıları her saniye sayan aşağıdaki kodla değiştirin:

var counter = 0;
var max = args.Length is not 0 ? Convert.ToInt32(args[0]) : -1;
while (max is -1 || counter < max)
{
    Console.WriteLine($"Counter: {++counter}");
    await Task.Delay(TimeSpan.FromMilliseconds(1_000));
}
var counter = 0;
var max = args.Length is not 0 ? Convert.ToInt32(args[0]) : -1;
while (max is -1 || counter < max)
{
    Console.WriteLine($"Counter: {++counter}");
    await Task.Delay(TimeSpan.FromMilliseconds(1_000));
}

Dosyayı kaydedin ve ile dotnet runprogramı yeniden test edin. Bu uygulamanın süresiz olarak çalıştığını unutmayın. Durdurmak için Ctrl+C iptal komutunu kullanın. Aşağıda örnek bir çıkış verilmiştir:

dotnet run
Counter: 1
Counter: 2
Counter: 3
Counter: 4
^C

Komut satırındaki bir sayıyı uygulamaya geçirirseniz, bu sayı yalnızca bu tutara kadar sayılır ve sonra çıkar. Beşe kadar saymak için ile dotnet run -- 5 deneyin.

Önemli

Sonrasındaki parametreler -- komuta geçirilmiyor dotnet run ve bunun yerine uygulamanıza geçiriliyor.

.NET uygulamasını yayımlama

.NET uygulamasını Docker görüntüsüne eklemeden önce yayımlanması gerekir. Kapsayıcının uygulamanın yayımlanmış sürümünü çalıştırması en iyisidir. Uygulamayı yayımlamak için aşağıdaki komutu çalıştırın:

dotnet publish -c Release

Bu komut uygulamanızı yayımla klasörüne derler. Çalışma klasöründen yayımlama klasörünün yolu olmalıdır .\App\bin\Release\net8.0\publish\.

Bu komut uygulamanızı yayımla klasörüne derler. Çalışma klasöründen yayımlama klasörünün yolu olmalıdır .\App\bin\Release\net7.0\publish\.

Uygulama klasöründen, DotNet.Docker.dll dosyasının oluşturulduğunu doğrulamak için yayımlama klasörünün dizin listesini alın.

dir .\bin\Release\net8.0\publish\

    Directory: C:\Users\default\App\bin\Release\net8.0\publish

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           9/22/2023  9:17 AM            431 DotNet.Docker.deps.json
-a---           9/22/2023  9:17 AM           6144 DotNet.Docker.dll
-a---           9/22/2023  9:17 AM         157696 DotNet.Docker.exe
-a---           9/22/2023  9:17 AM          11688 DotNet.Docker.pdb
-a---           9/22/2023  9:17 AM            353 DotNet.Docker.runtimeconfig.json
dir .\bin\Release\net7.0\publish\

    Directory: C:\Users\default\App\bin\Release\net7.0\publish

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           2/13/2023  1:52 PM            431 DotNet.Docker.deps.json
-a---           2/13/2023  1:52 PM           6144 DotNet.Docker.dll
-a---           2/13/2023  1:52 PM         153600 DotNet.Docker.exe
-a---           2/13/2023  1:52 PM          11052 DotNet.Docker.pdb
-a---           2/13/2023  1:52 PM            253 DotNet.Docker.runtimeconfig.json

Dockerfile oluşturma

Dockerfile dosyası, komut tarafından docker build kapsayıcı görüntüsü oluşturmak için kullanılır. Bu dosya, uzantısı olmayan Dockerfile adlı bir metin dosyasıdır.

.csproj dosyasını içeren dizinde Dockerfile adlı bir dosya oluşturun ve dosyayı bir metin düzenleyicisinde açın. Bu öğreticide ASP.NET Core çalışma zamanı görüntüsü (.NET çalışma zamanı görüntüsünü içerir) kullanılır ve .NET konsol uygulamasına karşılık gelir.

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /App

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

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

Not

ASP.NET Core çalışma zamanı görüntüsü burada kasıtlı olarak kullanılır, ancak mcr.microsoft.com/dotnet/runtime:8.0 görüntü kullanılmış olabilir.

İpucu

Bu Dockerfile , çok aşamalı derlemeler kullanır ve bu derlemeyi katmanlayarak ve yalnızca gerekli yapıtları bırakarak görüntünün son boyutunu iyileştirir. Daha fazla bilgi için bkz . Docker Docs: çok aşamalı derlemeler.

anahtar FROM sözcüğü tam bir Docker kapsayıcı görüntüsü adı gerektirir. Microsoft Container Registry (MCR, mcr.microsoft.com), genel olarak erişilebilen kapsayıcıları barındıran bir Docker Hub dağıtımıdır. Segment dotnet kapsayıcı deposuyken sdk veya aspnet kesimi kapsayıcı görüntüsü adıdır. Görüntü, sürüm oluşturma için kullanılan ile 8.0etiketlenmiş. Bu nedenle, mcr.microsoft.com/dotnet/aspnet:8.0 .NET 8.0 çalışma zamanıdır. SDK'nız tarafından hedeflenen çalışma zamanıyla eşleşen çalışma zamanı sürümünü çektiğinizden emin olun. Örneğin, önceki bölümde oluşturulan uygulama .NET 8.0 SDK'sını kullandı ve Dockerfile'da başvuruda bulunılan temel görüntü 8.0 ile etiketlendi.

Önemli

Windows tabanlı kapsayıcı görüntülerini kullanırken, görüntü etiketini yerine basitçe 8.0mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809mcr.microsoft.com/dotnet/aspnet:8.0ötesinde belirtmeniz gerekir. Nano Sunucu mu yoksa Windows Server Core mu kullandığınıza ve bu işletim sisteminin hangi sürümünü kullandığınıza bağlı olarak bir görüntü adı seçin. desteklenen tüm etiketlerin tam listesini üzerinde bulabilirsiniz. NET'in Docker Hub sayfası.

Dockerfile dosyasını kaydedin. Çalışma klasörünün dizin yapısı aşağıdaki gibi görünmelidir. Makalede yer kazanmak için daha ayrıntılı dosya ve klasörlerden bazıları atlanmıştır:

📁 docker-working
    └──📂 App
        ├── Dockerfile
        ├── DotNet.Docker.csproj
        ├── Program.cs
        ├──📂 bin
        │   └──📂 Release
        │       └──📂 net8.0
        │           └──📂 publish
        │               ├── DotNet.Docker.deps.json
        │               ├── DotNet.Docker.exe
        │               ├── DotNet.Docker.dll
        │               ├── DotNet.Docker.pdb
        │               └── DotNet.Docker.runtimeconfig.json
        └──📁 obj
            └──...
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
WORKDIR /App

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

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

Not

ASP.NET Core çalışma zamanı görüntüsü burada kasıtlı olarak kullanılır, ancak mcr.microsoft.com/dotnet/runtime:7.0 görüntü kullanılmış olabilir.

İpucu

Bu Dockerfile , çok aşamalı derlemeler kullanır ve bu derlemeyi katmanlayarak ve yalnızca gerekli yapıtları bırakarak görüntünün son boyutunu iyileştirir. Daha fazla bilgi için bkz . Docker Docs: çok aşamalı derlemeler.

anahtar FROM sözcüğü tam bir Docker kapsayıcı görüntüsü adı gerektirir. Microsoft Container Registry (MCR, mcr.microsoft.com), genel olarak erişilebilen kapsayıcıları barındıran bir Docker Hub dağıtımıdır. Segment dotnet kapsayıcı deposuyken sdk veya aspnet kesimi kapsayıcı görüntüsü adıdır. Görüntü, sürüm oluşturma için kullanılan ile 7.0etiketlenmiş. Bu nedenle, mcr.microsoft.com/dotnet/aspnet:7.0 .NET 7.0 çalışma zamanıdır. SDK'nız tarafından hedeflenen çalışma zamanıyla eşleşen çalışma zamanı sürümünü çektiğinizden emin olun. Örneğin, önceki bölümde oluşturulan uygulama .NET 7.0 SDK'sını kullandı ve Dockerfile'da başvuruda bulunılan temel görüntü 7.0 ile etiketlendi.

Dockerfile dosyasını kaydedin. Çalışma klasörünün dizin yapısı aşağıdaki gibi görünmelidir. Makalede yer kazanmak için daha ayrıntılı dosya ve klasörlerden bazıları atlanmıştır:

📁 docker-working
    └──📂 App
        ├── Dockerfile
        ├── DotNet.Docker.csproj
        ├── Program.cs
        ├──📂 bin
        │   └──📂 Release
        │       └──📂 net7.0
        │           └──📂 publish
        │               ├── DotNet.Docker.deps.json
        │               ├── DotNet.Docker.exe
        │               ├── DotNet.Docker.dll
        │               ├── DotNet.Docker.pdb
        │               └── DotNet.Docker.runtimeconfig.json
        └──📁 obj
            └──...

Terminalinizde aşağıdaki komutu çalıştırın:

docker build -t counter-image -f Dockerfile .

Docker, Dockerfile içindeki her satırı işler. . komutu, docker build görüntünün derleme bağlamını ayarlar. -f Anahtar, Dockerfile'ın yoludur. Bu komut görüntüyü oluşturur ve bu görüntüyü işaret eden counter-image adlı yerel bir depo oluşturur. Bu komut tamamlandıktan sonra, yüklü görüntülerin listesini görmek için komutunu çalıştırın docker images :

docker images
REPOSITORY                         TAG       IMAGE ID       CREATED          SIZE
counter-image                      latest    2f15637dc1f6   10 minutes ago   217MB

counter-image Depo, görüntünün adıdır. latest etiketi, görüntüyü tanımlamak için kullanılan etikettir. 2f15637dc1f6, görüntü kimliğidir. 10 minutes ago, görüntünün oluşturulduğu zamandır. 217MB, görüntünün boyutudur. Dockerfile'ın son adımları, görüntüden bir kapsayıcı oluşturmak ve uygulamayı çalıştırmak, yayımlanan uygulamayı kapsayıcıya kopyalamak ve giriş noktasını tanımlamaktır.

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
docker images
REPOSITORY                         TAG       IMAGE ID       CREATED          SIZE
counter-image                      latest    2f15637dc1f6   10 minutes ago   208MB

counter-image Depo, görüntünün adıdır. latest etiketi, görüntüyü tanımlamak için kullanılan etikettir. 2f15637dc1f6, görüntü kimliğidir. 10 minutes ago, görüntünün oluşturulduğu zamandır. 208MB, görüntünün boyutudur. Dockerfile'ın son adımları, görüntüden bir kapsayıcı oluşturmak ve uygulamayı çalıştırmak, yayımlanan uygulamayı kapsayıcıya kopyalamak ve giriş noktasını tanımlamaktır.

FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]

komutu Docker'a COPY bilgisayarınızdaki belirtilen klasörü kapsayıcıdaki bir klasöre kopyalamasını söyler. Bu örnekte yayımlama klasörü kapsayıcıdaki App/out adlı bir klasöre kopyalanır.

komutu kapsayıcının WORKDIRiçindeki geçerli dizini Uygulama olarak değiştirir.

Sonraki komut olan ENTRYPOINT, Docker'a kapsayıcıyı yürütülebilir dosya olarak çalışacak şekilde yapılandırmasını söyler. Kapsayıcı başlatıldığında, ENTRYPOINT komut çalışır. Bu komut sona erdiğinde kapsayıcı otomatik olarak durur.

İpucu

.NET 8'de salt okunur olarak çalışacak şekilde yapılandırılan kapsayıcılar ile Failed to create CoreCLR, HRESULT: 0x8007000Ebaşarısız olabilir. Bu sorunu gidermek için olarak 0 bir DOTNET_EnableDiagnostics ortam değişkeni belirtin (adımdan ENTRYPOINT hemen önce):

ENV DOTNET_EnableDiagnostics=0

Çeşitli .NET ortam değişkenleri hakkında daha fazla bilgi için bkz . .NET ortam değişkenleri.

Not

.NET 6, .NET çalışma zamanı davranışını yapılandıran ortam değişkenleri yerine COMPlus_ ön eki DOTNET_ standartlaştırır. Ancak ön COMPlus_ ek çalışmaya devam eder. .NET çalışma zamanının önceki bir sürümünü kullanıyorsanız, ortam değişkenleri için ön eki kullanmaya COMPlus_ devam etmelisiniz.

Kapsayıcı oluşturma

Artık uygulamanızı içeren bir görüntünüz olduğuna göre bir kapsayıcı oluşturabilirsiniz. Kapsayıcıyı iki şekilde oluşturabilirsiniz. İlk olarak durdurulan yeni bir kapsayıcı oluşturun.

docker create --name core-counter counter-image

Bu docker create komut, sayaç görüntüsü görüntüsünü temel alan bir kapsayıcı oluşturur. Bu komutun çıktısı, oluşturulan kapsayıcının CONTAINER kimliğini (sizinki farklı olacaktır) gösterir:

d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf

Tüm kapsayıcıların listesini görmek için komutunu docker ps -a kullanın:

docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS    PORTS     NAMES
d0be06126f7d   counter-image   "dotnet DotNet.Docke…"   12 seconds ago   Created             core-counter

Kapsayıcıyı yönetme

Kapsayıcı belirli bir adla core-counteroluşturulmuştur. Bu ad kapsayıcıyı yönetmek için kullanılır. Aşağıdaki örnek, kapsayıcıyı docker start başlatmak için komutunu kullanır ve ardından komutunu yalnızca çalışan kapsayıcıları göstermek için kullanır docker ps :

docker start core-counter
core-counter

docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS     NAMES
cf01364df453   counter-image   "dotnet DotNet.Docke…"   53 seconds ago   Up 10 seconds             core-counter

Benzer şekilde, docker stop komutu kapsayıcıyı durdurur. Aşağıdaki örnek, kapsayıcıyı docker stop durdurmak için komutunu kullanır ve ardından komutunu kullanarak docker ps hiçbir kapsayıcının çalışmadığını gösterir:

docker stop core-counter
core-counter

docker ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

Kapsayıcıya Bağlan

Bir kapsayıcı çalıştırıldıktan sonra, çıkışı görmek için kapsayıcıya bağlanabilirsiniz. Kapsayıcıyı docker start başlatmak ve çıkış akışına göz atmak için ve docker attach komutlarını kullanın. Bu örnekte, çalışan kapsayıcıdan ayırmak için Ctrl+C tuş vuruşu kullanılır. Bu tuş vuruşu, aksi belirtilmedikçe kapsayıcıdaki işlemi sona erdirerek kapsayıcıyı durdurur. parametresi, --sig-proxy=false Ctrl+C tuşlarına basılmasının kapsayıcıdaki işlemi durdurmamasını sağlar.

Kapsayıcıdan ayırdıktan sonra, hala çalıştığını ve sayıldığını doğrulamak için yeniden bağlanın.

docker start core-counter
core-counter

docker attach --sig-proxy=false core-counter
Counter: 7
Counter: 8
Counter: 9
^C

docker attach --sig-proxy=false core-counter
Counter: 17
Counter: 18
Counter: 19
^C

Kapsayıcı silme

Bu makale için, hiçbir şey yapmayan kapsayıcıların takılmasını istemezsiniz. Daha önce oluşturduğunuz kapsayıcıyı silin. Kapsayıcı çalışıyorsa durdurun.

docker stop core-counter

Aşağıdaki örnekte tüm kapsayıcılar listelanmaktadır. Ardından komutunu kullanarak docker rm kapsayıcıyı siler ve çalışan kapsayıcıları ikinci kez denetler.

docker ps -a
CONTAINER ID    IMAGE            COMMAND                   CREATED          STATUS                        PORTS    NAMES
2f6424a7ddce    counter-image    "dotnet DotNet.Dock…"    7 minutes ago    Exited (143) 20 seconds ago            core-counter

docker rm core-counter
core-counter

docker ps -a
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

Tek çalıştırma

Docker, kapsayıcıyı docker run tek bir komut olarak oluşturmak ve çalıştırmak için komutunu sağlar. Bu komut ve ardından docker startçalıştırma docker create gereksinimini ortadan kaldırır. Bu komutu, kapsayıcı durduğunda kapsayıcıyı otomatik olarak silmek için de ayarlayabilirsiniz. Örneğin, iki şey yapmak için kullanın docker run -it --rm , önce kapsayıcıya bağlanmak için geçerli terminali otomatik olarak kullanın ve kapsayıcı tamamlandığında kaldırın:

docker run -it --rm counter-image
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
^C

Kapsayıcı ayrıca parametreleri .NET uygulamasının yürütülmesine geçirir. .NET uygulamasına yalnızca üçe kadar saymasını bildirmek için 3'ü geçirin.

docker run -it --rm counter-image 3
Counter: 1
Counter: 2
Counter: 3

iledocker run -it, Ctrl+C komutu kapsayıcıda çalışan işlemi durdurur ve kapsayıcıyı durdurur. parametresi sağlandığından --rm , işlem durdurulduğunda kapsayıcı otomatik olarak silinir. Var olmadığını doğrulayın:

docker ps -a
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

ENTRYPOINT'i değiştirme

Komutu docker run ayrıca Dockerfile dosyasındaki komutu değiştirmenize ENTRYPOINT ve yalnızca bu kapsayıcı için başka bir şey çalıştırmanıza olanak tanır. Örneğin, veya cmd.exekomutunu çalıştırmak bash için aşağıdaki komutu kullanın. Komutu gerektiği gibi düzenleyin.

Bu örnekte, ENTRYPOINT olarak cmd.exedeğiştirilir. İşlemi sonlandırmak ve kapsayıcıyı durdurmak için Ctrl+C tuşlarına basılır.

docker run -it --rm --entrypoint "cmd.exe" counter-image

Microsoft Windows [Version 10.0.17763.379]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\>dir
 Volume in drive C has no label.
 Volume Serial Number is 3005-1E84

 Directory of C:\

04/09/2019  08:46 AM    <DIR>          app
03/07/2019  10:25 AM             5,510 License.txt
04/02/2019  01:35 PM    <DIR>          Program Files
04/09/2019  01:06 PM    <DIR>          Users
04/02/2019  01:35 PM    <DIR>          Windows
               1 File(s)          5,510 bytes
               4 Dir(s)  21,246,517,248 bytes free

C:\>^C

Temel komutlar

Docker'da kapsayıcıları ve görüntüleri oluşturan, yöneten ve bunlarla etkileşim kuran birçok farklı komut vardır. Bu Docker komutları kapsayıcılarınızı yönetmek için gereklidir:

Kaynakları temizleme

Bu öğretici sırasında kapsayıcılar ve görüntüler oluşturdunuz. İstersen, bu kaynakları silin. Aşağıdaki komutları kullanarak

  1. Tüm kapsayıcıları listeleme

    docker ps -a
    
  2. Adıyla çalışan kapsayıcıları durdurun.

    docker stop core-counter
    
  3. Kapsayıcıyı silme

    docker rm core-counter
    

Ardından, makinenizde artık istemediğiniz tüm görüntüleri silin. Dockerfile'ınız tarafından oluşturulan görüntüyü silin ve ardından Dockerfile'ın temel aldığı .NET görüntüsünü silin. IMAGE ID veya REPOSITORY:TAG biçimli dizesini kullanabilirsiniz.

docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:8.0
docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:7.0

Yüklü görüntülerin docker images listesini görmek için komutunu kullanın.

İpucu

Görüntü dosyaları büyük olabilir. Genellikle uygulamanızı test ederken ve geliştirirken oluşturduğunuz geçici kapsayıcıları kaldırırsınız. Bu çalışma zamanını temel alan başka görüntüler derlemeyi planlıyorsanız, genellikle temel görüntüleri çalışma zamanı yüklü olarak tutarsınız.

Sonraki adımlar