Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- Menyimpan gambar kontainer sebagai kode.
- Rekreasi gambar kontainer yang cepat dan tepat untuk tujuan pemeliharaan dan peningkatan.
- Integrasi berkelanjutan antara gambar kontainer dan siklus pengembangan.
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 .
Sintaks Dasar
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.
Nota
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.
Peraturan
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 .
DARI
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.
LARI
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
Pertimbangan untuk menggunakan RUN dengan Windows
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 penggunaan RUN dengan Windows
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 .
MENYALIN
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>"]
Pertimbangan untuk menggunakan COPY dengan Windows
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 penggunaan COPY dengan Windows
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.
TAMBAH
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>"]
Pertimbangan untuk menjalankan ADD dengan Windows
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 penggunaan ADD dengan 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.
WORKDIR
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>
Pertimbangan untuk menggunakan WORKDIR dengan Windows
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.
CMD
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>
Pertimbangan untuk menggunakan CMD dengan Windows
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 .
Karakter escape
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.
Nota
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 .
PowerShell di Dockerfile
Cmdlet PowerShell
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:\
Panggilan REST
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
Nota
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
Nota
Nano Server saat ini tidak mendukung WebClient.
Skrip PowerShell
Dalam beberapa kasus, mungkin berguna untuk menyalin skrip ke dalam kontainer yang Anda gunakan selama proses pembuatan gambar, lalu menjalankan skrip dari dalam kontainer.
Nota
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
Docker build
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