Aracılığıyla paylaş


Eğitim: .NET uygulamasını kapsayıcıda çalıştırma

Bu öğreticide Docker ile bir .NET uygulamasını kapsayıcıya almayı öğreneceksiniz. 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 siz:

  • 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ı derlemesini ve dağıtım görevlerini keşfedersiniz. Docker platformu, Docker altyapısı kullanarak uygulamalarıDocker görüntüleri olarak hızla derleyip paketler. Katmanlı bir kapsayıcıda dağıtmak ve çalıştırmak için bu görüntüler Dockerfile formatında yazılmıştır.

Bahşiş

.NET uygulamanızı Docker veya Podman'a gerek kalmadan kapsayıcı olarak yayımlamak istiyorsanız bkz. dotnet publishile .NET uygulamasını kapsayıcıya alma.

Not

Bu öğretici ASP.NET Core uygulamaları için değildir. ASP.NET Core kullanıyorsanız, ASP.NET Core uygulamasını kapsayıcıya almayı öğrenmek için rehbere bakın.

Önkoşullar

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

  • .NET 8+ SDK.
    .NET yüklüyse, hangi SDK'yı kullandığınızı belirlemek için dotnet --info 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 Appadlı bir alt dizinde yeni bir proje oluşturun:

dotnet new console -o App -n DotNet.Docker

Klasör ağacınız aşağıdaki dizin yapısına benzer:

📁 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

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

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.

Bahşiş

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

code .

Bu komut, Visual Studio Code'da projeyi içeren App 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 dotnet runile programı 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ğıdaki örnek çıkışı göz önünde bulundurun:

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

Komut satırındaki bir sayıyı uygulamaya geçirirseniz, sayıyı bu miktarla sınırlar ve sonra çıkar. Beşe kadar saymak için dotnet run -- 5 ile deneyin.

Önemli

--'dan sonraki herhangi bir parametre dotnet run komutuna aktarılmaz ve bunun yerine uygulamanıza aktarılır.

.NET uygulamasını yayımlama

Uygulamanın bir görüntü oluşturmaya uygun olması için derlenmesi gerekir. dotnet publish komutu, uygulamayı derleyip yayımladıkça bunun için en uygun komut olur. Ayrıntılı referans için dotnet build ve dotnet publish komutları belgelerine bakın.

dotnet publish -c Release

Bahşiş

.NET uygulamanızı Docker'a gerek kalmadan kapsayıcı olarak yayımlamak istiyorsanız bkz. dotnet publishile .NET uygulamasını kapsayıcıya alma.

dotnet publish komutu uygulamanızı yayın klasörüne oluşturur. Çalışma klasöründen yayımlama klasörünün yolu ./App/bin/Release/TFM/publish/olmalıdır:

App 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\net9.0\publish\

    Directory: C:\Users\default\docker-working\App\bin\Release\net9.0\publish

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          1/6/2025  10:11 AM            431 DotNet.Docker.deps.json
-a----          1/6/2025  10:11 AM           6144 DotNet.Docker.dll
-a----          1/6/2025  10:11 AM         145408 DotNet.Docker.exe
-a----          1/6/2025  10:11 AM          11716 DotNet.Docker.pdb
-a----          1/6/2025  10:11 AM            340 DotNet.Docker.runtimeconfig.json
dir .\bin\Release\net8.0\publish\

    Directory: C:\Users\default\docker-working\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

Dockerfile oluşturma

Dockerfile dosyası, docker build komutu tarafından 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 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: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"]

Not

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

FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 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:8.0@sha256:6c4df091e4e531bb93bdbfe7e7f0998e7ced344f54426b7e874116a3dc3233ff
WORKDIR /App
COPY --from=build /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 bunun yerine mcr.microsoft.com/dotnet/runtime:8.0 görüntüsü kullanılabilir.

Önemli

Dockerfile görüntü etiketinden sonra güvenli karma algoritması (SHA) dahil olmak en iyi yöntemdir. Bu, görüntü üzerinde oynanmamasını ve görüntünün beklediğiniz görüntüyle aynı olmasını sağlar. SHA, görüntü için benzersiz bir tanımlayıcıdır. Daha fazla bilgi için bkz. Docker Belgeleri: Özet ile görüntü çekme.

