﻿1
00:00:02,530 --> 00:00:10,610
‫In questa lezione, parleremo di montaggio vincolante e dati persistenti in quei montaggi. I requisiti sono davvero che tu sappia solo

2
00:00:10,610 --> 00:00:15,300
‫sulla gestione dei container e su come eseguire i container.

3
00:00:15,320 --> 00:00:20,230
‫Facciamo un salto. Parliamo di attacchi di collegamento. In realtà sono piuttosto fighi.

4
00:00:20,240 --> 00:00:25,550
‫Quando ho saputo per la prima volta di loro, mi ha dato una specie di come avrei potuto usare Docker facilmente per lo

5
00:00:25,550 --> 00:00:26,180
‫sviluppo locale.

6
00:00:26,180 --> 00:00:33,380
‫In realtà, un mount bind è solo una mappatura dei file host o delle directory in un file contenitore

7
00:00:33,380 --> 00:00:35,330
‫o directory. Puoi fare proprio questo.

8
00:00:35,330 --> 00:00:39,040
‫È possibile specificare una directory o solo un singolo file. Sullo sfondo, in pratica

9
00:00:39,050 --> 00:00:43,780
‫è solo che le due posizioni puntano alle stesse posizioni fisiche sul disco.

10
00:00:43,910 --> 00:00:49,730
‫Ancora una volta, questo in realtà salta l'UFS come fanno gli altri volumi in modo che non cancellerà la

11
00:00:49,730 --> 00:00:52,620
‫posizione del tuo host quando elimini il contenitore.

12
00:00:52,640 --> 00:00:58,550
‫Se nel contenitore sono presenti file su cui si mappano i file host, i file host vincono. In realtà non elimina i file

13
00:00:58,550 --> 00:01:03,650
‫nel contenitore che ha sovrascritto perché non sta realmente sovrascrivendo nulla

14
00:01:03,680 --> 00:01:04,770
‫nel contenitore.

15
00:01:04,910 --> 00:01:07,100
‫È proprio lì mentre esiste il bind mount.

16
00:01:07,100 --> 00:01:11,570
‫Nel momento in cui non hai più bisogno del mount del bind e riesegui il container senza

17
00:01:11,570 --> 00:01:17,650
‫di esso, vedresti effettivamente i dati sottostanti che erano lì prima. Poiché i montaggi di bind sono in genere

18
00:01:17,660 --> 00:01:21,870
‫specifici dell'host, per funzionare devono essere necessari dati specifici sul disco rigido dell'host.

19
00:01:21,890 --> 00:01:23,500
‫Non è possibile specificarli in un file Docker.

20
00:01:23,510 --> 00:01:29,080
‫È necessario utilizzarli in fase di esecuzione quando si utilizza il comando Esegui contenitore finestra mobile. Puoi vedere il formato qui.

21
00:01:29,090 --> 00:01:33,980
‫È davvero la -v che abbiamo usato prima, solo sul lato sinistro del colon,

22
00:01:34,100 --> 00:01:38,360
‫in realtà stiamo inserendo un percorso completo piuttosto che solo un nome.

23
00:01:38,360 --> 00:01:42,260
‫E il modo in cui il Docker può effettivamente dire la differenza tra il volume nominato, come

24
00:01:42,410 --> 00:01:46,490
‫abbiamo fatto qualche tempo fa, e il bind mount, è che il bind mount inizia con una barra.

25
00:01:46,490 --> 00:01:51,470
‫Su Windows, noterai che si tratta di due barre in avanti, quindi della lettera di unità e quindi del

26
00:01:51,470 --> 00:01:52,120
‫tuo percorso.

27
00:01:52,130 --> 00:01:57,620
‫Fintanto che hai i due punti sinistro e il lato destro, puoi davvero mappare tutto ciò che

28
00:01:57,620 --> 00:02:01,860
‫vuoi dall'host nel contenitore e puoi anche specificare cose come sola lettura.

29
00:02:01,880 --> 00:02:07,910
‫Il punto in cui questo ha davvero successo è con lo sviluppo e l'esecuzione di servizi all'interno del

