Come posso creare la mia immagine di base per Docker?


97

Secondo la documentazione di Docker , per creare la tua immagine, devi sempre specificare un'immagine di base utilizzando l' FROMistruzione.

Ovviamente, ci sono molte immagini tra cui scegliere nell'indice Docker , ma cosa succede se volessi crearne una mia? È possibile?

L'immagine baseè creata da Ubuntu se ho capito bene e voglio sperimentare un'immagine Debian. Inoltre, voglio davvero capire come funziona Docker e l' baseimmagine è ancora una scatola nera per me.


Modifica: documentazione ufficiale sulla creazione di un'immagine di base


Non importa. :-) Le domande qui devono ancora essere in argomento secondo le linee guida del sito. Sono trattati nel Centro assistenza e nelle pagine dei tour . (Il collegamento sembra riguardare anche gli sviluppatori di contenitori Docker.) Se stai chiedendo della tua immagine del contenitore, c'è uno strumento per quello sul loro sito
Ken White

@KenWhite: meta domanda pertinente: meta.stackexchange.com/questions/179249/…
Flimm

:-) Rilevante Meta risposta in questo momento, che è la risposta subito sopra la tua. (Vedi in particolare il secondo commento alla risposta che ho collegato, sulla chiarezza di ciò che sta chiedendo la tua domanda.)
Ken White

9
@Ken White: la domanda è come "creare" un'immagine di base, non come distribuire una "immagine". Flimm sta cercando di programmare qualcosa che può essere implementato in seguito, da lui o da altri. Amazon EC2 è correlato alla distribuzione, ma penso che abbiano ancora un paio di programmatori che programmano cose programmate :). La creazione di immagini di base è un esempio di cose programmate direi.
qkrijger

@qkrijger: questo viene discusso nella meta domanda collegata. Dal momento che la discussione è aperta, si prega di pubblicare qualsiasi discussione sull'attualità lì (dove il consenso sembra essere non è un argomento "roba programmata").
Ken White

Risposte:



32

Citando Solomon Hykes :

Puoi facilmente creare un nuovo contenitore da qualsiasi tarball con "docker import". Per esempio:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

Forse inserisci la modifica / aggiornamento in un commento invece in modo che altri possano vederlo e forse qualcuno può inviare nuovamente la modifica.
Bdoserror

1
@Flimm Perché dovrei usare sudo in questo caso? Esegui questi comandi nella tua directory utente e non dovresti avere motivo per l'elevazione dei privilegi. Stai creando un'immagine, non installandola.
rancidfishbreath

Né è necessario nemmeno il root per il normale utilizzo di Docker; aggiungi semplicemente te stesso al dockergruppo.
tekknolagi

1
Ma il trattino nel comando di importazione, consigliato da Flimm è necessario: docker import - flimm/mybaseinvece didocker import flimm/mybase
Daniel Alder

La proprietà dei file in tar sarà influenzata dal fatto che tu stia eseguendo come root o meno. Se non come root, allora debootstrape tardovrebbe almeno essere eseguito sotto fakeroot.
clacke

21

(credito a fatherlinux) Ottieni informazioni da http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , che spiega meglio

  1. Crea i file tar per il tuo file system, semplicemente potrebbe essere

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Trasferisci il file tar su un altro sistema docker se non è installato localmente ed importesso

    cat centos6-base.tar | docker import - centos6-base
    
  3. Ora puoi verificare eseguendolo.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Gli script di dotcloud combinano i primi due passaggi insieme, il che mi rende confuso e sembra complicato all'inizio.

La linea guida ufficiale del docker che utilizzadebootstrap cerca anche di rendere il file system pulito.

Puoi giudicare da solo come eseguire il passaggio 1.


14

Per iniziare a creare la tua immagine da zero, puoi utilizzare l' scratchimmagine.

L'utilizzo di "immagine" da zero segnala al processo di compilazione che si desidera che il comando successivo nel Dockerfile sia il primo livello del filesystem nell'immagine.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch


1
Questo plus importda un file tar, sono le due risposte canoniche e quel collegamento è la risorsa canonica.
clacke

7

Se vuoi creare la tua immagine di base, darei prima un'occhiata alle immagini ufficiali , in particolare stackbrewall'interno di quel repository.

Altrimenti ci sono alcuni ottimi riferimenti per immagini minime del sistema operativo nel repository Docker stesso.

Ad esempio, ecco uno script per creare un'immagine di arco minimale e ce ne sono altri qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.