Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Docker altyapısı, kapsayıcı görüntüsü oluşturmayı otomatik hale getiren araçlar içerir.
docker commit komutunu çalıştırarak kapsayıcı görüntülerini el ile oluşturabilirsiniz ancak otomatik görüntü oluşturma işlemini benimsemenin aşağıdakiler gibi birçok avantajı vardır:
- Kapsayıcı görüntülerini kod olarak depolama.
- Bakım ve yükseltme amacıyla konteyner imajlarının hızlı ve doğru bir şekilde yeniden oluşturulması.
- Geliştirme döngüsü ile kapsayıcı görüntüleri arasında sürekli entegrasyon.
Bu otomasyonu yönlendiren Docker bileşenleri Dockerfile ve docker build komutudır.
Dockerfile, yeni bir kapsayıcı görüntüsü oluşturmak için gereken yönergeleri içeren bir metin dosyasıdır. Bu yönergeler, temel olarak kullanılacak mevcut bir görüntünün tanımlanmasını, görüntü oluşturma işlemi sırasında çalıştırılacak komutları ve kapsayıcı görüntüsünün yeni örnekleri dağıtıldığında çalıştırılacak komutu içerir.
Docker derlemesi, Dockerfile kullanan ve görüntü oluşturma işlemini tetikleyen Docker altyapısı komutudur.
Bu konu başlığında Dockerfiles'ı Windows kapsayıcılarıyla kullanmayı, temel söz dizimlerini anlama ve en yaygın Dockerfile yönergelerinin ne olduğu gösterilir.
Bu belgede kapsayıcı görüntüleri ve kapsayıcı görüntüsü katmanları kavramı ele alınacaktır. Görüntüler ve görüntü katmanlama hakkında daha fazla bilgi edinmek istiyorsanız bkz. kapsayıcı taban görüntüleri.
Dockerfile'lara tam bir inceleme için bkz. Dockerfile referansı.
Temel Söz Dizimi
En temel biçimiyle Dockerfile çok basit olabilir. Aşağıdaki örnek, IIS ve 'merhaba dünya' sitesi içeren yeni bir görüntü oluşturur. Bu örnek, her adımı açıklayan açıklamaları (#ile gösterilir) içerir. Bu makalenin sonraki bölümlerinde Dockerfile söz dizimi kuralları ve Dockerfile yönergeleri hakkında daha ayrıntılı bilgi verilecektir.
Not
Uzantısız bir Dockerfile oluşturulmalıdır. Bunu Windows'ta yapmak için, dosyayı istediğiniz düzenleyiciyle oluşturun, ardından "Dockerfile" gösterimiyle (tırnak işaretleri dahil) kaydedin.
# Sample Dockerfile
# Indicates that the windowsservercore image will be used as the base image.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
# Metadata indicating an image maintainer.
LABEL maintainer="jshelton@contoso.com"
# Uses dism.exe to install the IIS role.
RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart
# Creates an HTML file and adds content to this file.
RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html
# Sets a command or process that will run each time a container is run from the new image.
CMD [ "cmd" ]
Windows için Dockerfile'lar ek örnekleri görmek için Windows için Dockerfile deposuna bakınız.
Talimatlar
Dockerfile yönergeleri, Docker Altyapısı'na kapsayıcı görüntüsü oluşturmak için gereken yönergeleri sağlar. Bu yönergeler tek tek ve sırayla gerçekleştirilir. Aşağıdaki örnekler Dockerfiles'da en yaygın kullanılan yönergelerdir. Dockerfile yönergelerinin tam listesi için Dockerfile referansınabakın.
KAYNAK
FROM yönergesi, yeni görüntü oluşturma işlemi sırasında kullanılacak kapsayıcı görüntüsünü ayarlar. Örneğin, FROM mcr.microsoft.com/windows/servercoreyönergesi kullanılırken, sonuçta elde edilen görüntü, Windows Server Core temel işletim sistemi görüntüsünden türetilir ve bir bağımlılığı vardır. Docker derleme işleminin çalıştırıldığı sistemde belirtilen görüntü yoksa, Docker altyapısı görüntüyü genel veya özel görüntü kayıt defterinden indirmeye çalışır.
FROM yönergesinin biçimi şöyledir:
FROM <image>
FROM komutunun bir örneği aşağıda verilmişti:
Microsoft Container Registry'den (MCR) ltsc2019 sürümü Windows Server Core'u indirmek için:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
Daha ayrıntılı bilgi için FROM referansınabakın.
KOŞ
RUN yönergesi, çalıştırılacak ve yeni kapsayıcı görüntüsünde yakalanacak komutları belirtir. Bu komutlar yazılım yükleme, dosya ve dizin oluşturma ve ortam yapılandırması oluşturma gibi öğeleri içerebilir.
RUN yönergesi şöyle gider:
# exec form
RUN ["<executable>", "<param 1>", "<param 2>"]
# shell form
RUN <command>
exec ve komut satırı biçimi arasındaki fark, RUN yönergesinin nasıl yürütüldüğündedir. exec formu kullanılırken, belirtilen program açıkça çalıştırılır.
Aşağıda exec formunun bir örneği verilmişti:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN ["powershell", "New-Item", "c:/test"]
Sonuçta elde edilen görüntü powershell New-Item c:/test komutunu çalıştırır:
docker history doc-exe-method
IMAGE CREATED CREATED BY SIZE COMMENT
b3452b13e472 2 minutes ago powershell New-Item c:/test 30.76 MB
Karşıtlık için, aşağıdaki örnek kabuk biçiminde aynı işlemi çalıştırır:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell New-Item c:\test
Sonuçta elde edilen görüntü, cmd /S /C powershell New-Item c:\testçalıştırma talimatı içerir.
docker history doc-shell-method
IMAGE CREATED CREATED BY SIZE COMMENT
062a543374fc 19 seconds ago cmd /S /C powershell New-Item c:\test 30.76 MB
Windows ile RUN kullanma konusunda dikkat edilmesi gerekenler
Windows'da, RUN yönergesini exec biçimiyle kullanırken ters eğik çizgilerden kaçınılmalıdır.
RUN ["powershell", "New-Item", "c:\\test"]
Hedef program bir Windows yükleyicisi olduğunda, gerçek (sessiz) yükleme prosedürünü başlatabilmeniz için önce kurulumu /x:<directory> bayrağı üzerinden çıkartmanız gerekir. Ayrıca, başka bir işlem gerçekleştirmeden önce komutun çıkışını beklemeniz gerekir. Aksi takdirde, işlem herhangi bir şey yüklemeden erken sona erer. Ayrıntılar için lütfen aşağıdaki örniğe bakın.
Windows ile RUN kullanma örnekleri
Aşağıdaki örnek Dockerfile, kapsayıcı görüntüsüne IIS yüklemek için DISM kullanır:
RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart
Bu örnek, Visual Studio yeniden dağıtılabilir paketini yükler. yükleyiciyi çalıştırmak için Start-Process ve -Wait parametresi kullanılır. Bu, Dockerfile'da sonraki yönergeye geçmeden önce yüklemenin tamamlanmasını sağlar.
RUN powershell.exe -Command Start-Process c:\vcredist_x86.exe -ArgumentList '/quiet' -Wait
RUN yönergesi hakkında ayrıntılı bilgi için, RUN başvurusunabakın.
Kopya
COPY yönergesi, dosyaları ve dizinleri kapsayıcının dosya sistemine kopyalar. Dosyalar ve dizinler, Dockerfile'a göre göreli bir yolda bulunmalıdır.
COPY yönergesinin biçimi şöyledir:
COPY <source> <destination>
Kaynak veya hedef boşluk içeriyorsa, aşağıdaki örnekte gösterildiği gibi yolu köşeli ayraçlar ve çift tırnak içine alın:
COPY ["<source>", "<destination>"]
Windows ile COPY kullanma konusunda dikkat edilmesi gerekenler
Windows'da hedef biçimin ileri eğik çizgi kullanması gerekir. Örneğin, bunlar geçerli COPY yönergeleridir:
COPY test1.txt /temp/
COPY test1.txt c:/temp/
Bu arada, ters eğik çizgilerle aşağıdaki biçim çalışmaz:
COPY test1.txt c:\temp\
Windows ile COPY kullanma örnekleri
Aşağıdaki örnek, kaynak dizinin içeriğini kapsayıcı görüntüsündeki sqllite adlı dizine ekler:
COPY source /sqlite/
Aşağıdaki örnek, yapılandırma ile başlayan tüm dosyaları kapsayıcı görüntüsünün c:\temp dizinine ekler:
COPY config* c:/temp/
COPY yönergesi hakkında daha ayrıntılı bilgi için kopyalama referansınabakın.
EKLEMEK
ADD yönergesi COPY yönergesine benzer, ancak daha da fazla özelliğe sahiptir.
ADD yönergesi, konaktan kapsayıcı görüntüsüne dosya kopyalamaya ek olarak, url belirtimi olan uzak bir konumdan da dosya kopyalayabilir.
ADD yönergesinin biçimi şöyledir:
ADD <source> <destination>
Kaynak veya hedef boşluk içeriyorsa, yolu köşeli parantezler ve çift tırnak işareti içine alın.
ADD ["<source>", "<destination>"]
ADD'yi Windows ile çalıştırma konusunda dikkat edilmesi gerekenler
Windows'da hedef biçimin ileri eğik çizgi kullanması gerekir. Örneğin, bunlar geçerli ADD yönergeleridir:
ADD test1.txt /temp/
ADD test1.txt c:/temp/
Bu arada, ters eğik çizgilerle aşağıdaki biçim çalışmaz:
ADD test1.txt c:\temp\
Ayrıca Linux'ta ADD yönergesi kopyalanan sıkıştırılmış paketleri genişletir. Bu işlev Windows'ta kullanılamaz.
Add'i Windows ile kullanma örnekleri
Aşağıdaki örnek, kaynak dizinin içeriğini kapsayıcı görüntüsündeki sqllite adlı dizine ekler:
ADD source /sqlite/
Aşağıdaki örnek, kapsayıcı görüntüsünün c:\temp dizinine "config" ile başlayan tüm dosyaları ekler.
ADD config* c:/temp/
Aşağıdaki örnek, Windows için Python'ı kapsayıcı görüntüsünün c:\temp dizinine indirecektir.
ADD https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe /temp/python-3.5.1.exe
ADD yönergesi hakkında daha ayrıntılı bilgi için ADD referansına bakın.
WORKDIR
WORKDIR yönergesi, RUN, CMDgibi diğer Dockerfile yönergeleri ve kapsayıcı görüntüsünün örneklerini çalıştırmak için çalışma dizini için bir çalışma dizini ayarlar.
WORKDIR yönergesinin biçimi şöyledir:
WORKDIR <path to working directory>
WorkDIR'i Windows ile kullanma konusunda dikkat edilmesi gerekenler
Windows'da, çalışma dizini ters eğik çizgi içeriyorsa, ters eğik çizgiden kaçılmalıdır.
WORKDIR c:\\windows
Örnekleri
WORKDIR c:\\Apache24\\bin
WORKDIR yönergesi hakkında ayrıntılı bilgi için bkz. WORKDIR referansı.
CMD
CMD yönergesi, kapsayıcı görüntüsünün bir örneğini dağıtırken çalıştırılacak varsayılan komutu ayarlar. Örneğin, kapsayıcı bir NGINX web sunucusu barındıracaksa, CMD web sunucusunu nginx.exegibi bir komutla başlatma yönergelerini içerebilir. Dockerfile'da birden çok CMD yönergesi belirtilirse, yalnızca sonuncusu değerlendirilir.
CMD yönergesinin biçimi şöyledir:
# exec form
CMD ["<executable", "<param>"]
# shell form
CMD <command>
Windows ile CMD kullanma konusunda dikkat edilmesi gerekenler
Windows'da, CMD yönergesinde belirtilen dosya yollarının eğik çizgi kullanması veya \\'de kaçış karakteri olarak ters eğik çizgi kullanılması gerekir. Geçerli CMD yönergeleri aşağıdadır:
# exec form
CMD ["c:\\Apache24\\bin\\httpd.exe", "-w"]
# shell form
CMD c:\\Apache24\\bin\\httpd.exe -w
Ancak, uygun eğik çizgi olmadan aşağıdaki biçim çalışmaz:
CMD c:\Apache24\bin\httpd.exe -w
CMD yönergesi hakkında daha ayrıntılı bilgi için bkz. CMD başvurusu.
Kaçış karakteri
Çoğu durumda dockerfile yönergesi birden çok satıra yayılması gerekir. Bunu yapmak için bir kaçış karakteri kullanabilirsiniz. Varsayılan Dockerfile kaçış karakteri, \ters eğik çizgidir. Ancak, ters eğik çizgi aynı zamanda Windows'ta bir dosya yolu ayırıcısı olduğundan, birden çok satıra yaymak için kullanılması sorunlara neden olabilir. Bu sorunu çözmek için varsayılan kaçış karakterini değiştirmek için ayrıştırıcı yönergesi kullanabilirsiniz. Ayrıştırıcı yönergeleri hakkında daha fazla bilgi için bkz. Ayrıştırıcı yönergeleri.
Aşağıdaki örnekte, varsayılan kaçış karakteri kullanılarak birden çok satıra yayılan tek bir RUN yönergesi gösterilmektedir:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell.exe -Command \
$ErrorActionPreference = 'Stop'; \
wget https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; \
Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \
Remove-Item c:\python-3.5.1.exe -Force
Kaçış karakterini değiştirmek için, Dockerfile dosyasının ilk satırına bir kaçış yorumlama yönergesi yerleştirin. Bu, aşağıdaki örnekte görülebilir.
Not
Kaçış karakteri olarak yalnızca iki değer kullanılabilir: \ ve `.
# escape=`
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell.exe -Command `
$ErrorActionPreference = 'Stop'; `
wget https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; `
Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; `
Remove-Item c:\python-3.5.1.exe -Force
Kaçış ayrıştırıcı yönergesi hakkında daha fazla bilgi için bkz. Escape ayrıştırıcı yönergesi.
Dockerfile'da PowerShell
PowerShell cmdlet'leri
PowerShell cmdlet'leri RUN işlemiyle bir Dockerfile içinde çalıştırılabilir.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell -command Expand-Archive -Path c:\apache.zip -DestinationPath c:\
REST çağrıları
PowerShell'in Invoke-WebRequest cmdlet'i, bir web hizmetinden bilgi veya dosya toplarken yararlı olabilir. Örneğin, Python içeren bir görüntü oluşturursanız, aşağıdaki örnekte gösterildiği gibi daha hızlı indirmeler elde etmek için $ProgressPreferenceSilentlyContinue olarak ayarlayabilirsiniz.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell.exe -Command \
$ErrorActionPreference = 'Stop'; \
$ProgressPreference = 'SilentlyContinue'; \
Invoke-WebRequest https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; \
Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \
Remove-Item c:\python-3.5.1.exe -Force
Not
Invoke-WebRequest Nano Sunucu'da da çalışır.
Görüntü oluşturma işlemi sırasında dosyaları indirmek için PowerShell'i kullanmak için bir diğer seçenek de .NET WebClient kitaplığını kullanmaktır. Bu, indirme performansını artırabilir. Aşağıdaki örnek, WebClient kitaplığını kullanarak Python yazılımını indirir.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell.exe -Command \
$ErrorActionPreference = 'Stop'; \
(New-Object System.Net.WebClient).DownloadFile('https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe','c:\python-3.5.1.exe') ; \
Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \
Remove-Item c:\python-3.5.1.exe -Force
Not
Nano Sunucu şu anda WebClient'i desteklemiyor.
PowerShell betikleri
Bazı durumlarda, görüntü oluşturma işlemi sırasında kullandığınız kapsayıcılara bir betik kopyalamak ve ardından betiği kapsayıcı içinden çalıştırmak yararlı olabilir.
Not
Bu, herhangi bir görüntü katmanı önbelleğe almayı sınırlandırır ve Dockerfile'ın okunabilirliğini azaltır.
Örnek, derleme makinesinden kapsayıcıya bir betiği kopyalamak için ADD talimatını kullanır. Bu betik daha sonra RUN yönergesi kullanılarak çalıştırılır.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
ADD script.ps1 /windows/temp/script.ps1
RUN powershell.exe -executionpolicy bypass c:\windows\temp\script.ps1
Docker derlemesi
Dockerfile oluşturulduğunda ve diske kaydedildikten sonra yeni görüntüyü oluşturmak için docker build çalıştırabilirsiniz.
docker build komutu birkaç isteğe bağlı parametreyi ve Dockerfile yolunu alır. Docker Oluşturma ile ilgili tüm belgeler için, tüm oluşturma seçeneklerinin listesini de içeren oluşturma başvurusuna bakın.
docker build komutunun biçimi şöyle olur:
docker build [OPTIONS] PATH
Örneğin, aşağıdaki komut "iis" adlı bir görüntü oluşturur.
docker build -t iis .
Derleme işlemi başlatıldığında, çıkış durumu gösterir ve oluşan hataları döndürür.
C:\> docker build -t iis .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM mcr.microsoft.com/windows/servercore:ltsc2019
---> 6801d964fda5
Step 2 : RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart
---> Running in ae8759fb47db
Deployment Image Servicing and Management tool
Version: 10.0.10586.0
Image Version: 10.0.10586.0
Enabling feature(s)
The operation completed successfully.
---> 4cd675d35444
Removing intermediate container ae8759fb47db
Step 3 : RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html
---> Running in 9a26b8bcaa3a
---> e2aafdfbe392
Removing intermediate container 9a26b8bcaa3a
Successfully built e2aafdfbe392
Sonuç, bu örnekte "iis" olarak adlandırılan yeni bir kapsayıcı görüntüsüdür.
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
iis latest e2aafdfbe392 About a minute ago 207.8 MB
windowsservercore latest 6801d964fda5 4 months ago 0 B
Daha fazla okuma ve başvurular
- Windows için Dockerfiles ve Docker derlemesini iyileştirme
- Dockerfile referansı