30
00:02:07,910 --> 00:02:12,940
‫tuo contenitore che accedono ai file che stai utilizzando sul tuo host o cambiano.

31
00:02:12,950 --> 00:02:14,720
‫Facciamolo con Nginx.

32
00:02:14,930 --> 00:02:22,370
‫Se vai alla radice del nostro repository per questo corso, e poi andiamo nella directory di esempio

33
00:02:22,370 --> 00:02:24,750
‫2 Dockerfile. Ora eravamo qui prima.

34
00:02:24,770 --> 00:02:28,580
‫Se ricordi, ci sono due file. Questo è per Nginx, giusto?

35
00:02:28,580 --> 00:02:36,530
‫Se guardiamo il Dockerfile molto velocemente, è piuttosto semplice. Sta semplicemente specificando una directory di lavoro e quindi copiando

36
00:02:36,560 --> 00:02:39,050
‫un file indice in quella directory.

37
00:02:39,050 --> 00:02:40,490
‫Non ci sono volumi qui.

38
00:02:40,490 --> 00:02:45,290
‫Un mount bind non richiede un volume per funzionare, anche se si potrebbe certamente essere lì.

39
00:02:45,530 --> 00:02:52,590
‫L'host vince sempre, ricordi? Quindi, quando eseguiamo un container docker, facciamo

40
00:02:52,630 --> 00:02:56,330
‫un -d ... chiamiamolo nginx.

41
00:02:56,390 --> 00:03:00,420
‫Diamo la porta 8080 come prima.

42
00:03:00,770 --> 00:03:06,470
‫Quindi questa volta gli daremo il volume. E devo dire che la mia attuale directory di lavoro verrà

43
00:03:06,650 --> 00:03:12,230
‫effettivamente montata in quella directory di lavoro nel contenitore. Poiché il mio file di indice è qui

44
00:03:12,230 --> 00:03:13,390
‫in questa cartella,

45
00:03:13,430 --> 00:03:19,040
‫voglio che sia nel contenitore in modo da poterlo modificare qui, ed è visto dal vivo nel contenitore.

46
00:03:19,040 --> 00:03:20,320
‫Quindi avrà un senso in un secondo.

47
00:03:20,540 --> 00:03:24,280
‫Ecco un piccolo suggerimento veloce. Invece di dover capire tutto

48
00:03:24,290 --> 00:03:28,370
‫il mio percorso e digitare tutto, puoi usare pwd qui in questo modo.

49
00:03:28,460 --> 00:03:36,210
‫Che è una scorciatoia della shell che dice 'stampa la directory di lavoro e sostituisci questo comando con quel percorso.

50
00:03:36,380 --> 00:03:43,460
‫'Quindi useremo la stessa directory di lavoro dal Dockerfile lì, e poi

51
00:03:43,460 --> 00:03:45,360
‫specificheremo l'immagine Nginx.

52
00:03:47,590 --> 00:03:52,930
‫Quello che farò, molto velocemente, è che in realtà aprirò un'altra finestra del terminale in modo da poter

53
00:03:52,930 --> 00:03:54,480
‫fare due cose contemporaneamente.

54
00:03:54,590 --> 00:03:56,010
‫Non hai davvero bisogno di farlo.

55
00:03:56,050 --> 00:04:01,840
‫Fondamentalmente, stiamo solo per modificare il file sul nostro host, e poi sarò nel contenitore e vedremo cosa

56
00:04:01,840 --> 00:04:02,780
‫sta succedendo.

57
00:04:02,920 --> 00:04:04,730
‫Quindi, solo per assicurarci che

58
00:04:04,780 --> 00:04:06,350
‫funzioni, andiamo su localhost.

59
00:04:06,700 --> 00:04:10,000
‫OK, quindi questo non è il file HTML Nginx predefinito.

60
00:04:10,030 --> 00:04:13,080
‫E abbiamo usato l'immagine normale di Nginx.

61
00:04:13,090 --> 00:04:16,580
‫In realtà non abbiamo usato quello personalizzato da questa directory.

