Tempo di lettura stimato: 3 minuti
La maggior parte dei file Docker parte da un’immagine padre. Se hai bisogno di controllare completamente il contenuto della tua immagine, potresti invece aver bisogno di creare un’immagine base.
-
Un’immagine padre è l’immagine su cui si basa la tua immagine. Si riferisce al contenuto della direttiva
FROM
nel Dockerfile. Ogni dichiarazione successiva nel Dockerfile modifica questa parentimage. La maggior parte dei Dockerfile partono da un’immagine padre, piuttosto che da un’immagine base, ma i termini sono talvolta usati in modo intercambiabile. -
Un’immagine base ha
FROM scratch
nel suo Dockerfile.
Questo argomento mostra diversi modi per creare un’immagine base. Il processo specifico dipenderà molto dalla distribuzione Linux che volete impacchettare. Abbiamo alcuni esempi qui sotto, e siete incoraggiati a presentare richieste di pull per contribuire con nuovi esempi.
Creare un’immagine completa usando tar
In generale, iniziate con una macchina funzionante che esegue la distribuzione che vorreste impacchettare come immagine madre, sebbene ciò non sia richiesto per alcuni strumenti come Debootstrap di Debian, che potete anche usare per costruire immagini di Ubuntu.
Può essere semplice come questo per creare un’immagine padre di Ubuntu:
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xeniala29c15f1bf7a$ docker run xenial cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Ci sono altri script di esempio per creare immagini padre nel repository DockerGitHub.
Creare una semplice immagine padre usando scratch
Si può usare l’immagine minima riservata di Docker, scratch
, come punto di partenza per costruire i contenitori. Usando l’scratch
“immagine” si segnala al processo di costruzione che si vuole che il prossimo comando nel Dockerfile
sia il primo strato del filesystem nella propria immagine.
Mentre scratch
appare nel repository di Docker sull’hub, non è possibile estrarlo, eseguirlo o taggare qualsiasi immagine con il nome scratch
. Invece, puoi fare riferimento ad essa nel tuo Dockerfile
. Per esempio, per creare un contenitore minimo usandoscratch
:
FROM scratchADD hello /CMD
Assumendo di aver costruito l’esempio eseguibile “hello” seguendo le istruzioni suhttps://github.com/docker-library/hello-world/, e lo avete compilato con il flag -static
, potete costruire questa Dockerimage usando questo docker build
comando:
docker build --tag hello .
Non dimenticate il carattere .
alla fine, che imposta il build context alla directory corrente.
Nota: Poiché Docker Desktop per Mac e Docker Desktop per Windows utilizzano una VM Linux, è necessario un binario Linux, piuttosto che un binario Mac o Windows.Puoi usare un contenitore Docker per costruirlo:
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essentialcontainer# cd /buildcontainer# gcc -o hello -static -nostartfiles hello.c
Per eseguire la tua nuova immagine, usa il comando docker run
:
docker run --rm hello
Questo esempio crea l’immagine hello-world usata nei tutorial.Se vuoi provarlo, puoi clonare il repo dell’immagine.
Altre risorse
Ci sono molte risorse disponibili per aiutarti a scrivere il tuo Dockerfile
.