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.
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çindotnet --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 run
ile programı yeniden test edin. Bu uygulamanın süresiz olarak çalıştığını unutmayın. Durdurmak için Ctrl+C
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
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.0
ile 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.0
yerine 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.0
ile 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.0
yerine 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 dotnet
DotNet.Docker.dll
iç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 dotnet
olmadan 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 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
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: 0x8007000E
ile 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
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-counter
belirli 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 start
gereksinimini 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 -it
ile 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, ENTRYPOINT
cmd.exe
olarak 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.exe
bulunmamaktadı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:
- Docker inşa et
- docker çalıştır
- docker ps
- docker stop
- docker rm
- docker rmi
- Docker görüntüsü
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
Tüm kapsayıcıları listeleme
docker ps -a
İsmiyle çalışan konteynerleri durdurun.
docker stop core-counter
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
- dotnet publish ile bir .NET uygulamasını containerize etme
- .NET kapsayıcı görüntüleri
- ASP.NET Core uygulamasını kapsayıcıya
- Kapsayıcıları destekleyen Azure hizmetlerini
- Dockerfile komutları
- Visual Studio için
Kapsayıcı Araçları