2015-10-29 16 views
5

C'è un modo semplice per convertire un Dockerfile in uno script Bash per installare tutto il software su un vero SO? Il motivo è che il container docker non può essere modificato e vorrei modificare alcune cose in seguito se non funzionano.convertire lo script Dockerfile in Bash

+0

È possibile eseguire i comandi che il Dockerfile te stesso viene eseguito. Ma non è possibile "convertire" l'immagine su cui si basa su uno script. Se non ti piace come l'immagine della finestra mobile ha funzionato, modifica il Dockerfile e riprova? –

risposta

1

In breve - no.

Analizzando il Dockerfile con uno strumento come dockerfile-parse è possibile eseguire i singoli comandi RUN, ma ciò non replicherebbe l'output del Dockerfile.

Dovresti eseguire la stessa versione dello stesso sistema operativo.

I comandi ADD e COPY influiscono sul filesystem, che si trova nel proprio spazio dei nomi. Esecuzione di questi al di fuori del contenitore potrebbe potenzialmente rompere il sistema host. Il tuo host avrà anche file in luoghi che l'immagine del contenitore non avrebbe.

VOLUME anche le montature influiscono sul file system.

L'immagine FROM (che a sua volta potrebbe discendere da altre immagini) potrebbe avere altre applicazioni installate.

Scrittura di file Docker può essere un processo lento se è presente una fase di installazione o di download di grandi dimensioni. Per attenuarlo, prova ad aggiungere nuovi pacchetti come nuovo comando RUN (per sfruttare la cache) e aggiungere funzionalità in modo incrementale, ottimizzando/comprimendo i layer solo quando la funzionalità è completa.

Si potrebbe anche voler usare qualcosa come ServerSpec per ottenere un approccio TDD alle immagini del contenitore e prevenire regressioni durante lo sviluppo.

Documenti di best practice here, gotchas e original article.

0

è possibile installare l'applicazione all'interno dockerfile come questo

FROM <base> 

RUN apt-get update -y 
RUN apt-get install <some application> -y 
0

Fondamentalmente si può fare una copia del file system del contenitore Docker con “finestra mobile esportazione”, che è quindi possibile scrivere su un dispositivo di loop:

docker build -t <YOUR-IMAGE> ... 
docker create --name=<YOUR-CONTAINER> <YOUR-IMAGE> 
dd if=/dev/zero of=disk.img bs=1 count=0 seek=1G 
mkfs.ext2 -F disk.img 
sudo mount -o loop disk.img /mnt 
docker export <YOUR-CONTAINER> | sudo tar x -C /mnt 
sudo umount /mnt 

Converti un contenitore di Docker in un'immagine di file system non elaborata.

Maggiori informazioni qui: http://mr.gy/blog/build-vm-image-with-docker.html