2014-07-10 21 views
6

Sto costruendo un'immagine Docker sul mio build server (utilizzando TeamCity). Dopo che la compilazione è terminata, voglio prendere l'immagine e distribuirla su un server (staging, produzione).Distribuire un'immagine Docker senza utilizzare un repository

Tutti i tutorial che ho trovato sia

  • spingere l'immagine ad alcuni repository dove può essere scaricato (tirato) dal server (s), che a piccoli progetti introdurre ulteriore complessità
  • uso Heroku-like approccio e costruire le immagini "vicino" o alla macchina in cui verrà eseguito

Penso davvero che non si debba fare nulla di speciale sui server (app). Immagini, IMO, dovrebbero agire come binari chiusi, autosufficienti che rappresentano l'applicazione nel suo complesso e possono essere passati tra i server di build, test, Q & Una ecc

Tuttavia, quando ho save un'applicazione NodeJS standard basata su il repository ufficiale node ha 1,2 GB. Passare un tale file da server a server non è molto comodo.

D: Esiste un modo per esportare/salvare e "caricare" solo le parti modificate (livelli) di un'immagine tramite SSH senza introdurre la complessità di un repository Docker? Il server estrae quindi i livelli mancanti dal al pubblico per evitare il caricamento lento dalla mia rete al cloud.

Investire il contenuto di un prefisso save d non dovrebbe essere difficile da un punto di vista tecnico. In pratica il comando push non carica mai i layer già presenti nel repository.

Q2: Pensi che eseguire un piccolo repository sull'host di docker su cui sto distribuendo per raggiungere questo obiettivo sia un buon approccio?

risposta

0

Se il tuo codice può vivere su Github o BitBucket perché non utilizzare solo DockerHub Automated builds gratuitamente. In questo modo sul tuo nodo devi solo docker pull user/image. Il repository github e il build automatizzato del dockerhub possono essere entrambi privati, quindi non devi esporre il tuo codice al mondo. Anche se potrebbe essere necessario pagare per più di un repository privato o costruire.

Se ancora vuole costruire le proprie immagini poi quando si esegue il comando build che si vede fuori messo simile al seguente:

Step 0 : FROM ubuntu 
---> c4ff7513909d 
Step 1 : MAINTAINER Maluuba Infrastructure Team <[email protected]> 
---> Using cache 
---> 858ff007971a 
Step 2 : EXPOSE 8080 
---> Using cache 
---> 493b76d124c0 
Step 3 : RUN apt-get -qq update 
---> Using cache 
---> e66c5ff65137 

Ciascuno degli hash e.g. ---> c4ff7513909d sono strati intermedi. È possibile trovare le cartelle che ha chiamato con tale hash a /var/lib/docker/graph, per esempio:

ls /var/lib/docker/graph | grep c4ff7513909d 
c4ff7513909dedf4ddf3a450aea68cd817c42e698ebccf54755973576525c416 

Finché si copiano tutti i livelli intermedi al vostro server di distribuzione non avrete bisogno di un repository finestra mobile esterna. Se si modifica solo uno dei livelli intermedi, è necessario ricopiare solo quello per una ridistribuzione. Se noti che i passaggi elencati nel DockerFile conducono ciascuno a un livello intermedio. Finché cambi solo l'ultima riga nel DockerFile dovrai solo caricare un livello. Pertanto raccomando di inserire la riga di codice ADD alla fine del file docker.

ADD MyGeneratedCode /var/my_generated_code