Pelatihan
Modul
Membangun aplikasi web kontainer dengan Docker - Training
Gunakan Docker untuk membangun, menyimpan, dan mengelola gambar kontainer privat dengan Azure Container Registry.
Browser ini sudah tidak didukung.
Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.
Mesin Docker mencakup alat yang mengotomatiskan pembuatan gambar kontainer. Meskipun Anda dapat membuat gambar kontainer secara manual dengan menjalankan perintah docker commit
, mengadopsi proses pembuatan gambar otomatis memiliki banyak manfaat, termasuk:
Komponen Docker yang mendorong otomatisasi ini adalah Dockerfile, dan perintah docker build
.
Dockerfile adalah file teks yang berisi instruksi yang diperlukan untuk membuat gambar kontainer baru. Instruksi ini termasuk identifikasi gambar yang ada untuk digunakan sebagai dasar, perintah yang akan dijalankan selama proses pembuatan gambar, dan perintah yang akan berjalan ketika instans baru gambar kontainer disebarkan.
Docker build adalah perintah mesin Docker yang memanfaatkan Dockerfile dan memicu proses pembuatan citra.
Topik ini akan menunjukkan kepada Anda cara menggunakan Dockerfiles dengan kontainer Windows, memahami sintaks dasarnya, dan apa instruksi Dockerfile yang paling umum.
Dokumen ini akan membahas konsep gambar kontainer dan lapisan gambar kontainer. Jika Anda ingin mempelajari lebih lanjut tentang gambar dan lapisan gambar, lihat gambar dasar kontainer.
Untuk panduan lengkap tentang Dockerfiles, lihat referensi Dockerfile .
Dalam bentuknya yang paling mendasar, Dockerfile bisa sangat sederhana. Contoh berikut membuat gambar baru, yang mencakup IIS, dan situs 'halo dunia'. Contoh ini mencakup komentar (ditunjukkan dengan #
), yang menjelaskan setiap langkah. Bagian berikutnya dari artikel ini akan masuk ke detail selengkapnya tentang aturan sintaks Dockerfile, dan instruksi Dockerfile.
Catatan
Dockerfile harus dibuat tanpa ekstensi. Untuk melakukan ini di Windows, buat file dengan editor pilihan Anda, lalu simpan dengan notasi "Dockerfile" (termasuk tanda kutip).
# 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" ]
Untuk contoh tambahan Dockerfiles untuk Windows, lihat Dockerfile untuk repositori Windows.
Instruksi Dockerfile menyediakan Docker Engine instruksi yang diperlukan untuk membuat gambar kontainer. Instruksi ini dilakukan satu per satu dan berurutan. Contoh berikut adalah instruksi yang paling umum digunakan di Dockerfiles. Untuk daftar lengkap instruksi Dockerfile, lihat referensi Dockerfile .
Instruksi FROM
mengatur gambar kontainer yang akan digunakan selama proses pembuatan gambar baru. Misalnya, saat menggunakan instruksi FROM mcr.microsoft.com/windows/servercore
, gambar yang dihasilkan berasal dari, dan memiliki dependensi pada, gambar OS dasar Windows Server Core. Jika gambar yang ditentukan tidak ada pada sistem tempat proses build Docker dijalankan, mesin Docker akan mencoba mengunduh gambar dari registri gambar publik atau privat.
Format instruksi FROM berjalan seperti ini:
FROM <image>
Berikut adalah contoh perintah FROM:
Untuk mengunduh versi ltsc2019 windows server core dari Microsoft Container Registry (MCR):
FROM mcr.microsoft.com/windows/servercore:ltsc2019
Untuk informasi lebih rinci, lihat referensi dari.
Instruksi RUN
menentukan perintah yang akan dijalankan, dan diambil ke dalam gambar kontainer baru. Perintah ini dapat mencakup item seperti menginstal perangkat lunak, membuat file dan direktori, dan membuat konfigurasi lingkungan.
Instruksi RUN berjalan seperti ini:
# exec form
RUN ["<executable>", "<param 1>", "<param 2>"]
# shell form
RUN <command>
Perbedaan antara bentuk exec dan shell adalah bagaimana instruksi RUN
dijalankan. Saat menggunakan formulir exec, program yang ditentukan dijalankan secara eksplisit.
Berikut adalah contoh formulir exec:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN ["powershell", "New-Item", "c:/test"]
Gambar yang dihasilkan menjalankan perintah powershell New-Item c:/test
:
docker history doc-exe-method
IMAGE CREATED CREATED BY SIZE COMMENT
b3452b13e472 2 minutes ago powershell New-Item c:/test 30.76 MB
Sebaliknya, contoh berikut menjalankan operasi yang sama dalam bentuk shell:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell New-Item c:\test
Gambar yang dihasilkan memiliki instruksi eksekusi cmd /S /C powershell New-Item c:\test
.
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
Pada Windows, saat menggunakan perintah RUN
dengan format exec, backslash harus di-escape.
RUN ["powershell", "New-Item", "c:\\test"]
Ketika program target adalah instalasi Windows, Anda harus mengekstrak setup melalui bendera /x:<directory>
sebelum Anda bisa memulai prosedur instalasi yang sebenarnya (diam-diam). Anda juga harus menunggu perintah keluar sebelum melakukan hal lain. Jika tidak, proses akan berakhir sebelum waktunya tanpa menginstal apa pun. Untuk detailnya, silakan lihat contoh di bawah ini.
Contoh dockerfile berikut menggunakan DISM untuk menginstal IIS dalam gambar kontainer:
RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart
Contoh ini menginstal paket Visual Studio yang dapat didistribusikan ulang.
Start-Process
dan parameter -Wait
digunakan untuk menjalankan alat penginstal. Ini memastikan bahwa penginstalan selesai sebelum melanjutkan ke instruksi berikutnya di Dockerfile.
RUN powershell.exe -Command Start-Process c:\vcredist_x86.exe -ArgumentList '/quiet' -Wait
Untuk informasi terperinci tentang instruksi RUN, lihat referensi run .
Instruksi COPY
menyalin file dan direktori ke sistem file kontainer. File dan direktori harus berada di jalur yang relatif terhadap Dockerfile.
Format instruksi COPY
seperti ini:
COPY <source> <destination>
Jika sumber atau tujuan menyertakan spasi kosong, sertakan jalur dalam tanda kurung siku dan tanda kutip ganda, seperti yang ditunjukkan dalam contoh berikut:
COPY ["<source>", "<destination>"]
Pada Windows, format tujuan harus menggunakan garis miring ke depan. Misalnya, ini adalah instruksi COPY
yang valid:
COPY test1.txt /temp/
COPY test1.txt c:/temp/
Sementara itu, format berikut dengan garis miring terbalik tidak akan berfungsi.
COPY test1.txt c:\temp\
Contoh berikut menambahkan konten direktori sumber ke direktori bernama sqllite
dalam gambar kontainer:
COPY source /sqlite/
Contoh berikut akan menambahkan semua file yang dimulai dengan konfigurasi ke direktori c:\temp
gambar kontainer:
COPY config* c:/temp/
Untuk informasi selengkapnya tentang instruksi COPY
, lihat referensi COPY.
Instruksi ADD seperti instruksi COPY, tetapi dengan lebih banyak kemampuan. Selain menyalin file dari host ke dalam gambar kontainer, instruksi ADD
juga dapat menyalin file dari lokasi jarak jauh dengan spesifikasi URL.
Format instruksi ADD
seperti ini:
ADD <source> <destination>
Jika sumber atau tujuan menyertakan spasi kosong, sertakan jalur dalam tanda kurung siku dan tanda kutip ganda:
ADD ["<source>", "<destination>"]
Pada Windows, format tujuan harus menggunakan garis miring ke depan. Misalnya, ini adalah instruksi ADD
yang valid:
ADD test1.txt /temp/
ADD test1.txt c:/temp/
Sementara itu, format berikut dengan garis miring terbalik tidak akan berfungsi:
ADD test1.txt c:\temp\
Selain itu, di Linux instruksi ADD
akan memperluas paket terkompresi pada salinan. Fungsionalitas ini tidak tersedia di Windows.
Contoh berikut menambahkan konten direktori sumber ke direktori bernama sqllite
dalam gambar kontainer:
ADD source /sqlite/
Contoh berikut akan menambahkan semua file yang dimulai dengan "konfigurasi" ke direktori c:\temp
gambar kontainer.
ADD config* c:/temp/
Contoh berikut akan mengunduh Python untuk Windows ke direktori c:\temp
gambar kontainer.
ADD https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe /temp/python-3.5.1.exe
Untuk informasi selengkapnya tentang instruksi ADD
, lihat referensi ADD.
Instruksi WORKDIR
menetapkan direktori kerja untuk instruksi Dockerfile lainnya, seperti RUN
, CMD
, dan juga direktori kerja untuk menjalankan instans gambar kontainer.
Format instruksi WORKDIR
seperti ini:
WORKDIR <path to working directory>
Pada Windows, jika direktori kerja menyertakan garis miring terbalik, direktori tersebut harus diloloskan.
WORKDIR c:\\windows
Contoh
WORKDIR c:\\Apache24\\bin
Untuk informasi terperinci tentang instruksi WORKDIR
, lihat referensi WORKDIR.
Instruksi CMD
mengatur perintah default yang akan dijalankan saat menyebarkan instans gambar kontainer. Misalnya, jika kontainer akan menghosting server web NGINX, CMD
mungkin menyertakan instruksi untuk memulai server web dengan perintah seperti nginx.exe
. Jika beberapa instruksi CMD
ditentukan dalam Dockerfile, hanya yang terakhir yang dievaluasi.
Format instruksi CMD
seperti ini:
# exec form
CMD ["<executable", "<param>"]
# shell form
CMD <command>
Di Windows, jalur file yang ditentukan dalam instruksi CMD
harus menggunakan garis miring maju atau telah lolos garis miring terbelakang \\
. Berikut ini adalah instruksi CMD
yang valid:
# exec form
CMD ["c:\\Apache24\\bin\\httpd.exe", "-w"]
# shell form
CMD c:\\Apache24\\bin\\httpd.exe -w
Namun, format berikut tanpa garis miring yang tepat tidak akan berfungsi:
CMD c:\Apache24\bin\httpd.exe -w
Untuk informasi selengkapnya tentang instruksi CMD
, lihat referensi CMD .
Dalam banyak kasus, instruksi Dockerfile perlu mencakup beberapa baris. Untuk melakukan ini, Anda dapat menggunakan karakter escape. Karakter escape Dockerfile default adalah garis miring terbalik \
. Namun, karena backslash juga merupakan pemisah jalur file di Windows, menggunakannya dalam beberapa baris dapat menyebabkan masalah. Untuk mengatasi hal ini, Anda dapat menggunakan direktif pengurai untuk mengubah karakter escape default. Untuk informasi selengkapnya tentang arahan pengurai, lihat direktif Parser.
Contoh berikut menunjukkan satu instruksi RUN yang mencakup beberapa baris menggunakan karakter escape default:
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
Untuk memodifikasi karakter escape, letakkan direktif pengurai escape pada baris pertama Dockerfile. Ini dapat dilihat dalam contoh berikut.
Catatan
Hanya dua nilai yang dapat digunakan sebagai karakter escape: \
dan `
.
# 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
Untuk informasi selengkapnya tentang arahan pengurai escape, lihat direktif pengurai Escape .
Cmdlet PowerShell dapat dijalankan dalam Dockerfile dengan operasi RUN
.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
RUN powershell -command Expand-Archive -Path c:\apache.zip -DestinationPath c:\
Cmdlet Invoke-WebRequest
PowerShell dapat berguna saat mengumpulkan informasi atau file dari layanan web. Misalnya, jika Anda membuat gambar yang menyertakan Python, Anda dapat mengatur $ProgressPreference
ke SilentlyContinue
untuk mencapai unduhan yang lebih cepat, seperti yang ditunjukkan dalam contoh berikut.
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
Catatan
Invoke-WebRequest
juga berfungsi di Nano Server.
Opsi lain untuk menggunakan PowerShell untuk mengunduh file selama proses pembuatan gambar adalah menggunakan pustaka .NET WebClient. Ini dapat meningkatkan performa unduhan. Contoh berikut mengunduh perangkat lunak Python, menggunakan pustaka WebClient.
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
Catatan
Nano Server saat ini tidak mendukung WebClient.
Dalam beberapa kasus, mungkin berguna untuk menyalin skrip ke dalam kontainer yang Anda gunakan selama proses pembuatan gambar, lalu menjalankan skrip dari dalam kontainer.
Catatan
Ini akan membatasi penembolokan lapisan gambar dan mengurangi keterbacaan Dockerfile.
Contoh ini menyalin skrip dari komputer build ke dalam kontainer menggunakan instruksi ADD
. Skrip ini kemudian dijalankan menggunakan instruksi RUN.
FROM mcr.microsoft.com/windows/servercore:ltsc2019
ADD script.ps1 /windows/temp/script.ps1
RUN powershell.exe -executionpolicy bypass c:\windows\temp\script.ps1
Setelah Dockerfile dibuat dan disimpan ke disk, Anda dapat menjalankan docker build
untuk membuat gambar baru. Perintah docker build
menerima beberapa parameter opsional dan jalur ke Dockerfile. Untuk dokumentasi lengkap tentang Docker Build, termasuk daftar semua opsi build, lihat referensi build .
Format perintah docker build
berjalan seperti ini:
docker build [OPTIONS] PATH
Misalnya, perintah berikut akan membuat gambar bernama "iis."
docker build -t iis .
Ketika proses pembangunan telah dimulai, output akan menunjukkan status dan mengembalikan kesalahan yang muncul.
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
Hasilnya adalah gambar kontainer baru, yang dalam contoh ini diberi nama "iis."
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
Pelatihan
Modul
Membangun aplikasi web kontainer dengan Docker - Training
Gunakan Docker untuk membangun, menyimpan, dan mengelola gambar kontainer privat dengan Azure Container Registry.