GNU/Linux >> Belajar Linux >  >> Panels >> Docker

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. 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.


Docker
  1. Cara menggunakan dd di Linux tanpa merusak disk Anda

  2. Cara Menggunakan Server Khusus Anda

  3. Cara Menggunakan Gambar Docker, Wadah, dan File Docker Secara Mendalam

  1. Cara Menggunakan Tulis Docker

  2. Cara Menggunakan Dockerfile untuk Membangun Gambar Docker

  3. Cara Menggunakan Perintah Inspeksi Docker

  1. Cara Menggunakan Tor Browser untuk Melindungi Privasi Online Anda

  2. Cara Menggunakan OpenSSH untuk Menghubungkan ke Server Linux Anda

  3. Cara mengkonfigurasi buruh pelabuhan untuk menggunakan proxy