GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come usare Hadolint per peluccare i tuoi file Docker

I Dockerfile definiscono il contenuto delle immagini Docker come un insieme di istruzioni in un file di testo. La sintassi di Dockerfile è generalmente semplice, ma ci sono alcuni trucchi da evitare. Aderire alle migliori pratiche durante la scrittura di Dockerfile complessi in un'impostazione di gruppo può essere complicato a meno che tu non convalidi automaticamente il contenuto del tuo file.

Hadolint è un linter Dockerfile che può individuare problemi comuni per te. Utilizza un albero di sintassi astratto (AST) per analizzare il Dockerfile rispetto a set di regole predefiniti. Hadolint incorpora anche ShellCheck in modo da poter eseguire lint degli script della shell nel RUN del tuo Dockerfile anche le istruzioni.

Per iniziare

Hadolint è distribuito in più formati. Puoi iniziare rapidamente scaricando l'ultimo binario precompilato per il tuo sistema operativo dalla pagina delle versioni di GitHub del progetto.

Hadolint ha anche una propria immagine Docker, hadolint/hadolint , se preferisci non utilizzare direttamente il file binario. Come opzione finale, puoi accedere a Hadolint via web per la sperimentazione.

Linguaggio di un Dockerfile

Passa a Hadolint il percorso di un Dockerfile per avviare una nuova scansione:

hadolint Dockerfile

Se stai utilizzando la versione Dockerizzata, è più semplice reindirizzare il contenuto del tuo file in un contenitore Hadolint:

docker run --rm -i hadolint/hadolint < Dockerfile


I risultati della scansione verranno mostrati nel tuo terminale. In questo esempio, Hadolint suggerisce che RUN apt-get install del Dockerfile istruzione non è sicura in quanto non specifica le versioni esplicite del pacchetto. Il contenuto della tua immagine potrebbe cambiare tra le build, creando potenzialmente problemi di confusione.

Cosa cerca Hadolint?

Hadolint ha dozzine di regole integrate che controllano la configurazione e i problemi di sicurezza comuni. Linter mira a rendere i tuoi Dockerfile conformi alle migliori pratiche di creazione di immagini suggerite da Docker.

I controlli inclusi coprono l'uso di utenti finali non root, facendo riferimento a un percorso relativo in un WORKDIR istruzione, aggiungendo più HEALTHCHECK istruzioni e non utilizzando tag e versioni fissati in modo esplicito. Poiché Hadolint eredita anche il set di regole ShellCheck, verranno alla luce i comuni problemi di scripting di Bash che lo strumento identifica anche.

Le regole sono identificate come numeri preceduti da HL o SC . HL le regole fanno parte di Hadolint mentre SC le voci provengono da ShellCheck. A ogni controllo viene assegnata una gravità da Error a Info. Se ricevi Errori nei risultati della scansione, questi dovrebbero essere i primi problemi che risolvi.

Personalizzazione della configurazione

Hadolint è configurato tramite un .hadolint.yaml file. Cercherà in più posizioni incluso il tuo lavoro, .config e directory home. Viene utilizzato solo il primo file trovato:non è possibile unire le posizioni.

Il file di configurazione consente di personalizzare le scansioni ignorando le regole e modificandone la gravità. Sebbene il set di regole predefinito copra le best practice consigliate, potresti scoprire che alcuni controlli non si applicano al tuo ambiente. Commettere un .hadolint.yaml insieme al tuo Dockerfile ti consente di personalizzare le scansioni Hadolint di conseguenza. La maggior parte dei campi dei file di configurazione sono supportati anche come flag CLI e variabili di ambiente.

Le regole sono disabilitate dal ignored campo. Questo dovrebbe essere un elenco di ID regola:

ignored:
  - DL3010
  - DL3020

Se devi ridurre la gravità di una regola senza disabilitarla del tutto, utilizza il override chiave invece. Ciò ti consente anche di promuovere un problema di bassa gravità a un livello superiore. Usalo se vuoi porre maggiore enfasi su un particolare problema.

override:
  warning:
    - DL3020

Questo retrocede la regola DL3020 dal suo livello di "errore" predefinito al meno grave "avviso". Questa regola richiede l'utilizzo di COPY invece di ADD quando fai riferimento a file e cartelle nel tuo contesto di build.

