Utilizzo di immagini docker personalizzate
Il 20 novembre 2020, Dockerhub ha introdotto una limitazione della velocità di estrazione delle immagini anonime. Questa modifica potrebbe avere un impatto sugli utenti che eseguono lavori utilizzando immagini personalizzate ospitate da Dockerhub.
L'immagine di base della pipeline potrebbe non supportare tutti i requisiti della tua build. Ad esempio, potresti avere bisogno di un controllo più dettagliato sulle versioni di nodo, java, o altri strumenti. Puoi risolvere questo problema includendo
un primo passo nei tuoi lavori della pipeline che installa una serie di nuovi pacchetti e configura attentamente le variabili di ambiente, come ad esempio PATH, per configurare il tuo ambiente. Tuttavia, un approccio migliore consiste
nell'utilizzare il supporto della pipeline per l'esecuzione di un'immagine Docker personalizzata come base per il lavoro.
Il supporto delle immagini Docker personalizzate nella pipeline viene utilizzato solo per fornire un'immagine che uno specifico lavoro della pipeline utilizza mentre è in esecuzione. Ad esempio, puoi fornire un'immagine che contiene degli strumenti personalizzati necessari allo script eseguito dal lavoro. Dopo il completamento del lavoro, il contenitore in cui era in esecuzione viene eliminato.
Indipendentemente dal fatto che tu stia utilizzando un tipo di lavoro di build, test o distribuzione, puoi selezionare un sottotipo di immagine Docker personalizzata per fornire il nome dell'immagine Docker da utilizzare e specificare gli script da eseguire. Usa, ad esempio, le seguenti opzioni per eseguire un lavoro di build con Maven 3.5.3 e IBM Java:
Specifica del nome dell'immagine Docker
Il nome dell'immagine Docker nei lavori dell'immagine Docker personalizzata è progettato per funzionare nello stesso modo in cui funzionano i nomi immagine con la CLI Docker. Il formato di un nome di immagine Docker è: [repository][:][tag].
Ad esempio, per docker run maven:3.5.3-ibmjava, il nome di immagine Docker è maven:3.5.3-ibmjava, dove maven è il repository e 3.5.3-ibmjava è la tag. Non ci sono limitazioni sul nome di
immagine Docker che puoi utilizzare; funziona qualsiasi immagine Docker valida.
Se il campo Docker image name non viene completato, viene utilizzata l'immagine di base della pipeline standard.
Per impostazione predefinita, il vostro repository su Docker Hub viene cercato. Se utilizzi un altro registro Docker, come ad esempio IBM Cloud® Container Registry, puoi
utilizzare il nome DNS completo. Puoi anche utilizzare il nome completo per le immagini su Docker Hub. Ad esempio, registry.hub.docker.com/library/maven:3.5.3-ibmjava.
La tag per un'immagine Docker è facoltativa. Se non specifichi una tag, viene automaticamente impostata su latest. Un valore predefinito latest è solo un nome di tag che il proprietario del repository deve
gestire. Non significa che, cronologicamente parlando, questa immagine Docker sia quella più recente.
Puoi trovare una grande community di repository in Docker Hub. IBM ospita una serie di repository pubblici che il team di IBM Cloud utilizza all'indirizzo https://hub.docker.com/u/ibmcom/.
I repository ibmcom/ibmjava e ibmcom/ibmnode sono utili come base su cui creare.
Utilizzo di un registro di immagini privato
Se si utilizza un registro privato che richiede l'autenticazione, è necessario impostare altre due proprietà dell'ambiente stage: DOCKER_USERNAME e DOCKER_PASSWORD. Puoi utilizzare una proprietà sicura per mascherare
la tua DOCKER_PASSWORD. Prima che la tua immagine venga estratta, il lavoro dell'immagine Docker personalizzata utilizza le tue credenziali di nome utente e password per completare un docker login.
Per la maggior parte dei registri, puoi utilizzare il nome utente e la password che ti sono stati forniti. Se utilizzi IBM Cloud Container Registry per archiviare le tue immagini private, devi utilizzare una chiave API della piattaforma per l'autenticazione.
-
Richiedere una chiave API della piattaforma e assicurarsi di salvare la chiave.
-
Crea le due proprietà dell'ambiente della fase utilizzando
iamapikeyper il tuoDOCKER_USERNAMEe la chiave API della piattaforma che hai salvato per laDOCKER_PASSWORD.caption-side=bottom"
Specifica dello script
Puoi utilizzare il blocco script nei lavori di immagine Docker personalizzata per creare un file di script che viene eseguito un una cartella attività, simile a come funzionano i normali lavori della pipeline.
ENTRYPOINT e CMD dal Dockerfile della tua immagine Docker vengono sovrascritti e non vengono richiamati. In alcuni casi, questo potrebbe significare che devi aggiungere dei passi di inizializzazione al tuo script.
I lavori di immagine Docker personalizzata ti offrono una maggiore flessibilità per quanto riguarda la modalità di esecuzione del tuo script; specificamente, puoi controllare l'interprete dei comandi. In genere, se la prima riga dello script
inizia con #! e il nome di un interprete di comandi, tale voce viene utilizzata per eseguire i comandi del lavoro. Se non specifichi un interprete dei comandi, viene utilizzata la shell predefinita per l'immagine Docker. Di norma,
vengono utilizzati #!/bin/bash o #!/bin/sh; funzionano anche gli interpreti dei comandi immagine per awk, node e ruby, se specifichi un'immagine Docker appropriata.