Bahşiş

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

FROM anahtar sözcüğü tam nitelikli 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. dotnet segmenti kapsayıcı deposudur, sdk veya aspnet kesimi ise kapsayıcı görüntüsü adıdır. Görüntü, sürüm oluşturma için kullanılan 9.0ile etiketlenmiş. Bu nedenle, mcr.microsoft.com/dotnet/aspnet:9.0 .NET 9.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 9.0 SDK'sını kullandı ve Dockerfile başvuruda bulunan temel görüntü 9.0ile etiketlendi.

Önemli

Windows tabanlı kapsayıcı görüntülerini kullanırken, yalnızca 9.0ötesinde görüntü etiketini belirtmeniz gerekir; örneğin, mcr.microsoft.com/dotnet/aspnet:9.0yerine mcr.microsoft.com/dotnet/aspnet:9.0-nanoserver-1809. 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. .NET'in Docker Hub sayfası'de, desteklenen tüm etiketlerin tam listesini bulabilirsiniz.

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
        │        └───📂 net9.0
        │             ├───📂 publish
        │             │    ├─── DotNet.Docker.deps.json
        │             │    ├─── DotNet.Docker.dll
        │             │    ├─── DotNet.Docker.exe
        │             │    ├─── DotNet.Docker.pdb
        │             │    └─── DotNet.Docker.runtimeconfig.json
        │             ├─── DotNet.Docker.deps.json
        │             ├─── DotNet.Docker.dll
        │             ├─── DotNet.Docker.exe
        │             ├─── DotNet.Docker.pdb
        │             └─── DotNet.Docker.runtimeconfig.json
        └──📁 obj
            └──...

FROM anahtar sözcüğü tam nitelikli 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. dotnet segmenti kapsayıcı deposudur, sdk veya aspnet kesimi ise kapsayıcı görüntüsü adıdır. Görüntü, sürüm oluşturma için kullanılan 8.0ile etiketlenmiş. 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 başvuruda bulunan temel görüntü 8.0ile etiketlendi.

Önemli

Windows tabanlı kapsayıcı görüntülerini kullanırken, yalnızca 8.0ötesinde görüntü etiketini belirtmeniz gerekir; örneğin, mcr.microsoft.com/dotnet/aspnet:8.0yerine mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809. 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. Tüm desteklenen etiketlerin tam listesini .NET’in Docker Hub sayfasıüzerinden bulabilirsiniz.

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
            └──...

ENTRYPOINT yönergesi dotnetDotNet.Docker.dlliçin konak olarak ayarlar. Ancak, bunun yerine ENTRYPOINT uygulama yürütülebilir dosyasının kendisi olarak tanımlamak ve uygulama konağı olarak işletim sistemini kullanmak mümkündür:

ENTRYPOINT ["./DotNet.Docker"]

Bu, uygulamanın dotnetolmadan doğrudan yürütülmesine neden olur ve bunun yerine uygulama konağına ve temel işletim sistemine dayanır. Platformlar arası ikili dosya üretme hakkında daha fazla bilgi için bkz. Platformlar arası ikili dosya oluşturma.

Kapsayıcıyı oluşturmak için terminalinizde aşağıdaki komutu çalıştırın:

docker build -t counter-image -f Dockerfile .

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

REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
counter-image    latest    1c1f1433e51d   32 seconds ago   223MB
docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
counter-image    latest    2f15637dc1f6   10 minutes ago   217MB

counter-image deposu görüntünün adıdır. Ayrıca, görüntü etiketi, görüntü tanımlayıcısı, boyutu ve oluşturulduğu zaman çıktının bir parçasıdır. Dockerfile 'ın son adımları, uygulamayı çalıştırmak için görüntüden bir kapsayıcı oluşturmak, yayımlanan uygulamayı kapsayıcıya kopyalamak ve giriş noktasını tanımlamaktır.

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