Puoi anche regolare il livello di gravità globale. Impostazione della failure-threshold il campo indica a Hadolint di uscire con uno stato di errore se un test segnala un errore al livello di gravità specificato:

failure-threshold: warning

Questa istruzione significa che la scansione Hadolint fallirà se c'è un errore o un avviso nel suo output.

Puoi disabilitare l'uscita con un codice di errore usando il no-fail: true config o il --no-fail Bandiera CLI. Questo indicherà a Hadolint di uscire con un 0 codice indipendentemente dall'esito effettivo del test. Può essere utile se desideri includere Hadolint come processo non bloccante in una pipeline CI.

Registri di fiducia

Un altro uso del file di configurazione è definire registri attendibili a cui si desidera poter fare riferimento nei propri Dockerfile. Quando il trustedRegistries campo è impostato, Hadolint ti avviserà quando viene utilizzata un'immagine da un altro registro:

trustedRegistries:
  - docker.io
  - docker-registry.example.com

Schemi di etichette

Hadolint offre anche pelucchi di base per etichette. Ciò ti consente di applicare le etichette aggiunte alla tua immagine da Dockerfile LABEL le istruzioni rispettano i vincoli specificati. Ecco un esempio di come funziona:

label-schema:
  notes: text
  app-version: semver
  built-at: rfc3339

Questo frammento di configurazione definisce i tipi di dati per quattro etichette che puoi utilizzare nel tuo Dockerfile. notes viene dichiarato come campo di testo arbitrario mentre app-version deve essere un identificatore di versione compatibile con semver. built-at è contrassegnato come stringa datetime RFC-3339. Puoi ottenere l'elenco completo dei tipi supportati nei documenti Hadolint.

Hadolint consente l'uso di etichette che non sono elencate nello schema. Puoi disabilitarlo e limitare LABEL istruzioni solo a quelli presenti nello schema impostando strict-labels: true o usando il --strict-labels bandiera.

Formati di output

Diversi formati di output sono supportati tramite il format opzione o --format bandiera. L'impostazione predefinita è tty che emette un output colorato sul tuo terminale. I colori possono essere disabilitati con il --no-color bandiera.

Sono disponibili i seguenti formattatori alternativi:

  • json – Fornisce l'elenco dei problemi rilevati come una struttura JSON dettagliata, ideale per l'uso con i propri script.
  • checkstyle – Un report compatibile con Checkstyle.
  • codeclimate – Un rapporto compatibile con il clima del codice.
  • gitlab_codeclimate – Variazione del report Code Climate che funziona con le funzionalità integrate di qualità del codice di GitLab. Ciò ti consente di visualizzare gli errori come widget nelle pagine di richiesta di unione durante l'esecuzione di Hadolint con GitLab CI.

Questi formati di output sono ideali per l'utilizzo di Hadolint a livello di codice o come parte di una pipeline CI.

Riepilogo

Hadolint automatizza il rilevamento dei problemi di Dockerfile. Ciò consente alle tue immagini Docker di aderire alle best practice e agli standard organizzativi. La configurazione predefinita è un buon punto di partenza, ma puoi personalizzarla in base alle tue esigenze riclassificando e disabilitando le regole.

Dovresti considerare l'integrazione di Hadolint con il tuo strumento CI per ottenere rapporti immediati quando le modifiche Dockerfile vengono salvate. Ciò accelera la revisione del codice offrendo agli sviluppatori visibilità immediata sui problemi. Puoi anche utilizzare lo strumento in locale mentre lavori tramite le estensioni dell'editor supportate dalla community, fornendo un ciclo di feedback ancora più breve.


Docker
  1. Come usare dd in Linux senza distruggere il tuo disco

  2. Come utilizzare Tor Browser per proteggere la tua privacy online

  3. Come utilizzare il server dedicato

  4. Come usare Docker Compose

  5. Come utilizzare un Dockerfile per creare un'immagine Docker

Come utilizzare Red Hat Insights per mantenere i tuoi sistemi Linux

Come configurare il tuo sistema operativo Raspberry Pi per usarlo per la prima volta

Come utilizzare la procedura guidata di backup nel tuo cPanel?

Come utilizzare FTP

Come utilizzare Docker Scan per trovare le vulnerabilità nelle tue immagini

Come installare e utilizzare Docker nel tuo sistema Linux