62
00:04:16,690 --> 00:04:24,270
‫Abbiamo appena usato un'immagine stock. Per dimostrare questo punto, possiamo effettivamente fare lo

63
00:04:24,280 --> 00:04:37,390
‫stesso, di nuovo il comando esatto ma estrarre -v e invece lo eseguirò sulla porta 8080. E chiamerò questo nginx2.

64
00:04:37,420 --> 00:04:47,930
‫Se vado sul mio browser e vado su localhost 8080, questo è l'indice nginx predefinito. file html.

65
00:04:48,010 --> 00:04:52,130
‫Questo è quello personalizzato che viviamo in questa directory.

66
00:04:52,780 --> 00:04:56,380
‫Quindi, già possiamo vedere che lo ha mappato correttamente.

67
00:04:56,560 --> 00:05:03,010
‫Se apro un'altra scheda qui e ottengo una riga di comando nel contenitore.

68
00:05:08,800 --> 00:05:10,130
‫Quindi vai a quella directory.

69
00:05:17,710 --> 00:05:21,580
‫Noterai che possiamo effettivamente vedere il Dockerfile perché mappiamo l'intera directory.

70
00:05:21,620 --> 00:05:27,460
‫Se sopra a sinistra, se in realtà abbiamo creato un nuovo file e posso semplicemente usare quel comando touch di Linux qui per

71
00:05:30,440 --> 00:05:37,010
‫creare un nuovo file. Quindi a destra ... oops ... continua a dimenticare che ... ls -al, e lo vedrai

72
00:05:37,010 --> 00:05:37,900
‫nel tuo file.

73
00:05:37,970 --> 00:05:43,350
‫Spero che tu capisca cosa sta succedendo qui, che entrambe queste posizioni sono la stessa posizione.

74
00:05:43,370 --> 00:05:47,350
‫E se riecheggiassi qualcosa in quel file testme, e

75
00:05:57,430 --> 00:05:58,420
‫poi ...

76
00:06:01,620 --> 00:06:02,410
‫ecco qua.

77
00:06:02,410 --> 00:06:06,670
‫Il nostro nginx è in grado di vedere le modifiche perché è solo un normale percorso di file

78
00:06:06,670 --> 00:06:08,720
‫nel contenitore e quei file si trovano sull'host.

79
00:06:08,830 --> 00:06:12,670
‫Se dovessi eliminarli nel contenitore, verrebbero eliminati sull'host perché è lo stesso

80
00:06:12,670 --> 00:06:13,210
‫file.

81
00:06:13,210 --> 00:06:19,090
‫Questo è quando di solito induco uno sviluppatore a pensare a tutti i loro ambienti

82
00:06:19,090 --> 00:06:24,670
‫di sviluppo che hanno questa configurazione complicata. Forse stanno usando Vagrant, o qualche altro metodo

83
00:06:24,670 --> 00:06:30,880
‫manuale per impostare il loro ambiente perfetto, e possono iniziare a vedere come questo potrebbe rendere tutto molto più semplice.

84
00:06:31,330 --> 00:06:35,920
‫Poiché non ho dovuto eseguire alcuna complicata configurazione sul mio Mac, ho appena eseguito un contenitore.

85
00:06:35,920 --> 00:06:43,670
‫Ho usato il comando -v con il mount, e ora il mio codice, sul mio host, può essere modificato sul mio host.

86
00:06:43,840 --> 00:06:47,890
‫E davvero non ho mai bisogno di entrare nel guscio del contenitore.

87
00:06:47,890 --> 00:06:52,570
‫Di solito, puoi semplicemente eseguire il contenitore e guardare i suoi registri per vedere se ci sono errori durante

88
00:06:52,570 --> 00:06:53,260
‫la codifica.

89
00:06:53,500 --> 00:06:58,750
‫Naturalmente, questo è un semplice esempio con Nginx. Più avanti, in realtà avremo esempi

90
00:06:58,750 --> 00:07:03,160
‫specifici di diversi ambienti di sviluppo per sviluppo locale e container.