FROM komutu, kullanılacak temel görüntüyü ve etiketi belirtir. WORKDIR komutu, kapsayıcı içindeki geçerli dizini Appolarak değiştirir.

COPY komutu Docker'a belirtilen kaynak dizini hedef klasöre kopyalamasını söyler. Bu örnekte, build katmanındaki yayımlama içeriği App/outadlı klasöre çıktı alınır, bu nedenle kopyalanacak kaynaktır. App/out dizininde yayımlanan tüm içerikler geçerli çalışma dizinine (Uygulama) kopyalanır.

sonraki komut ENTRYPOINTDocker'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 komutu çalışır. Bu komut sona erdiğinde kapsayıcı otomatik olarak durur.

Bahşiş

.NET 8'in öncesinde, salt okunur olarak çalışacak şekilde yapılandırılmış kapsayıcılar Failed to create CoreCLR, HRESULT: 0x8007000Eile başarısız olabilir. Bu sorunu gidermek için 0 olarak bir DOTNET_EnableDiagnostics ortam değişkeni belirtin (ENTRYPOINT adımından 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şkenlerini .

Not

.NET 6, .NET çalışma zamanı davranışını yapılandıran ortam değişkenleri için COMPlus_ yerine ön ek DOTNET_ standartlaştırır. Ancak, COMPlus_ ön eki ç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 COMPlus_ ön ekini kullanmaya 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 yeni bir durdurulmuş kapsayıcı oluşturun.

docker create --name core-counter counter-image

Bu docker create komutu, sayaç görüntüsü görüntüsünü temel alan bir kapsayıcı oluşturur. docker create komutunun çıktısı kapsayıcının CONTAINER ID gösterir (tanımlayıcınız farklı olacaktır):

d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf

Tüm kapsayıcılarının listesini görmek için komutunu 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ı, core-counterbelirli bir ad ile oluşturulmuştur. Bu ad kapsayıcıyı yönetmek için kullanılır. Aşağıdaki örnek, kapsayıcıyı başlatmak için docker start komutunu kullanır ve ardından docker ps komutunu kullanarak yalnızca çalışan kapsayıcıları gösterir:

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ı durdurmak için docker stop komutunu kullanır ve ardından hiçbir kapsayıcının çalışmadığını göstermek için docker ps komutunu kullanır:

docker stop core-counter
core-counter

docker ps
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES

Kapsayıcıya bağlanma

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

Konteynerden ayırdıktan sonra, hala çalıştığını ve saymakta olduğunu doğrulamak için tekrar 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ıyı silme

Bu makale için hiçbir şey yapmayan kapsayıcıların kalması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 kapsayıcıyı silmek için docker rm komutunu kullanır ve çalışan kapsayıcılar için 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ı tek bir komut olarak oluşturmak ve çalıştırmak için docker run komutu sağlar. Bu komut, docker create çalıştırma ve ardından docker startgereksinimini ortadan kaldırır. Bu komutu, kapsayıcı durduğunda kapsayıcıyı otomatik olarak silmek için de ayarlayabilirsiniz. Örneğin, iki işlemi gerçekleştirmek için docker run -it --rm kullanın: öncelikle, kapsayıcıya bağlanmak için şu anki terminali otomatik olarak kullanın ve kapsayıcı bittiğinde 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

docker run -itile Ctrl+C komutu kapsayıcıda çalışan işlemi durdurur ve bu da kapsayıcıyı durdurur. --rm parametresi sağlandığından, 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ştir

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

Bu örnekte, ENTRYPOINTcmd.exeolarak değiştirilir. iş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

Dikkat

Bu örnek yalnızca Windows kapsayıcılarında çalışır. Linux kapsayıcılarında cmd.exebulunmamaktadır.

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 eğitim 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. İsmiyle çalışan konteynerleri 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 tarafından oluşturulan görüntüyü silin ve ardından Dockerfile temel aldığı .NET görüntüsünü silin. IMAGE ID veya REPOSITORY:TAG biçimlendirilmiş dizeyi kullanabilirsiniz.

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

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

Bahşiş

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