Cara Menggunakan Hadolint untuk Lint Dockerfiles Anda

Dockerfiles mendefinisikan konten gambar Docker sebagai satu set instruksi dalam file teks. Sintaks Dockerfile umumnya mudah tetapi ada beberapa gotcha yang harus dihindari. Mengikuti 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 mendeteksi masalah umum untuk Anda. Ini menggunakan pohon sintaksis abstrak (AST) untuk mengurai Dockerfile Anda terhadap kumpulan aturan yang telah ditentukan. Hadolint juga menyertakan ShellCheck sehingga dapat membuat skrip shell di Dockerfile Anda RUN instruksi juga.

mulai

Hadolint didistribusikan dalam beberapa format. Anda dapat memulai dengan cepat dengan mengunduh biner pra-kompilasi terbaru untuk sistem operasi Anda dari halaman rilis GitHub proyek.
gambar linter Hadolint Dockerfile

Hadolint juga memiliki image Docker sendiri, hadolint/hadolint, jika Anda memilih untuk tidak menggunakan biner secara langsung. Sebagai opsi terakhir, Anda dapat mengakses Hadolint melalui web untuk eksperimen.

Lapisan Dockerfile

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

gambar linting Dockerfile dengan Hadolint

Hasil pemindaian akan ditampilkan di terminal Anda. Dalam contoh ini, Hadolint menyarankan bahwa Dockerfile’s RUN apt-get install 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 Dockerfile Anda mengikuti praktik pembuatan gambar terbaik yang disarankan oleh Docker.

Pengujian yang disertakan mencakup penggunaan pengguna akhir non-root, yang menentukan jalur relatif ke a WORKDIR pernyataan, menambahkan banyak HEALTHCHECK instruksi, dan tidak menggunakan tag dan versi yang disematkan secara eksplisit. Karena Hadolint juga mewarisi kumpulan aturan ShellCheck, Hadolint dapat mendeteksi masalah skrip Bash umum yang juga dikenali oleh alat tersebut.

Aturan didefinisikan sebagai angka yang diawali dengan HL Hai SCHL Aturan adalah bagian dari Hadolint sedangkan SC entri berasal dari ShellCheck. Setiap pemeriksaan diberikan tingkat keparahan dari Kesalahan ke Informasi. Jika Anda mendapatkan Kesalahan dalam hasil pemindaian Anda, itu seharusnya menjadi masalah pertama yang Anda selesaikan.

Menyesuaikan Konfigurasi

Hadolint dikonfigurasi melalui a .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 mengesampingkan aturan dan mengubah tingkat keparahannya. Meskipun kumpulan aturan default mencakup praktik terbaik yang disarankan, Anda mungkin menemukan bahwa beberapa pemeriksaan tidak berlaku untuk lingkungan Anda. Manufaktur .hadolint.yaml File di sebelah Dockerfile 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 mengurangi tingkat keparahan aturan tanpa menonaktifkannya sepenuhnya, gunakan override kunci sebagai gantinya. Ini juga memungkinkan Anda untuk mempromosikan masalah dengan tingkat keparahan rendah ke tingkat yang lebih tinggi. Gunakan 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 daripada ADD saat mereferensikan file dan folder dalam konteks build Anda.

Anda juga dapat menyesuaikan tingkat keparahan global. Pengaturan failure-threshold field menginstruksikan Hadolint untuk keluar dengan status kegagalan jika ada pengujian yang melaporkan kesalahan dengan tingkat keparahan yang diberikan:

failure-threshold: warning

Instruksi ini berarti bahwa pemindaian Hadolint akan gagal jika ada kesalahan atau peringatan pada outputnya.

Anda dapat menonaktifkan output dengan kode kegagalan menggunakan no-fail: true opsi konfigurasi atau --no-fail bendera CLI. Ini akan menginstruksikan Hadolint untuk keluar dengan 0 kode tanpa memperhatikan hasil tes yang sebenarnya. Ini bisa berguna jika Anda ingin menyertakan Hadolint sebagai pekerjaan non-pemblokiran dalam pipa CI.

Daftar Tepercaya

Penggunaan lain dari file konfigurasi adalah untuk menentukan registri 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 Dockerfile Anda LABEL instruksi mengikuti 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 sementara app-version harus berupa pengidentifikasi versi yang kompatibel dengan semver. built-at ditandai sebagai string datetime RFC-3339. Anda dapat menemukan daftar lengkap jenis yang didukung di dokumen Hadolint.

Hadolint mengizinkan penggunaan label yang tidak tercantum dalam skema Anda. Anda dapat menonaktifkannya dan membatasi LABEL instruksi kepada mereka yang hanya ada dalam skema dengan mengatur strict-labels: true atau menggunakan --strict-labels bendera

Format Keluaran

Banyak format output yang didukung oleh format pilihan atau --format bendera Standarnya adalah tty yang menampilkan keluaran warna ke terminal Anda. Warna dapat dinonaktifkan menggunakan --no-color bendera

Formatter alternatif berikut tersedia:

  • json – Menyediakan daftar masalah yang terdeteksi sebagai struktur JSON verbose yang ideal untuk digunakan dalam skrip Anda sendiri.
  • checkstyle – Laporan yang kompatibel dengan Checkstyle.
  • codeclimate – Laporan yang sesuai 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 dan standar terbaik 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 dibuat. Ini mempercepat tinjauan kode dengan memberi pengembang visibilitas langsung ke masalah. Anda juga dapat menggunakan alat ini secara lokal saat Anda bekerja melalui ekstensi editor yang didukung komunitas, memberikan umpan balik yang lebih singkat.

Leave a Comment

Your email address will not be published. Required fields are marked *