Usare i montaggi di binding

Nel capitolo precedente è stato descritto e utilizzato un volume denominato per salvare in modo permanente i dati nel database. I volumi denominati sono eccezionali se si vuole semplicemente archiviare i dati, perché non è necessario preoccuparsi della posizione in cui sono archiviati i dati.

Con i montaggi di binding è possibile controllare l'esatto mountpoint nell'host. Questa operazione può essere utilizzata per rendere permanente i dati, ma viene spesso utilizzata per fornire dati aggiuntivi nei contenitori. Quando si lavora in un'applicazione, è possibile usare un montaggio di binding per montare il codice sorgente nel contenitore per visualizzare le modifiche al codice, rispondere e consentire di visualizzare immediatamente le modifiche.

Per le applicazioni basate su nodi, nodemon è un ottimo strumento che consente di controllare le modifiche ai file e quindi di riavviare l'applicazione. Sono disponibili strumenti equivalenti nella maggior parte degli altri linguaggi e Framework.

Confronti di tipo volume rapido

I montaggi di binding e i volumi denominati sono i due tipi principali di volumi disponibili con il motore docker. Sono tuttavia disponibili driver di volume aggiuntivi per supportare altri casi di utilizzo (SFTP, Ceph, NetApp, S3e altro ancora).

Proprietà Volumi denominati Bind mount
Percorso host Docker sceglie Controllo
Esempio di montaggio (using -v ) My-volume:/usr/local/data /path/to/data:/usr/local/data
Popola il nuovo volume con contenuto del contenitore No
Supporta i driver di volume No

Avviare un contenitore in modalità dev

Per eseguire il contenitore per supportare un flusso di lavoro di sviluppo, procedere come segue:

  • Montare il codice sorgente nel contenitore
  • Installare tutte le dipendenze, incluse le dipendenze "dev"
  • Avviare nodemon per controllare le modifiche del file System
  1. Assicurarsi che non siano presenti contenitori precedenti getting-started in esecuzione.

  2. Eseguire il comando seguente (sostituire i \ caratteri con ` in Windows PowerShell). Si apprenderà come procedere in seguito:

    docker run -dp 3000:3000 \
        -w /app -v ${PWD}:/app \
        node:12-alpine \
        sh -c "yarn install && yarn run dev"
    
    • -dp 3000:3000 -uguale a quello precedente. Esegui in modalità scollegata (in background) e crea un mapping delle porte
    • -w /app -imposta la "directory di lavoro" o la directory corrente da cui viene eseguito il comando
    • -v ${PWD}:/app -Binding montare la directory corrente dall'host nel contenitore alla /app Directory
    • node:12-alpine : immagine da usare. Si noti che questa è l'immagine di base per l'app da Dockerfile
    • sh -c "yarn install && yarn run dev" : comando. Stiamo iniziando una shell usando sh (Alpine non ha bash ) e l'esecuzione yarn install di per installare tutte le dipendenze e quindi l'esecuzione yarn run dev . Se si osserva la, si noterà package.json che lo dev script viene avviato nodemon .
  3. È possibile controllare i log usando docker logs -f <container-id> . Si saprà che si è pronti a procedere quando viene visualizzato quanto segue:

    docker logs -f <container-id>
    $ nodemon src/index.js
    [nodemon] 1.19.2
    [nodemon] to restart at any time, enter `rs`
    [nodemon] watching dir(s): *.*
    [nodemon] starting `node src/index.js`
    Using sqlite database at /etc/todos/todo.db
    Listening on port 3000
    

    Al termine del controllo dei log, uscire da Ctrl + C .

  4. A questo punto, apportare una modifica all'app. Nel src/static/js/app.js file modificare il pulsante Aggiungi elemento per aggiungere semplicemente. Questa modifica sarà alla riga 109.

    -                         {submitting ? 'Adding...' : 'Add Item'}
    +                         {submitting ? 'Adding...' : 'Add'}
    
  5. È sufficiente aggiornare la pagina (o aprirla). la modifica verrà visualizzata quasi immediatamente nel browser. Potrebbero essere necessari alcuni secondi per il riavvio del server del nodo, quindi, se si riceve un errore, provare a eseguire l'aggiornamento dopo alcuni secondi.

    Screenshot dell'etichetta aggiornata per il pulsante Aggiungi

  6. È possibile apportare tutte le altre modifiche desiderate. Al termine, arrestare il contenitore e compilare la nuova immagine usando docker build -t getting-started . .

Usare i montaggi di binding è molto comune per le configurazioni di sviluppo locali. Il vantaggio è che non è necessario che nel computer di sviluppo siano installati tutti gli strumenti e gli ambienti di compilazione. Con un unico docker run comando, l'ambiente di sviluppo viene tirato e pronto per l'uso. Si apprenderà come Docker Compose in un passaggio successivo, in quanto ciò consentirà di semplificare i comandi (si stanno già ottenendo moltissimi flag).

Riepilogo

A questo punto, è possibile salvare in modo permanente il database e rispondere rapidamente alle esigenze e alle esigenze degli investitori e dei fondatori. Evviva! Ma indovinate? Hai ricevuto ottime notizie!

Il progetto è stato selezionato per lo sviluppo futuro.

Per preparare l'ambiente di produzione, è necessario eseguire la migrazione del database dall'uso di SQLite a un elemento che può essere ridimensionato in modo più efficace. Per semplicità, si manterrà un database relazionale e si commuterà l'applicazione per l'uso di MySQL. Ma come si deve eseguire MySQL? Come è possibile consentire ai contenitori di comunicare tra loro? Questa esercitazione verrà illustrata di seguito.

Passaggi successivi

Continuare con l'esercitazione.