2014-07-18 10 views
11

Devo ancora trovare un modo elegante ed efficiente per eseguire i comandi di Laravel Artisan nel mio ambiente di sviluppo locale basato su Docker.Consiglia il modo ad Artisan su Docker

Qualcuno potrebbe suggerire il modo consigliato o "corretto" per fare cose come le migrazioni?

Oppure, qualcuno ha trovato un modo pulito per farlo? Idealmente con esempi o suggerimenti.

cose che ho considerato:

  • un nuovo contenitore (condividono lo stesso volume e db link) con ssh, solo per l'esecuzione di comandi (sembra brutto).
  • Hacks nel supervisore che potrebbe quindi finire in esecuzione in diretta (non ideale).
  • Modifica di db configs o tentativo di hackerare in un ambiente "host", in modo che almeno cose come la migrazione possano essere eseguite dall'host.
  • Creazione di front end Web per eseguire le cose (davvero brutto).
  • Cercando di costruire un "segnale" per le cose.

Sto ancora discutendo con Docker ed è un approccio nuovo contenitore per tutti.

Suppongo di voler bilanciare le cose di cool-dev-ops con il perché-do-ho-bisogno-altro-falso-server-solo-get-it-working-già.

Mi piacerebbe impegnarsi ad esso per il mio flusso di lavoro dev, ma sembra diventare scomodi da usare in determinate circostanze, come questo ...

Eventuali suggerimenti e le idee sono benvenute. Ringrazia tutti.

+0

Ho creato un pubblicare su alcuni strumenti diversi come NPM, Bower, Grunt e Artisan e Composer, senza SSH, il modo corretto [qui] (https://medium.com/@tomsowerby/proper-provisioning-with-docker- c412211b97bb). Vorrei anche consigliare dylans blog per servire la tua app con una corretta configurazione di un volume di dati separato e un contenitore php separato. – tomsowerby

risposta

8

La procedura consigliata per Docker è eseguire ogni processo all'interno del proprio contenitore. Pertanto, il modo ideale per eseguire i comandi artisan consiste nell'avere un'immagine per la creazione di contenitori appositamente per questo scopo.

Ho creato un'immagine che può essere estratta dall'hub Docker dylanlindgren/docker-laravel-artisan e funziona davvero bene. È su GitHub e se vuoi dare un'occhiata allo Dockerfile dietro di esso.

Ho anche appena scritto un blog post che descrive il modo in cui tutti questi contenitori separati si adattano.

+0

Sì! Sono arrivato alla stessa conclusione. Ho trovato le connessioni al database un po 'fastidiose, soprattutto perché sono possibili così tanti tipi di connessione che è difficile avere un Dockerfile/contenitore di dimensioni univoche. Comunque, un buon post sul blog, lo consiglierei a chiunque si imbattesse in questa pagina. – tomsowerby

1

Ci sono un paio di possibilità ...

  1. Montaggio di un directory host nel vostro contenitore come la cartella in cui la vostra laravel app vita. In questo modo è possibile eseguire solo php artisan migrate o composer update dall'host. Tuttavia, potresti avere problemi con la distribuzione, poiché dovresti replicare quella parte del tuo ambiente sul server.

  2. aggiunta di un server SSH al contenitore (operazione non consigliata, here's a good discussion of that).

  3. costruire e utilizzare nsenter, uno strumento per "inserire" un contenitore in esecuzione e ottenere l'accesso alla shell. Nota, non l'ho usato, l'ho appena trovato qualche tempo fa tramite un riferimento nel link sopra.

Se siete interessati soprattutto implementazione e si sta facendo attraverso una dockerfile, allora la risposta sarebbe quella di aggiungere composer install e php artisan migrate al vostro dockerfile in modo che corrono quando il contenitore è costruito.

Sono interessato a ricevere più risposte a questo. È qualcosa su cui mi sto anche avvicinando e vorrei saperne di più.

1

Uso SSH ed eseguo migrazioni da un terminale all'interno del contenitore.

Personalmente mi piace l'approccio Phusion's dell'utilizzo di Docker come 'lightweight virtual machine'. Così ho usato il loro baseimage-docker che ho esteso per creare il mio Docker image for Laravel applications.

Sono consapevole che l'immagine di Phusion può essere polemica nella comunità Docker e che SSH is frowned upon da parte di alcuni che sostengono i contenitori Docker come microservizi. Ma sono soddisfatto dell'approccio di Phusion finché non ci saranno strumenti e pratiche più consolidati per l'approccio multi-contenitore.

10

Docker 1,3 portare nuovo comando exec Così ora è possibile "entrare" contenitore correndo come

docker exec -it my-container-name /bin/bash 

Dopo di che è possibile eseguire qualsiasi comando che si desidera

php artisan --version 
+0

? se il contenitore in esecuzione non è in modalità TTY –

Problemi correlati