Dockerfiles mendefinisikan konten gambar Docker sebagai satu set instruksi dalam file teks. Sintaks Dockerfile umumnya mudah tetapi ada beberapa gotcha yang harus dihindari. Mematuhi praktik terbaik saat menulis Dockerfile yang kompleks dalam pengaturan tim bisa jadi rumit kecuali Anda secara otomatis memvalidasi konten file Anda.
Hadolint adalah linter Dockerfile yang dapat menemukan masalah umum untuk Anda. Ini menggunakan pohon sintaksis abstrak (AST) untuk mengurai Dockerfile Anda terhadap kumpulan aturan yang telah ditentukan. Hadolint juga menggabungkan ShellCheck sehingga dapat mengikat skrip shell di RUN
Dockerfile Anda petunjuk juga.
Memulai
Hadolint didistribusikan dalam berbagai format. Anda dapat memulai dengan cepat dengan mengunduh biner pra-kompilasi terbaru untuk sistem operasi Anda dari halaman rilis GitHub proyek.
Hadolint juga memiliki gambar Dockernya sendiri, hadolint/hadolint
, jika Anda lebih suka tidak menggunakan biner secara langsung. Sebagai opsi terakhir, Anda dapat mengakses Hadolint melalui web untuk eksperimen.
Melinting file Docker
Berikan Hadolint jalur ke Dockerfile untuk memulai pemindaian baru:
hadolint Dockerfile
Jika Anda menggunakan versi Dockerized, paling mudah untuk menyalurkan konten file Anda ke dalam wadah Hadolint:
docker run --rm -i hadolint/hadolint < Dockerfile
Hasil pindaian akan ditampilkan di terminal Anda. Dalam contoh ini, Hadolint menyarankan agar RUN apt-get install
Dockerfile pernyataan tidak aman karena tidak menentukan versi paket eksplisit. Konten gambar Anda dapat berubah di antara build, yang berpotensi menimbulkan masalah yang membingungkan.
Apa yang Dicari Hadolint?
Hadolint memiliki lusinan aturan bawaan yang memeriksa konfigurasi umum dan masalah keamanan. Linter bertujuan untuk membuat file Docker Anda sesuai dengan praktik terbaik pembuatan gambar yang disarankan oleh Docker.
Pemeriksaan yang disertakan mencakup penggunaan pengguna akhir non-root, merujuk jalur relatif dalam WORKDIR
pernyataan, menambahkan beberapa HEALTHCHECK
instruksi, dan tidak menggunakan tag dan versi yang disematkan secara eksplisit. Karena Hadolint juga mewarisi kumpulan aturan ShellCheck, itu akan memunculkan masalah skrip Bash umum yang juga diidentifikasi oleh alat tersebut.
Aturan diidentifikasi sebagai angka yang diawali dengan HL
atau SC
. HL
aturan adalah bagian dari Hadolint sedangkan SC
entri berasal dari ShellCheck. Setiap pemeriksaan diberikan tingkat keparahan dari Kesalahan hingga Info. Jika Anda mendapatkan Kesalahan dalam hasil pemindaian, itu seharusnya menjadi masalah pertama yang Anda selesaikan.
Menyesuaikan Konfigurasi
Hadolint dikonfigurasi melalui .hadolint.yaml
mengajukan. Ini akan mencari beberapa lokasi termasuk pekerjaan Anda, .config
, dan direktori home. Hanya file pertama yang ditemukan yang digunakan – tidak ada penggabungan antar lokasi.
File konfigurasi memungkinkan Anda menyesuaikan pemindaian dengan mengabaikan aturan dan mengubah tingkat keparahannya. Meskipun kumpulan aturan default mencakup praktik terbaik yang direkomendasikan, Anda mungkin menemukan beberapa pemeriksaan tidak berlaku di lingkungan Anda. Melakukan .hadolint.yaml
file di samping Dockerfile Anda memungkinkan Anda menyesuaikan pemindaian Hadolint. Sebagian besar bidang file konfigurasi juga didukung sebagai flag CLI dan variabel lingkungan.
Aturan dinonaktifkan oleh ignored
bidang. Ini harus berupa daftar ID aturan:
ignored: - DL3010 - DL3020
Jika Anda perlu menurunkan tingkat keparahan aturan tanpa menonaktifkannya sepenuhnya, gunakan override
kunci sebagai gantinya. Ini juga memungkinkan Anda mempromosikan masalah dengan tingkat keparahan rendah ke tingkat yang lebih tinggi. Gunakan ini jika Anda ingin lebih menekankan pada masalah tertentu.
override: warning: - DL3020
Ini menurunkan aturan DL3020 dari tingkat "kesalahan" default ke "peringatan" yang kurang serius. Aturan ini mengharuskan Anda menggunakan COPY
bukannya ADD
saat mereferensikan file dan folder dalam konteks build Anda.
Anda juga dapat menyesuaikan tingkat keparahan global. Menyetel failure-threshold
field menginstruksikan Hadolint untuk keluar dengan status kegagalan jika ada pengujian yang melaporkan kesalahan pada tingkat keparahan yang diberikan:
failure-threshold: warning
Instruksi ini berarti pemindaian Hadolint akan gagal jika ada kesalahan atau peringatan pada outputnya.
Anda dapat menonaktifkan keluar dengan kode kegagalan menggunakan no-fail: true
opsi konfigurasi atau --no-fail
bendera CLI. Ini akan menginstruksikan Hadolint untuk keluar dengan 0
kode terlepas dari hasil tes yang sebenarnya. Ini dapat berguna jika Anda ingin menyertakan Hadolint sebagai pekerjaan non-pemblokiran dalam saluran CI.
Registry Terpercaya
Penggunaan lain dari file konfigurasi adalah untuk menentukan registry tepercaya yang ingin Anda rujuk di Dockerfiles Anda. Ketika trustedRegistries
bidang diatur, Hadolint akan memperingatkan Anda ketika gambar dari registri lain digunakan:
trustedRegistries: - docker.io - docker-registry.example.com
Skema Label
Hadolint juga menawarkan linting label dasar. Ini memungkinkan Anda menerapkan label yang ditambahkan ke gambar Anda oleh Dockerfile LABEL
instruksi sesuai dengan batasan yang ditentukan. Berikut ini contoh cara kerjanya:
label-schema: notes: text app-version: semver built-at: rfc3339
Cuplikan konfigurasi ini mendefinisikan tipe data untuk empat label yang dapat Anda gunakan di Dockerfile Anda. notes
dideklarasikan sebagai bidang teks arbitrer saat app-version
harus berupa pengidentifikasi versi yang kompatibel dengan semver. built-at
ditandai sebagai string datetime RFC-3339. Anda bisa mendapatkan daftar lengkap jenis yang didukung di dokumen Hadolint.
Hadolint mengizinkan penggunaan label yang tidak tercantum dalam skema Anda. Anda dapat menonaktifkan ini dan membatasi LABEL
instruksi hanya untuk yang ada dalam skema dengan menyetel strict-labels: true
atau menggunakan --strict-labels
bendera.
Format Keluaran
Beberapa format keluaran didukung melalui format
opsi atau --format
bendera. Standarnya adalah tty
yang memancarkan keluaran berwarna ke terminal Anda. Warna dapat dinonaktifkan dengan --no-color
bendera.
Pemformat alternatif berikut tersedia:
json
– Menyediakan daftar masalah yang terdeteksi sebagai struktur JSON verbose yang ideal untuk digunakan dengan skrip Anda sendiri.checkstyle
– Laporan yang kompatibel dengan Checkstyle.codeclimate
– Laporan yang kompatibel dengan Kode Iklim.gitlab_codeclimate
– Laporan Variasi Kode Iklim yang bekerja dengan fitur kualitas kode terintegrasi GitLab. Ini memungkinkan Anda melihat kesalahan sebagai widget pada halaman permintaan penggabungan saat menjalankan Hadolint dengan GitLab CI.
Format output ini ideal untuk menggunakan Hadolint secara terprogram atau sebagai bagian dari pipeline CI.
Ringkasan
Hadolint mengotomatiskan deteksi masalah Dockerfile. Ini membantu gambar Docker Anda mematuhi praktik terbaik dan standar organisasi. Konfigurasi default adalah titik awal yang baik tetapi Anda dapat menyesuaikannya agar sesuai dengan kebutuhan Anda dengan mengklasifikasi ulang dan menonaktifkan aturan.
Anda harus mempertimbangkan untuk mengintegrasikan Hadolint dengan alat CI Anda untuk mendapatkan laporan instan saat perubahan Dockerfile dilakukan. Ini mempercepat tinjauan kode dengan memberikan pengembang visibilitas langsung ke masalah. Anda juga dapat menggunakan alat ini secara lokal saat bekerja melalui ekstensi editor yang didukung komunitas, memberikan umpan balik yang lebih singkat.