1 00:00:00,000 --> 00:00:05,042 >> [MUSIC SPILLE] 2 00:00:05,042 --> 00:00:06,000 DAVID MALAN: All right. 3 00:00:06,000 --> 00:00:07,630 Tusen takk for at du kom. 4 00:00:07,630 --> 00:00:11,850 Dette er CS50 seminar om Docker, en teknologi som vi selv og CS50 5 00:00:11,850 --> 00:00:13,392 har begynt å bruke i noen tid nå. 6 00:00:13,392 --> 00:00:15,766 Så mitt navn er David Malan, jeg undervise Harvard Introduksjon 7 00:00:15,766 --> 00:00:16,671 til Computer Science. 8 00:00:16,671 --> 00:00:18,670 For ganske mange år, vi har vært å gi elevene 9 00:00:18,670 --> 00:00:20,435 nedlastbar klient-side virtuelle maskiner 10 00:00:20,435 --> 00:00:22,134 der de gjør sine problemer sett. 11 00:00:22,134 --> 00:00:24,300 At vi nå har gått over til en Cloud miljø 12 00:00:24,300 --> 00:00:27,396 som faktisk bruker denne teknologien kalt Docker, slik at all CS50 13 00:00:27,396 --> 00:00:29,270 studenter har nå sin egne Docker containere 14 00:00:29,270 --> 00:00:31,180 at du snart høre om. 15 00:00:31,180 --> 00:00:33,740 >> Videre på CS50 server sidegruppe, i mange år 16 00:00:33,740 --> 00:00:35,290 vi bruker Amazons Cloud server. 17 00:00:35,290 --> 00:00:37,164 Vi kjørte individuell virtuelle maskiner. 18 00:00:37,164 --> 00:00:40,330 Det også, har vi begynt å gå over til disse tingene kalt Docker beholdere 19 00:00:40,330 --> 00:00:43,762 slik at alle våre programmer er nå helt isolert fra hverandre. 20 00:00:43,762 --> 00:00:46,720 Så for dette og mer, la meg presentere våre venner, Nico og Mano, 21 00:00:46,720 --> 00:00:48,574 fra Docker selv. 22 00:00:48,574 --> 00:00:49,740 NICOLA Kabar: Takk, David. 23 00:00:49,740 --> 00:00:51,410 Hei alle sammen. 24 00:00:51,410 --> 00:00:54,230 Mitt navn er Nico og dette er Mano. 25 00:00:54,230 --> 00:00:58,260 Vi er fra Docker. 26 00:00:58,260 --> 00:01:02,240 Vi kommer til å snakke om-- til gi dere en intro til Docker, 27 00:01:02,240 --> 00:01:08,100 og forhåpentligvis mot slutten av denne talen kan du realisere 28 00:01:08,100 --> 00:01:12,890 hvor mye du kan bruke legen til oksalat din applikasjonsutvikling 29 00:01:12,890 --> 00:01:14,200 og distribusjon. 30 00:01:14,200 --> 00:01:21,250 >> Så skal vi begynne real rask med litt bakgrunnsinformasjon. 31 00:01:21,250 --> 00:01:22,750 Beskriv hva Docker handler om. 32 00:01:22,750 --> 00:01:25,490 Hvordan fungerer det? 33 00:01:25,490 --> 00:01:27,400 Hvordan er det bygd? 34 00:01:27,400 --> 00:01:29,360 Jeg skal gjøre noen demoer. 35 00:01:29,360 --> 00:01:35,070 Og Mano kommer til å være som beskriver hvordan du kan bruke Docker 36 00:01:35,070 --> 00:01:37,720 og gir deg konkrete skritt hvordan du kan komme i gang. 37 00:01:37,720 --> 00:01:41,490 >> Jeg ville sette pris på om dere kan holde off for dine spørsmål mot slutten. 38 00:01:41,490 --> 00:01:46,800 På den måten kan jeg bli adressering dem spørsmål gjennom hele presentasjonen. 39 00:01:46,800 --> 00:01:52,150 Så vi skal la litt tid mot slutten for spørsmål. 40 00:01:52,150 --> 00:01:55,170 >> Så bare virkelig rask, som har faktisk noen gang jobbet på Docker, 41 00:01:55,170 --> 00:01:56,850 som spilte med det? 42 00:01:56,850 --> 00:01:58,000 Awesome. 43 00:01:58,000 --> 00:01:58,520 Kjølig. 44 00:01:58,520 --> 00:01:59,817 Flott. 45 00:01:59,817 --> 00:02:01,525 Så, jeg kommer til å starte med litt historie. 46 00:02:01,525 --> 00:02:04,350 47 00:02:04,350 --> 00:02:09,820 Så tilbake på 90-tallet og tidlige 2000-tallet, i utgangspunktet 48 00:02:09,820 --> 00:02:16,940 som webutviklere, app utviklere, da de gikk for å distribuere et program 49 00:02:16,940 --> 00:02:19,350 det var knyttet til bart metall. 50 00:02:19,350 --> 00:02:20,860 Det var én server. 51 00:02:20,860 --> 00:02:22,870 Det var ett program. 52 00:02:22,870 --> 00:02:25,260 >> Tradisjonelt et eksempel ville være som en LAMP stack, 53 00:02:25,260 --> 00:02:30,630 hvor du faktisk måtte få opp pool av ressurser. 54 00:02:30,630 --> 00:02:37,110 CPU, minne, disk, nettverk, installasjon operativsystem på toppen av det. 55 00:02:37,110 --> 00:02:40,060 Hvis du serverer noe, hvis du faktisk har web server, 56 00:02:40,060 --> 00:02:42,470 du trenger noe som Apache å tjene. 57 00:02:42,470 --> 00:02:47,540 >> Hvis søknaden trenger database, backhand, 58 00:02:47,540 --> 00:02:50,840 du ville installere noe som MySQL, og så videre. 59 00:02:50,840 --> 00:02:55,910 Og hvis du trenger det kjøring, PHPs og PHP Python arbeid var der. 60 00:02:55,910 --> 00:02:59,480 Og så måtte vi faktisk ta disse trinnene i rekkefølge 61 00:02:59,480 --> 00:03:02,060 å få din søknad oppe og går. 62 00:03:02,060 --> 00:03:08,440 >> Hvis du trenger mer datakraft, du utgangspunktet måtte ringe Ops fyr 63 00:03:08,440 --> 00:03:16,260 eller gal å gå og samle opp en ny stykke maskinvare, koble den, 64 00:03:16,260 --> 00:03:19,850 og du må gjenta de prosesser og om igjen. 65 00:03:19,850 --> 00:03:23,680 Så denne prosessen var forholdsvis kostbart. 66 00:03:23,680 --> 00:03:26,080 Var definitivt veldig treg. 67 00:03:26,080 --> 00:03:27,550 >> Det var ineffektive. 68 00:03:27,550 --> 00:03:33,890 Og i mange tilfeller, din hardware ble underutnyttet. 69 00:03:33,890 --> 00:03:38,830 Så, på slutten av 90-tallet og begynnelsen av 2000-tallet, maskinvarevirtualisering kom over. 70 00:03:38,830 --> 00:03:42,475 Og som du kan se her i bilde, i utgangspunktet hva de gjorde 71 00:03:42,475 --> 00:03:46,390 er abstrahert pool av gratis hardware ressurser 72 00:03:46,390 --> 00:03:49,680 og hva slags servert dem til de øvre lag, 73 00:03:49,680 --> 00:03:52,360 i dette tilfellet, en gjest-operativsystem. 74 00:03:52,360 --> 00:03:54,940 >> Og hele ideen om virtuelle maskiner kom over 75 00:03:54,940 --> 00:03:59,110 og som virkelig hjalp Cloud databehandling slik vi kjenner den i dag. 76 00:03:59,110 --> 00:04:02,730 Så hva det betydde er du kan kjøre flere virtuelle maskiner, som 77 00:04:02,730 --> 00:04:06,720 mente flere stabler, multippel applikasjon på en samme fysiske maskin. 78 00:04:06,720 --> 00:04:10,570 79 00:04:10,570 --> 00:04:16,440 >> Dette definitivt hjulpet med Hastigheten på applikasjons. 80 00:04:16,440 --> 00:04:17,629 Definitivt med utgifter. 81 00:04:17,629 --> 00:04:22,810 Du trenger ikke å gå og bruke energi, tid og ressurser til rack 82 00:04:22,810 --> 00:04:26,210 flere servere for å få til mer beregne. 83 00:04:26,210 --> 00:04:30,950 Og hastigheten på faktisk bringe de ressurser up er mye raskere. 84 00:04:30,950 --> 00:04:31,450 Flott. 85 00:04:31,450 --> 00:04:34,320 >> Så vi løste sult i verden, ikke sant? 86 00:04:34,320 --> 00:04:36,390 Nei egentlig ikke. 87 00:04:36,390 --> 00:04:42,410 Så, virtualisering så mye som det er faktisk hjulpet, løse problemet, 88 00:04:42,410 --> 00:04:45,460 det faktisk introdusert en rekke utfordringer. 89 00:04:45,460 --> 00:04:49,210 Hypervisoren definitivt innført en masse av kompleksitet 90 00:04:49,210 --> 00:04:53,820 håndtering av de underliggende pool av ressurser. 91 00:04:53,820 --> 00:04:57,910 >> Det er tyngre i den forstand at før du hadde et enkelt operativsystem som 92 00:04:57,910 --> 00:05:01,830 er som tre, fire konserter på disk. 93 00:05:01,830 --> 00:05:04,230 Nå, hvis du har 10 maskiner på en enkelt maskinvare 94 00:05:04,230 --> 00:05:09,060 du må multipliserer det med antall maskiner. 95 00:05:09,060 --> 00:05:11,440 Det er definitivt mer dyrt på en måte du fortsatt 96 00:05:11,440 --> 00:05:14,430 må få lisens for virtualiseringsteknologi 97 00:05:14,430 --> 00:05:18,210 hvis det ikke er åpen kildekode. 98 00:05:18,210 --> 00:05:21,120 >> Men, la oss ikke ta alle kreditt fra virtualisering. 99 00:05:21,120 --> 00:05:27,530 Fordi det som skjedde er at det er en masse stabler og massevis av programvare 100 00:05:27,530 --> 00:05:33,900 teknologier som ble aktivert av hvor fort du kunne få 101 00:05:33,900 --> 00:05:38,040 til ressurser med Cloud boom. 102 00:05:38,040 --> 00:05:46,675 >> Så, i dag en eneste app eller tjeneste kan bruke noen av følgende runtimes 103 00:05:46,675 --> 00:05:47,216 eller databaser. 104 00:05:47,216 --> 00:05:50,250 105 00:05:50,250 --> 00:05:56,070 PHP, Python, MySQL, Redis, whatnot. 106 00:05:56,070 --> 00:05:59,740 Så det er mye av kompleksiteten på dette antall stabler å faktisk få opp 107 00:05:59,740 --> 00:06:02,210 en enkelt tjeneste. 108 00:06:02,210 --> 00:06:07,300 Og sammen med det, hadde du mye underliggende ressurser eller infrastruktur 109 00:06:07,300 --> 00:06:15,210 typer å teste distribuere og i utgangspunktet ta til produksjon disse programmene 110 00:06:15,210 --> 00:06:16,900 at du utvikler. 111 00:06:16,900 --> 00:06:21,950 >> Særlig ettersom teamene har vokst jobber med disse appene, 112 00:06:21,950 --> 00:06:25,310 det er mye av kompleksitet og utfordringer 113 00:06:25,310 --> 00:06:31,660 som ble tatt for å sikre at den cycle-- utgangspunktet søknad 114 00:06:31,660 --> 00:06:34,040 utviklingen syklus, er faktisk vellykket. 115 00:06:34,040 --> 00:06:40,440 Så det faktum at din søknad arbeider lokalt på din lokale VM 116 00:06:40,440 --> 00:06:47,480 garanterer ikke at kollegaen din kommer til å forvente de samme resultatene. 117 00:06:47,480 --> 00:06:51,330 >> Og når driftsteam er involvert i å ta det du har 118 00:06:51,330 --> 00:06:54,480 og distribuere den i produksjon skala, også er det ingen garanti 119 00:06:54,480 --> 00:06:56,730 at det er faktisk kommer til å skje. 120 00:06:56,730 --> 00:07:00,900 Så dette etterlater oss med en virkelig big-- mye spørsmålstegn, 121 00:07:00,900 --> 00:07:07,700 en rekke utfordringer faktisk møtt på samme måte tilbake i dagene. 122 00:07:07,700 --> 00:07:12,280 Og det minnet oss om shippingindustrien. 123 00:07:12,280 --> 00:07:14,280 >> Så skipsfarten hadde mye varer, 124 00:07:14,280 --> 00:07:16,190 som du kan se på venstre side. 125 00:07:16,190 --> 00:07:19,840 Og på høyre side, det er mye av, i utgangspunktet, 126 00:07:19,840 --> 00:07:22,160 måter å sende disse varene. 127 00:07:22,160 --> 00:07:26,040 Og hva skjer med venner folk kom sammen og sa: 128 00:07:26,040 --> 00:07:29,600 vi trenger å standardisere hvordan vi faktisk sende disse varene. 129 00:07:29,600 --> 00:07:33,280 Og boom, har du intermodal container. 130 00:07:33,280 --> 00:07:38,970 >> Så ble de enige om det meste vanligste størrelsene for beholderen. 131 00:07:38,970 --> 00:07:40,160 Hvordan man skal håndtere dem. 132 00:07:40,160 --> 00:07:44,560 Hva nøyaktig metode du trenger å laste dem og losse dem. 133 00:07:44,560 --> 00:07:49,590 Og derfor, som virkelig hjulpet shippingindustrien. 134 00:07:49,590 --> 00:07:55,250 Nå mer enn 90% fokus transportert globalt bruker slike containere. 135 00:07:55,250 --> 00:08:01,010 Og som definitivt reduserer utgifter samt 136 00:08:01,010 --> 00:08:03,400 skader på grunn av frakt. 137 00:08:03,400 --> 00:08:09,660 >> Så vi tar den samme modellen og vi gjelder de to app utviklingsprogramvare 138 00:08:09,660 --> 00:08:13,080 arkitektur, i den forstand at containerization 139 00:08:13,080 --> 00:08:15,842 tok virtualisering opp ett nivå. 140 00:08:15,842 --> 00:08:17,800 Så i stedet for å gjøre det på maskinvarenivå, 141 00:08:17,800 --> 00:08:22,060 Det ble mer av en drifts systemnivå virtualisering. 142 00:08:22,060 --> 00:08:26,450 >> Og vi gjør det ved å gi hver anvendelse i sin egen lette, 143 00:08:26,450 --> 00:08:31,180 isolert, kjørbar, og bærbar, viktigst, 144 00:08:31,180 --> 00:08:35,049 en måte å faktisk pakke alt som den trenger for å kjøre. 145 00:08:35,049 --> 00:08:36,100 Anywhere det kan kjøres. 146 00:08:36,100 --> 00:08:42,039 Så uansett om du kjører den på lokal dev miljø, produksjons 147 00:08:42,039 --> 00:08:44,490 miljø, din iscenesettelse eller testing. 148 00:08:44,490 --> 00:08:47,700 Uansett hva som ligger til grunn Infrastrukturen er der, 149 00:08:47,700 --> 00:08:51,410 du hadde en funksjonell arbeids app. 150 00:08:51,410 --> 00:08:54,100 151 00:08:54,100 --> 00:09:01,800 >> Så det er akkurat det i utgangspunktet containere gjør på dette problemet. 152 00:09:01,800 --> 00:09:04,070 De løse det ved å emballasje på en slik måte det 153 00:09:04,070 --> 00:09:09,490 at det kan garantere at det er utplassert vellykket uansett hvor den lever. 154 00:09:09,490 --> 00:09:12,120 Så hvis du kommer lignende, Bob det er fortsatt OK. 155 00:09:12,120 --> 00:09:17,860 Hvis du er forvirret med hva jeg sier, Jeg kommer til å bli utdype det. 156 00:09:17,860 --> 00:09:20,900 >> Så hvordan Docker selv passer inn i dette bildet? 157 00:09:20,900 --> 00:09:26,335 Så Docker er en åpen plattform for enkelt å legge vekt lett, 158 00:09:26,335 --> 00:09:30,500 å bygge skip, løpe, lett bærbar selv 159 00:09:30,500 --> 00:09:33,440 tilstrekkelige app containere hvor som helst. 160 00:09:33,440 --> 00:09:37,660 Så hvis du tar noe fra denne snakke, kan du ta følgende. 161 00:09:37,660 --> 00:09:40,980 >> Hvis du har din app kjører lokalt, og du utviklet det 162 00:09:40,980 --> 00:09:45,930 i å bruke Docker plattformen, forventer det å være vellykket utplassert. 163 00:09:45,930 --> 00:09:49,380 Uansett hva som er underliggende infrastruktur. 164 00:09:49,380 --> 00:09:53,830 Så hvis du har en Docker container og det fungerer, så 165 00:09:53,830 --> 00:09:58,130 så lenge det finnes en Docker Motoren på den andre side-- 166 00:09:58,130 --> 00:10:02,190 hvis driften infrastruktur bruker noen Cloud, enten det 167 00:10:02,190 --> 00:10:06,680 er AWS, eller Googles eller Microsoft, eller noen av de offentlige Clouds, 168 00:10:06,680 --> 00:10:10,010 eller din egen Cloud, eller åpne bunken Cloud, eller ditt lokale miljø. 169 00:10:10,010 --> 00:10:11,970 >> Hvis du har en motor løping, det betyr 170 00:10:11,970 --> 00:10:14,537 det kommer til å være vellykket utplassert der. 171 00:10:14,537 --> 00:10:16,620 Det kommer til å være i gang nøyaktig samme atferd 172 00:10:16,620 --> 00:10:21,480 som du bygd den skal være. 173 00:10:21,480 --> 00:10:26,080 Så hvis vi ser at-- jeg kommer til å gå gjennom hva som faktisk 174 00:10:26,080 --> 00:10:29,160 er i de viktigste komponentene i Docker. 175 00:10:29,160 --> 00:10:31,060 >> Så Engine er i kjernen av Docker. 176 00:10:31,060 --> 00:10:32,770 Det er hjernens. 177 00:10:32,770 --> 00:10:39,360 Det orkestrerer bygning, shipping, og distribuere og administrere 178 00:10:39,360 --> 00:10:41,570 beholderne selv. 179 00:10:41,570 --> 00:10:45,160 Jeg skal grave i hva Engine gjør i flere detaljer i et sekund. 180 00:10:45,160 --> 00:10:47,740 181 00:10:47,740 --> 00:10:51,720 I utgangspunktet, fordi Doctor ble bygget rundt klientserverarkitekturer, 182 00:10:51,720 --> 00:10:56,630 så for å samhandle med Motor du trenger noen form for en klient. 183 00:10:56,630 --> 00:11:01,200 >> Bildene er malene i som beholdere er bygget fra. 184 00:11:01,200 --> 00:11:06,800 Så bilder er i utgangspunktet bare statiske filer. 185 00:11:06,800 --> 00:11:08,740 Maler og beholdere er faktisk hva som er 186 00:11:08,740 --> 00:11:12,280 kjører under kjøring som tjener din søknad 187 00:11:12,280 --> 00:11:15,150 eller gjøre noe med dataene. 188 00:11:15,150 --> 00:11:19,020 >> Registry er adressert som et problem av hvordan du faktisk distribuere bilder. 189 00:11:19,020 --> 00:11:23,230 Så hvis du trenger å dele et bilde at du jobbet på din kollega 190 00:11:23,230 --> 00:11:27,220 eller til ops team, du bruke den ved hjelp av registeret. 191 00:11:27,220 --> 00:11:31,720 Du kan laste ned en åpen kildekode versjon av det som Docker jobbet på 192 00:11:31,720 --> 00:11:33,150 og åpne hentet. 193 00:11:33,150 --> 00:11:38,040 >> Eller du kan bruke Docker hjelp, som er den Cloud versjon 194 00:11:38,040 --> 00:11:40,130 å dytte og dra bilder der ute. 195 00:11:40,130 --> 00:11:41,160 Det er en stor ting. 196 00:11:41,160 --> 00:11:44,520 Fordi det er en stor økosystem rundt Docker og det er 197 00:11:44,520 --> 00:11:48,960 virkelig tungt utnytte navet. 198 00:11:48,960 --> 00:11:59,780 >> Så for å oppsummere her, dette er hvordan minimalistisk Docker arbeidsflyt klient. 199 00:11:59,780 --> 00:12:04,040 Du samhandler med verten, i dette tilfellet er det de Docker demoner. 200 00:12:04,040 --> 00:12:06,490 Det er det samme som Engine. 201 00:12:06,490 --> 00:12:09,690 Du gjør kommandoer som Docker bygge, trekke, løpe. 202 00:12:09,690 --> 00:12:14,280 Og selve motoren går og gjør de tingene. 203 00:12:14,280 --> 00:12:18,010 >> Så enten det samhandler med Registeret for å trekke disse bildene 204 00:12:18,010 --> 00:12:19,670 og lagene av bildene. 205 00:12:19,670 --> 00:12:25,030 Enten om du ønsker å distribuere, kjøre containere, drepe dem, kaste dem ned, 206 00:12:25,030 --> 00:12:25,730 whatnot. 207 00:12:25,730 --> 00:12:32,190 Så dette oppsummerer arbeidsflyten av alle disse komponentene. 208 00:12:32,190 --> 00:12:34,710 >> Så hvis du tar hver komponent av seg selv. 209 00:12:34,710 --> 00:12:37,690 Så Engine, det er bare en daemon. 210 00:12:37,690 --> 00:12:40,800 Det vil slags spille det for å støtte det på Linux fordi den gjør 211 00:12:40,800 --> 00:12:44,380 krever visse Linux kernel funksjoner. 212 00:12:44,380 --> 00:12:48,820 Men Windows fungerer på å gjøre det samme. 213 00:12:48,820 --> 00:12:53,720 Det er ment å bli støttet av Windows Server 2 016. 214 00:12:53,720 --> 00:13:01,500 >> Så, igjen, ansvar med Motoren er til, eller skal, bygge bilder. 215 00:13:01,500 --> 00:13:05,340 Trekk bildene fra Docker Hub eller din egen registeret. 216 00:13:05,340 --> 00:13:07,840 Hvis du er ferdig med disse bildene eller du oppretter en nye bilder, 217 00:13:07,840 --> 00:13:14,770 du kan presse dem tilbake til register å distribuere dem til andre lag. 218 00:13:14,770 --> 00:13:18,300 >> Og prøver å inneholde det lokalt og administrere containere livssyklus 219 00:13:18,300 --> 00:13:19,260 lokalt. 220 00:13:19,260 --> 00:13:22,010 Det er bygget rundt HTTP REST API. 221 00:13:22,010 --> 00:13:24,480 Så teknisk mulig skriv din egen klient 222 00:13:24,480 --> 00:13:31,650 så lenge som den bruker HTTP, noe som er en meget standard mekanisme for å snakke med Engine 223 00:13:31,650 --> 00:13:33,110 og en rekke andre tjenester. 224 00:13:33,110 --> 00:13:35,780 Og du kan se fra her at uansett 225 00:13:35,780 --> 00:13:39,010 av det infrastrukturen er, så lenge du can-- alle 226 00:13:39,010 --> 00:13:42,170 du trenger er en drifts system, Linux spesielt. 227 00:13:42,170 --> 00:13:45,460 >> Og du kan installere Docker Engine på toppen av det og la det kjøre 228 00:13:45,460 --> 00:13:48,970 og det arrangerer, i utgangspunktet, alle disse app en, to, 229 00:13:48,970 --> 00:13:51,530 og tre er faktiske containere. 230 00:13:51,530 --> 00:13:53,990 Så det er Engine. 231 00:13:53,990 --> 00:13:58,040 Som jeg nevnte tidligere fordi du trenger å samhandle med Engine, 232 00:13:58,040 --> 00:13:59,200 det er klienten. 233 00:13:59,200 --> 00:14:03,180 >> Men egentlig når du installerer Docker, den leveres med det. 234 00:14:03,180 --> 00:14:06,110 Så det blir installert, så det er en enkel binær. 235 00:14:06,110 --> 00:14:11,830 Og du kan gjøre lokale samtaler til Docker Engine. 236 00:14:11,830 --> 00:14:14,040 Eller eksterne samtaler til eksterne motorer. 237 00:14:14,040 --> 00:14:16,600 238 00:14:16,600 --> 00:14:19,590 Det bruker HTTP, som Jeg nevnte tidligere. 239 00:14:19,590 --> 00:14:24,200 Det er en GUI klient kalt Kitematic fra Docker. 240 00:14:24,200 --> 00:14:26,390 Og det er definitivt en masse andre folk 241 00:14:26,390 --> 00:14:29,740 som bygger mye GUI som i utgangspunktet gjennomføre 242 00:14:29,740 --> 00:14:32,980 noen HTTP kaller å snakke med Engine. 243 00:14:32,980 --> 00:14:35,920 244 00:14:35,920 --> 00:14:39,280 >> Bare noen eksempler på kommandoer. 245 00:14:39,280 --> 00:14:44,620 Hvis du gjør Docker versjon, det ville viser klientversjonen samt 246 00:14:44,620 --> 00:14:47,030 serverversjonen. 247 00:14:47,030 --> 00:14:49,500 Hvis du gjør Docker info vil det fortelle deg all informasjon 248 00:14:49,500 --> 00:14:54,300 om hvor mange containere kjører eller laget, hvor mange bilder du har, 249 00:14:54,300 --> 00:14:56,530 og så videre og så videre. 250 00:14:56,530 --> 00:15:01,850 >> Her har jeg, i nest siste boksen, jeg har Doctor løp. 251 00:15:01,850 --> 00:15:04,970 Så det er sånn jeg er faktisk skape container. 252 00:15:04,970 --> 00:15:08,960 Og jeg gir det til ekko Hello World og sove for en andre og whatnot. 253 00:15:08,960 --> 00:15:12,830 Og du kan se resultat. Så det er pågående. 254 00:15:12,830 --> 00:15:16,930 Og i likhet med Linux ps, kan du se alle prosesser, og i dette tilfellet 255 00:15:16,930 --> 00:15:18,540 alle de løpende beholdere. 256 00:15:18,540 --> 00:15:23,430 Denne er henvise tilbake til beholderen jeg nettopp opprettet. 257 00:15:23,430 --> 00:15:27,560 >> Så dette er veldig viktig fordi, lignende, kan det være litt forvirrende. 258 00:15:27,560 --> 00:15:33,050 Så bildene er skrivebeskyttet samling av filer, ikke sant? 259 00:15:33,050 --> 00:15:37,000 De er det vår beholder er basert på. 260 00:15:37,000 --> 00:15:40,340 Men de er bare beskyttet. 261 00:15:40,340 --> 00:15:44,330 Så du starter med en base bilde. 262 00:15:44,330 --> 00:15:50,180 Det har en tendens til å etterligne OS-lignende, så Ubuntu, CentOS, whatnot basisbildet. 263 00:15:50,180 --> 00:15:53,990 Og så kan du begynne å bygge på toppen av at det enkelte lag, som vil utgjøre 264 00:15:53,990 --> 00:16:00,010 sluttbildet, sluttresultatet her. 265 00:16:00,010 --> 00:16:03,220 >> Og hvert av disse lagene bør ha en moderbilde 266 00:16:03,220 --> 00:16:06,690 som den refererer til når det faktisk ønsker å skape. 267 00:16:06,690 --> 00:16:09,922 De er uforanderlig, i den forstand at fordi de er skrivebeskyttet, 268 00:16:09,922 --> 00:16:11,630 du kan faktisk ikke gjøre endringer i dem. 269 00:16:11,630 --> 00:16:17,540 Du kan bruke dem til å lage en container fra et bilde, som 270 00:16:17,540 --> 00:16:23,530 vil kalle all den påfølgende nødvendige bildene under den. 271 00:16:23,530 --> 00:16:26,400 >> Du kan gjøre endringer til et annet lag, 272 00:16:26,400 --> 00:16:28,810 det er en omskriving lag jeg skal snakke om i et sekund. 273 00:16:28,810 --> 00:16:31,350 Men hvert av disse lagene blir aldri endret. 274 00:16:31,350 --> 00:16:34,300 275 00:16:34,300 --> 00:16:38,670 I utgangspunktet bilder bruke noe kalt Union File System, UFS. 276 00:16:38,670 --> 00:16:42,280 Og det er forskjellige lagrings backends som utnytter denne teknologien. 277 00:16:42,280 --> 00:16:49,430 Og hva det betyr er at det bringer sammen forskjellige filsystemer 278 00:16:49,430 --> 00:16:51,190 å gjøre dem ser ut som en. 279 00:16:51,190 --> 00:16:54,460 >> Så du kan faktisk, fra et program perspektiv, 280 00:16:54,460 --> 00:16:59,570 du har en topp av en visning som viser alle de forskjellige filsystem nødvendig 281 00:16:59,570 --> 00:17:01,120 for programmet å kjøre. 282 00:17:01,120 --> 00:17:04,400 Men de er faktisk, på dette, de er faktisk i separate steder 283 00:17:04,400 --> 00:17:06,410 og blir utnyttet av andre beholdere i tillegg. 284 00:17:06,410 --> 00:17:09,569 285 00:17:09,569 --> 00:17:14,410 >> Så som du kan se her at hvis vi begynner med daemon bilde 286 00:17:14,410 --> 00:17:18,619 som base bilde, og deretter vi gå inn og legge til [? emacs?] 287 00:17:18,619 --> 00:17:20,720 og så er det et annet lag. 288 00:17:20,720 --> 00:17:21,916 Og deretter legge til Apache. 289 00:17:21,916 --> 00:17:22,790 Det er et annet lag. 290 00:17:22,790 --> 00:17:25,470 Og da vi tilbringer beholdere fra det. 291 00:17:25,470 --> 00:17:29,760 Hver av disse bildene, hvert av disse lagene, 292 00:17:29,760 --> 00:17:35,530 er forskjellig og kan være gjenbrukes av andre beholdere. 293 00:17:35,530 --> 00:17:40,070 >> Hvis du ser på containere selv, de er liksom som VM-aktig, 294 00:17:40,070 --> 00:17:41,930 men ikke behandlet på samme tid. 295 00:17:41,930 --> 00:17:49,180 Så, har de ikke, teknisk sett, den komplett operativsystem under dem. 296 00:17:49,180 --> 00:17:52,630 De bruker den eneste kernel av vertsoperativsystemet. 297 00:17:52,630 --> 00:17:54,440 Og de bygger på toppen av det. 298 00:17:54,440 --> 00:17:56,250 De etterligner i hvordan de ser ut. 299 00:17:56,250 --> 00:18:00,710 De etterligne sin rot fil system av operativsystemet. 300 00:18:00,710 --> 00:18:04,930 Men de faktisk ikke replikere. 301 00:18:04,930 --> 00:18:12,080 >> Så i stedet for å ha uforanderlige lag, det siste laget som er beholderen 302 00:18:12,080 --> 00:18:14,690 seg selv, det er en lese-skrive lag. 303 00:18:14,690 --> 00:18:17,350 Som kjører også prosessene av søknaden din. 304 00:18:17,350 --> 00:18:23,530 Og det avhenger av de underliggende lag. 305 00:18:23,530 --> 00:18:26,730 Hver container er opprettet fra et bilde. 306 00:18:26,730 --> 00:18:32,450 Og at bildet kan være et enkelt lag eller flerlags bilde. 307 00:18:32,450 --> 00:18:37,200 >> Og jeg ønsker å merke seg her at Docker bruker tungt, 308 00:18:37,200 --> 00:18:40,370 eller er basert på Kopier-On-Write mekanisme. 309 00:18:40,370 --> 00:18:44,350 Slik at, faktisk, hvis du ikke er å gjøre endringer i beholderen, 310 00:18:44,350 --> 00:18:45,930 det er ikke til å ta ekstra plass. 311 00:18:45,930 --> 00:18:49,600 Så det er i utgangspunktet hvordan du oppsummere en Copy-On-Write. 312 00:18:49,600 --> 00:18:53,820 Det kommer til å definitivt fremskynde oppstartstiden for beholderen. 313 00:18:53,820 --> 00:18:56,300 Fordi hvis du ikke gjør endringer i beholderen, 314 00:18:56,300 --> 00:18:57,800 det er å utnytte det som allerede er der. 315 00:18:57,800 --> 00:19:01,130 316 00:19:01,130 --> 00:19:02,955 >> Så, hvordan det faktisk fungerer. 317 00:19:02,955 --> 00:19:06,920 318 00:19:06,920 --> 00:19:14,240 En del av det er, akkurat nå, det anvender minst to nøkkel-kjernen 319 00:19:14,240 --> 00:19:14,820 egenskaper. 320 00:19:14,820 --> 00:19:17,660 Og det er stort sett det laget at graden av isolasjon 321 00:19:17,660 --> 00:19:19,550 for beholderne selv. 322 00:19:19,550 --> 00:19:22,290 Disse funksjonene er navnerom og cgroups. 323 00:19:22,290 --> 00:19:29,870 Så navnerom er en måte å skape isolerte ressurser, 324 00:19:29,870 --> 00:19:36,290 slik at inne i beholderen selv, bare du kan se visse ressurser. 325 00:19:36,290 --> 00:19:40,030 Slik som nettverksgrensesnitt eller noen brukere eller whatnot. 326 00:19:40,030 --> 00:19:44,160 >> Og de er bare synlige og bare tilgjengelig inne i beholderen. 327 00:19:44,160 --> 00:19:48,290 Cgroup på den andre siden grenser hvordan du bruker disse ressursene. 328 00:19:48,290 --> 00:19:50,950 CPU, minne og disk. 329 00:19:50,950 --> 00:19:53,900 Når du kan gå inn, jeg mener de er faktisk 330 00:19:53,900 --> 00:19:57,410 funksjoner som ble utviklet by-- de er en del av Linux-kjernen. 331 00:19:57,410 --> 00:20:01,800 Slik at de ikke ble gjenoppfunnet av eller gjenskapt av Docker. 332 00:20:01,800 --> 00:20:03,770 Docker bruker dem. 333 00:20:03,770 --> 00:20:05,560 >> Hva Doctor virkelig gjorde her er faktisk det 334 00:20:05,560 --> 00:20:08,680 orkestrert skaper navnerom for hver container 335 00:20:08,680 --> 00:20:13,320 og skape cgroups slik at det er latterlig enkelt å lage beholdere 336 00:20:13,320 --> 00:20:14,870 ved hjelp av disse funksjonene. 337 00:20:14,870 --> 00:20:22,910 Selvfølgelig, som jeg beskrev tidligere, Union Filsystemer og Kopier-On-Skriv virkelig 338 00:20:22,910 --> 00:20:26,810 hjelpe hastigheten og skiven utnyttelse av beholdere. 339 00:20:26,810 --> 00:20:28,917 >> Og når du får din hendene rundt Docker, 340 00:20:28,917 --> 00:20:32,000 du kommer til å se hvor fort det er å faktisk spinner opp containere og tåre 341 00:20:32,000 --> 00:20:32,500 dem ned. 342 00:20:32,500 --> 00:20:36,060 343 00:20:36,060 --> 00:20:40,230 Så, hvis du kan spørre, hvordan kan du faktisk bygge bilder? 344 00:20:40,230 --> 00:20:45,940 Vi bygger bilder ved en prosess med å lage containere og gjøre endringer, endring 345 00:20:45,940 --> 00:20:50,220 dem, og forplikter dem til å bli et bilde. 346 00:20:50,220 --> 00:20:54,330 >> Så det er en kylling og egg referanse her, 347 00:20:54,330 --> 00:20:57,350 fordi alle containere kommer fra bilder og bilder kommer 348 00:20:57,350 --> 00:21:00,270 fra begått containere, for det meste. 349 00:21:00,270 --> 00:21:03,830 Det er tre alternativer for å lage bilder. 350 00:21:03,830 --> 00:21:06,580 Jeg kommer til å beskrive den første og siste. 351 00:21:06,580 --> 00:21:10,060 Du kan enten manuelt gå og kjøre container 352 00:21:10,060 --> 00:21:14,280 og gjøre disse endringene, som du ville gjort på en hvilken som helst VM 353 00:21:14,280 --> 00:21:17,060 eller ethvert operativsystem, f.eks som installerer nye binærfiler, 354 00:21:17,060 --> 00:21:19,370 legge filsystemer, og whatnot. 355 00:21:19,370 --> 00:21:22,620 >> Og så du går ut, som du kan se der oppe. 356 00:21:22,620 --> 00:21:24,330 Jeg avslutter min container. 357 00:21:24,330 --> 00:21:26,050 Og så jeg gjør Docker begå. 358 00:21:26,050 --> 00:21:28,390 Og jeg forplikter det. 359 00:21:28,390 --> 00:21:31,560 Du kan se at antall her er bare en UUID, eller den første 12 360 00:21:31,560 --> 00:21:32,810 biter av UUID. 361 00:21:32,810 --> 00:21:34,320 Eller byte av UUID. 362 00:21:34,320 --> 00:21:35,770 Og så skal jeg kalle det mitt bilde. 363 00:21:35,770 --> 00:21:39,510 Så nå Docker tar vare på innspilling alt jeg gjorde det 364 00:21:39,510 --> 00:21:42,830 og skape nye image basert på det. 365 00:21:42,830 --> 00:21:47,080 366 00:21:47,080 --> 00:21:52,560 >> Jeg kommer ikke til å snakke om tarball, men det er en måte du kan få et enkelt, 367 00:21:52,560 --> 00:21:58,200 lage et enkelt, eller lage en enkelt lag bilde ved hjelp tarballs. 368 00:21:58,200 --> 00:22:02,650 Hva jeg kommer til å snakke om dette og hva som er mest brukt i dag, 369 00:22:02,650 --> 00:22:03,270 er Dockerfile. 370 00:22:03,270 --> 00:22:07,260 Som er teknisk den første trinn automatiseres ved Docker selv. 371 00:22:07,260 --> 00:22:11,920 Så Dockerfiles er ting som du er kommer til å se i en rekke GitHub repos 372 00:22:11,920 --> 00:22:13,150 i dag. 373 00:22:13,150 --> 00:22:16,420 Det er i utgangspunktet bare en tekstfil som beskriver 374 00:22:16,420 --> 00:22:19,780 nøyaktig hvordan å bygge et bilde. 375 00:22:19,780 --> 00:22:25,540 >> Og for hver linje, det faktisk skaper beholderen, utfører den linjen 376 00:22:25,540 --> 00:22:30,480 begår at beholderen til et nytt bilde, og du, i utgangspunktet, 377 00:22:30,480 --> 00:22:36,160 bruke den for alle påfølgende operasjoner til du kommer til det siste bildet. 378 00:22:36,160 --> 00:22:39,260 Som er utgangspunktet ende mål her, slutten. 379 00:22:39,260 --> 00:22:42,420 Og etter at du exec-- etter at du skriv din Dockerfile, som 380 00:22:42,420 --> 00:22:46,750 er rent i teksten, gjør du en Docker bygge og navnet på bildet. 381 00:22:46,750 --> 00:22:50,000 >> Og du peker på at det er hvor Dockerfile er på. 382 00:22:50,000 --> 00:22:56,570 Og du kan forvente å se mitt bilde som et bilde som du har lokalt. 383 00:22:56,570 --> 00:22:59,100 Så det er bare en visuell eksempel på hva som foregår. 384 00:22:59,100 --> 00:23:00,820 Du starter med en base bilde. 385 00:23:00,820 --> 00:23:05,150 Du kjører det inn i en container som endrer ikke basen bildet selv. 386 00:23:05,150 --> 00:23:08,310 Men i stedet skaper en omskrive lag på toppen av det 387 00:23:08,310 --> 00:23:10,340 der du gjør endringene der du forplikte 388 00:23:10,340 --> 00:23:15,050 og du gjenta prosessen til du kommer til det endelige bildet. 389 00:23:15,050 --> 00:23:20,980 >> Og ved å gjøre det, annenhver build Fremgangsmåten kan bruke de samme lagene 390 00:23:20,980 --> 00:23:23,870 og same-- utgangspunktet Docker bufrer disse lagene. 391 00:23:23,870 --> 00:23:30,040 Slik at hvis jeg gjør det samme nøyaktige prosess, men i stedet for å installere PHP, 392 00:23:30,040 --> 00:23:31,540 Jeg installerer Python. 393 00:23:31,540 --> 00:23:34,210 Det kommer til å bruke Apache og Ubuntu. 394 00:23:34,210 --> 00:23:39,570 Slik at måten du benytter din disk. 395 00:23:39,570 --> 00:23:42,330 Det utnytte cache og tilgjengelige bilder der. 396 00:23:42,330 --> 00:23:45,320 397 00:23:45,320 --> 00:23:48,840 >> Den siste delen er registret som er hvordan du distribuerer bildene dine. 398 00:23:48,840 --> 00:23:52,710 Og, som jeg nevnte tidligere, det er en Cloud versjon av den, 399 00:23:52,710 --> 00:23:54,290 som er Docker Hub. 400 00:23:54,290 --> 00:23:57,550 Du kan gå og utforske en masse, i utgangspunktet 401 00:23:57,550 --> 00:24:04,900 det er en offentlig SAS produkt som du kan fortsatt ha private bilder, 402 00:24:04,900 --> 00:24:06,590 men det er mye av offentlige bilder. 403 00:24:06,590 --> 00:24:10,580 Det er faktisk ubegrenset, du kan presse ubegrenset offentlige bilder der. 404 00:24:10,580 --> 00:24:13,730 Og dette er hvordan du kan samarbeide med teamet ditt. 405 00:24:13,730 --> 00:24:17,159 >> Du kan bare peke dem på deg repo og de kan laste den ned eller ditt bilde 406 00:24:17,159 --> 00:24:18,200 og de kan laste den ned. 407 00:24:18,200 --> 00:24:21,140 408 00:24:21,140 --> 00:24:24,990 Så nok med snakk. 409 00:24:24,990 --> 00:24:29,110 Hvem ønsker å se noen demoer virkelig rask? 410 00:24:29,110 --> 00:24:31,330 Greit. 411 00:24:31,330 --> 00:24:34,050 Så her jeg har. 412 00:24:34,050 --> 00:24:37,480 Ca dere se skjermen min? 413 00:24:37,480 --> 00:24:38,390 Greit. 414 00:24:38,390 --> 00:24:45,810 >> Så jeg har Docker kjører her, så jeg kan sjekke it's-- Dette er versjonen 415 00:24:45,810 --> 00:24:47,510 av Docker som kjører. 416 00:24:47,510 --> 00:24:49,320 Kan gjøre Docker info. 417 00:24:49,320 --> 00:24:55,730 Sjekk all informasjon om hvor mange bilder de har, og så videre og så videre. 418 00:24:55,730 --> 00:24:58,890 Docker PS, det er ikke noe løping. 419 00:24:58,890 --> 00:25:00,570 Sammenkjedet de. 420 00:25:00,570 --> 00:25:06,370 >> Så det første jeg vil gjøre er å vise deg hvordan du enkelt kan kjøre en container. 421 00:25:06,370 --> 00:25:09,350 Så skjønnheten om Doctor løp, hvis det faktisk 422 00:25:09,350 --> 00:25:14,700 finner ikke et bilde lokalt, som standard den snakker til Doctor Hub 423 00:25:14,700 --> 00:25:17,240 og prøver å finne det der og nedlastinger det for deg. 424 00:25:17,240 --> 00:25:22,820 Så det inkluderer en Docker trekke kommando, naturligvis. 425 00:25:22,820 --> 00:25:26,130 >> Så hvis jeg gjør en Docker løp, hallo-verden. 426 00:25:26,130 --> 00:25:28,890 427 00:25:28,890 --> 00:25:31,200 Så, først det kommer for å prøve å finne den. 428 00:25:31,200 --> 00:25:36,140 Ellers, som du kan se her, det ikke kunne finne den lokalt. 429 00:25:36,140 --> 00:25:41,830 Akkurat nå er det bare trukket to lag som gjorde det bildet og jeg kjørte den. 430 00:25:41,830 --> 00:25:45,440 Hello-world er bare utgangspunktet utganger, hva du har gjort. 431 00:25:45,440 --> 00:25:47,680 Så dette er den enkleste, en av de enkleste eksemplene. 432 00:25:47,680 --> 00:25:53,840 Så egentlig jeg bare løp og avsluttet beholderen virkelig rask. 433 00:25:53,840 --> 00:25:59,500 >> Hvis jeg ønsker å run-- og forresten, hvis Jeg ønsker å tid det, bare så du vet, 434 00:25:59,500 --> 00:26:03,572 Dette er hvor lang tid det tar å faktisk spinner opp og inneholder det. 435 00:26:03,572 --> 00:26:05,030 Vi måler det i millisekunder. 436 00:26:05,030 --> 00:26:10,600 Så du kan se hvor mye dette kan faktisk hjelpe deg ikke bare i testing, 437 00:26:10,600 --> 00:26:13,200 men også enda distribusjon. 438 00:26:13,200 --> 00:26:17,221 Så det er en rask kommentar på det. 439 00:26:17,221 --> 00:26:18,970 Det neste jeg er kommer til å gjøre er faktisk 440 00:26:18,970 --> 00:26:21,930 kjøre et bilde jeg har allerede forberedt. 441 00:26:21,930 --> 00:26:24,460 Så Docker løp. 442 00:26:24,460 --> 00:26:27,240 -d er bare et flagg for å fortelle det å kjøre i bakgrunnen. 443 00:26:27,240 --> 00:26:30,290 Og -p tildeler visse porter. 444 00:26:30,290 --> 00:26:32,670 Fordi som standard, den containere er isolert, 445 00:26:32,670 --> 00:26:36,080 så må du angi nøyaktig hvordan det kan få tilgang til dem. 446 00:26:36,080 --> 00:26:41,150 Og i dette tilfellet, jeg forteller Docker å kartlegge en tilfeldig port på verten 447 00:26:41,150 --> 00:26:44,560 til en spesifisert port innen selve beholderen. 448 00:26:44,560 --> 00:26:47,130 449 00:26:47,130 --> 00:26:56,460 Og det er i utgangspunktet der image-- forhåpentligvis dette er den rette. 450 00:26:56,460 --> 00:27:01,780 >> Så det gjør parallelle nedlastinger hver av disse lagene som du kan se her. 451 00:27:01,780 --> 00:27:06,949 De er av sjiktene gjør slutten bilde som jeg bygget. 452 00:27:06,949 --> 00:27:08,115 Det kommer til å ta et sekund. 453 00:27:08,115 --> 00:27:11,290 454 00:27:11,290 --> 00:27:12,370 Og voila. 455 00:27:12,370 --> 00:27:16,590 >> Så nå hvis jeg gjør en havnearbeider ps, skal jeg ser noe som er i gang. 456 00:27:16,590 --> 00:27:22,250 Jeg burde se ID, bildet at dette det var basert på, 457 00:27:22,250 --> 00:27:23,880 og kommandoen som ble utført. 458 00:27:23,880 --> 00:27:28,720 Og hvordan du kan få tilgang til det er utgangspunktet du gå til denne porten. 459 00:27:28,720 --> 00:27:33,240 Så jeg kommer til å gå to-- dette er jeg kjører den på AWS. 460 00:27:33,240 --> 00:27:37,150 Jeg kommer til å gå til 32 769. 461 00:27:37,150 --> 00:27:37,650 Oops. 462 00:27:37,650 --> 00:27:40,495 463 00:27:40,495 --> 00:27:41,120 Og her går vi. 464 00:27:41,120 --> 00:27:44,550 >> Så dette er faktisk bare en web-tjeneste som viser 465 00:27:44,550 --> 00:27:46,240 som beholder det blir servert fra. 466 00:27:46,240 --> 00:27:50,450 Så du kan se at det er fra container a9f. 467 00:27:50,450 --> 00:27:52,850 Og her er dette navn på beholderen. 468 00:27:52,850 --> 00:27:56,550 Så dere kan se hvor raskt det var å faktisk ikke bare trekke, men også 469 00:27:56,550 --> 00:28:00,440 distribuere denne beholderen. 470 00:28:00,440 --> 00:28:05,070 >> Nå er neste skritt er å se inn Dockerfiles 471 00:28:05,070 --> 00:28:09,430 og hvordan vi kan faktisk bygge nye bilder. 472 00:28:09,430 --> 00:28:15,250 Jeg skal bare gå få klone, en PRØVE Dockerfile basert på tidligere 473 00:28:15,250 --> 00:28:17,755 diagram, den ene til Apache og PHP. 474 00:28:17,755 --> 00:28:26,740 475 00:28:26,740 --> 00:28:28,140 Forhåpentligvis Jeg husker min repo. 476 00:28:28,140 --> 00:28:36,410 477 00:28:36,410 --> 00:28:38,750 >> Så jeg har min depotet akkurat nå. 478 00:28:38,750 --> 00:28:43,080 Og du kommer til å se dette mye faktisk. 479 00:28:43,080 --> 00:28:45,110 Jeg visste ikke installere treet. 480 00:28:45,110 --> 00:28:48,700 >> Så i utgangspunktet du kommer til å se hvordan kildekoden dokumentasjon rundt 481 00:28:48,700 --> 00:28:51,240 det, og deretter en Dockerfile på hvordan du faktisk pakke det. 482 00:28:51,240 --> 00:28:57,970 Så det er bare et utvalg PHP som reflekterer hallo CS50. 483 00:28:57,970 --> 00:29:01,550 >> Så hvis jeg ønsker å kjøre den, Jeg skal gjøre Docker bygge. 484 00:29:01,550 --> 00:29:03,370 Jeg har til å bygge det første. 485 00:29:03,370 --> 00:29:12,420 Jeg kommer til å nevne det demo_cs50. 486 00:29:12,420 --> 00:29:16,470 Og trenger du en kode til den også. 487 00:29:16,470 --> 00:29:19,802 Så la oss kalle det V1 dot. 488 00:29:19,802 --> 00:29:21,760 Så som jeg beskrev tidligere, hva jeg gjør i dag 489 00:29:21,760 --> 00:29:26,840 er jeg forteller Docker å gå bruk at-- faktisk, sorry, my bad. 490 00:29:26,840 --> 00:29:29,450 491 00:29:29,450 --> 00:29:32,500 Vi fikk ikke se på Dockerfile selv. 492 00:29:32,500 --> 00:29:39,020 Så de eneste ting i her er index.php samt readme-fil 493 00:29:39,020 --> 00:29:39,810 og en Dockerfile. 494 00:29:39,810 --> 00:29:44,600 >> Så hvis du tar en titt på den Dockerfile, så det er 495 00:29:44,600 --> 00:29:47,150 svært likt det Jeg beskrev tidligere. 496 00:29:47,150 --> 00:29:51,220 Det er bare en haug med trinn som Docker Utfører 497 00:29:51,220 --> 00:29:56,330 ved å skape og å rive ned beholdere og [? telle?] dem inn i et bilde. 498 00:29:56,330 --> 00:29:59,570 >> Og i utgangspunktet du kan see-- [uhørbart] det her-- 499 00:29:59,570 --> 00:30:04,340 men dette er fra den lokale repo. 500 00:30:04,340 --> 00:30:06,410 Det kommer til å gå og hente index.php. 501 00:30:06,410 --> 00:30:10,970 Så det er den eneste kildekoden som er faktisk en del av søknaden din. 502 00:30:10,970 --> 00:30:16,800 Alt dette er i utgangspunktet operativsystem avløp, 503 00:30:16,800 --> 00:30:21,460 få de riktige pakkene og Apache og PHP, og whatnot. 504 00:30:21,460 --> 00:30:26,950 Men dette er faktisk tar index.php og forplikter det inn i beholderen, 505 00:30:26,950 --> 00:30:28,210 inn i bildet. 506 00:30:28,210 --> 00:30:33,120 >> Så hvis du går videre og kjør kommando ved å gjøre følgende, 507 00:30:33,120 --> 00:30:36,155 det er going-- faktisk, dette kan ta litt. 508 00:30:36,155 --> 00:30:40,870 509 00:30:40,870 --> 00:30:42,455 Forhåpentligvis tar det ikke for lang. 510 00:30:42,455 --> 00:30:45,129 511 00:30:45,129 --> 00:30:46,170 Så du kan se trinnene. 512 00:30:46,170 --> 00:30:49,320 Og jeg oppfordrer deg til å gå hjem i dag og prøve den. 513 00:30:49,320 --> 00:30:51,280 Og Mano vil beskrive hvordan akkurat du gjør det. 514 00:30:51,280 --> 00:30:57,810 Men det er virkelig flott å se nøyaktig hva som skjer bak kulissene. 515 00:30:57,810 --> 00:31:02,420 Men det er latterlig enkelt å bygge bilder og distribuere dem ved hjelp Docker. 516 00:31:02,420 --> 00:31:12,170 517 00:31:12,170 --> 00:31:14,050 >> Det tar litt lenger enn jeg forventet. 518 00:31:14,050 --> 00:31:29,085 519 00:31:29,085 --> 00:31:32,690 >> La oss se hva som skjer når you-- kjølig. 520 00:31:32,690 --> 00:31:36,260 Så som du kan se, hver av disse trinnene representere linjer i Dockerfile. 521 00:31:36,260 --> 00:31:42,570 Og det viser her at det lykkes bygget dette bildet. 522 00:31:42,570 --> 00:31:46,480 >> Så hvis jeg gjør Docker bilder, kommer jeg til å se alle bildene som jeg har lokalt. 523 00:31:46,480 --> 00:31:52,160 Og en av dem heter min brukernavn, og navnet på bildet, 524 00:31:52,160 --> 00:31:56,050 og tag representing-- hovedsak er det en versjon tag. 525 00:31:56,050 --> 00:31:58,040 >> Så nå hvis jeg ønsker å kjøre det gjør jeg docker løp. 526 00:31:58,040 --> 00:32:06,040 527 00:32:06,040 --> 00:32:14,960 Og jeg vil bare gjøre en -d -P. Gjør v1. 528 00:32:14,960 --> 00:32:18,500 Så jeg kan se nå at jeg har to beholdere kjører, en som jeg bare 529 00:32:18,500 --> 00:32:21,230 opprettet og hei Docker en som jeg fikk sist. 530 00:32:21,230 --> 00:32:24,320 >> Og du kan se her at det tildelt det en annen port. 531 00:32:24,320 --> 00:32:30,710 Så hvis jeg går til den samme IP, men tildele den en annen port-- forhåpentligvis gjorde jeg ikke. 532 00:32:30,710 --> 00:32:33,060 Så nå er søknad at jeg bare utplassert. 533 00:32:33,060 --> 00:32:35,980 534 00:32:35,980 --> 00:32:43,900 >> Hvis jeg ønsker å gjøre endringer, jeg kan raskt endre kildekoden 535 00:32:43,900 --> 00:32:49,050 og gjøre følgende. 536 00:32:49,050 --> 00:32:55,170 La oss gjøre hallo Harvard. 537 00:32:55,170 --> 00:32:57,989 Så nå hva som skjer til å skje er at jeg er 538 00:32:57,989 --> 00:32:59,905 kommer til å merke det med en annerledes version-- oh, 539 00:32:59,905 --> 00:33:03,080 ikke dette guy-- merke det med en annen versjon. 540 00:33:03,080 --> 00:33:05,735 Og du kommer til å see-- gjør dere forvente 541 00:33:05,735 --> 00:33:11,020 det å ta samme mengde tid å bygge det en gang eller ikke? 542 00:33:11,020 --> 00:33:14,470 Greit, og noen vet hvorfor? 543 00:33:14,470 --> 00:33:15,020 Snakk ut. 544 00:33:15,020 --> 00:33:16,350 >> PUBLIKUM: [uhørbart] 545 00:33:16,350 --> 00:33:19,830 >> NICOLA Kabar: Det er i utgangspunktet vi bare endre en av de senere trinn. 546 00:33:19,830 --> 00:33:23,110 Og derfor det kommer til å bruke den cache og bruke hver av disse lagene. 547 00:33:23,110 --> 00:33:27,080 Og det er virkelig noen av de killer-funksjoner av Docker 548 00:33:27,080 --> 00:33:32,930 er hvordan det faktisk benytter og gjenbruker overtar 549 00:33:32,930 --> 00:33:36,950 disken for det samme eksakte opplysninger. 550 00:33:36,950 --> 00:33:40,700 >> Så hvis vi gjør det samme, det tok bare et par sekunder. 551 00:33:40,700 --> 00:33:48,860 Hvis vi ønsker å redeploy-- så nå Jeg bør ha tre beholdere. 552 00:33:48,860 --> 00:33:56,160 Men dette blir servert på the-- sju én. 553 00:33:56,160 --> 00:33:58,860 Så nå er det tredje container. 554 00:33:58,860 --> 00:34:02,580 Alle forstår hva jeg nettopp gjorde her? 555 00:34:02,580 --> 00:34:06,320 >> Så nå hvis du ønsker å dele dette container virkelig rask med dine venner, 556 00:34:06,320 --> 00:34:14,840 du kan bare gjøre docker presse navn på beholderen, forhåpentligvis. 557 00:34:14,840 --> 00:34:20,130 Så nå kommer det til å skyve den to-- jeg ikke logget på her. 558 00:34:20,130 --> 00:34:33,511 559 00:34:33,511 --> 00:34:34,219 Beklager for det. 560 00:34:34,219 --> 00:34:39,219 Men jeg kommer ikke til å feilsøke dette nå. 561 00:34:39,219 --> 00:34:42,780 Men i utgangspunktet at en kommando er bare å gå opp presse den. 562 00:34:42,780 --> 00:34:45,670 Og du kommer til å være i stand til å se den hvis du går til Docker Hub 563 00:34:45,670 --> 00:34:48,587 Og du logger deg på, er du skal være i stand til å se det. 564 00:34:48,587 --> 00:34:50,420 Og da kan du bare peke den som kommer 565 00:34:50,420 --> 00:34:52,750 å bruke det bildet til å gå og trekke den. 566 00:34:52,750 --> 00:34:55,460 Og de kan bruke det. 567 00:34:55,460 --> 00:34:57,760 >> Med det forhåpentligvis Jeg slags demonstrert 568 00:34:57,760 --> 00:35:01,230 hvor lett det er å jobbe med Docker. 569 00:35:01,230 --> 00:35:06,610 Og jeg skal bare gi den tilbake til Mano. 570 00:35:06,610 --> 00:35:11,760 Og han kommer til å ta det herfra. 571 00:35:11,760 --> 00:35:13,990 >> MANO MERKER: All right takk, takk Nico. 572 00:35:13,990 --> 00:35:18,700 573 00:35:18,700 --> 00:35:20,614 Hva så? 574 00:35:20,614 --> 00:35:24,410 Så en av de tingene jeg ønsket å gjøre er å sette sammen 575 00:35:24,410 --> 00:35:28,820 hvorfor dette er en important-- hvorfor Docker og hvorfor 576 00:35:28,820 --> 00:35:33,000 containere er en slik viktig utvikling, 577 00:35:33,000 --> 00:35:36,890 en ny måte for å faktisk gjøre programvare. 578 00:35:36,890 --> 00:35:41,300 >> Og før jeg gjør det, kommer jeg til å bare innføre noen statistikk. 579 00:35:41,300 --> 00:35:42,790 Jeg har ikke tenkt å lese alle disse. 580 00:35:42,790 --> 00:35:52,540 Men dette viser deg mye om hvordan populært dette er i samfunnet. 581 00:35:52,540 --> 00:35:56,310 Kjerne Docker teknologier er åpen kildekode. 582 00:35:56,310 --> 00:36:03,560 Så det er Docker Engine, Compose, Swarm, en haug med andre ting 583 00:36:03,560 --> 00:36:05,210 er all åpen kildekode. 584 00:36:05,210 --> 00:36:10,590 Og vi har, hva gjorde jeg si, 1300 bidragsytere. 585 00:36:10,590 --> 00:36:15,630 Du ser nå, hvis du ser på antall ledige stillinger, siste gang 586 00:36:15,630 --> 00:36:19,640 vi så, var det ca 43000 jobb åpninger spesielt nevne 587 00:36:19,640 --> 00:36:22,230 fortrolighet med Docker. 588 00:36:22,230 --> 00:36:26,450 Hundrevis av millioner av bilder har blitt lastet ned fra Docker Hub. 589 00:36:26,450 --> 00:36:31,870 Og, vel, mye mer store statistikk. 590 00:36:31,870 --> 00:36:34,770 >> For de som er nysgjerrige, det ble opprinnelig skrevet i Python 591 00:36:34,770 --> 00:36:37,730 og deretter omskrevet til Go. 592 00:36:37,730 --> 00:36:40,320 Og det er bare vært åpne source-- det er bare 593 00:36:40,320 --> 00:36:44,950 blitt utgitt for ca 2 og 1/2 år, Hvilket betyr at i 2 og 1/2 år, 594 00:36:44,950 --> 00:36:48,020 Vi har sett en enorm mengde av vekst og viktighet 595 00:36:48,020 --> 00:36:50,190 av dette i samfunnet. 596 00:36:50,190 --> 00:36:52,400 Og så ønsker jeg å snakke litt om hvorfor. 597 00:36:52,400 --> 00:36:54,940 598 00:36:54,940 --> 00:36:59,880 >> Så bare for å gjenta noen av Nico viktige punkter, er Docker fort. 599 00:36:59,880 --> 00:37:00,630 Det er bærbare. 600 00:37:00,630 --> 00:37:02,500 Det er reproduserbar. 601 00:37:02,500 --> 00:37:06,130 Og det setter opp en standard miljø. 602 00:37:06,130 --> 00:37:13,370 >> Og what-- dette er min crappy utrydde monolitter slide-- hva 603 00:37:13,370 --> 00:37:17,990 det er å hjelpe mennesker gjør, som mye av programvareindustrien 604 00:37:17,990 --> 00:37:21,400 begynte å gjøre i tidlige 2000-tallet, er i bevegelse 605 00:37:21,400 --> 00:37:24,200 fra disse monolittiske enkeltprogrammer 606 00:37:24,200 --> 00:37:28,590 hvor hver avhengighet måtte være testet før hele programmet hadde 607 00:37:28,590 --> 00:37:31,280 skal settes ut, hvilken kan bety en nettside 608 00:37:31,280 --> 00:37:36,240 bare fikk utplassert en gang hver tredje måned, eller mer, 609 00:37:36,240 --> 00:37:42,650 til en mye mer tjeneste orientert arkitektur 610 00:37:42,650 --> 00:37:46,090 eller komponent annen type av applikasjonsarkitektur. 611 00:37:46,090 --> 00:37:48,610 Og så la disse slags arkitekturer 612 00:37:48,610 --> 00:37:52,250 som kan dra nytte av Docker å kjøre i disse tre 613 00:37:52,250 --> 00:37:58,450 viktigste utviklingsområder, som er utvikling skriver selve koden, 614 00:37:58,450 --> 00:38:00,140 teste koden din, og distribuere det. 615 00:38:00,140 --> 00:38:03,000 616 00:38:03,000 --> 00:38:05,420 >> Så hvorfor er dette viktig? 617 00:38:05,420 --> 00:38:09,920 Hvis du er a-- la meg gi et eksempel. 618 00:38:09,920 --> 00:38:13,600 Hvis du er en nettside Enheten utvikler, er du 619 00:38:13,600 --> 00:38:19,020 utvikle et nettsted som er basert på database som David produsert over her. 620 00:38:19,020 --> 00:38:20,490 Sorry David, jeg ringer deg ut. 621 00:38:20,490 --> 00:38:22,984 622 00:38:22,984 --> 00:38:24,900 Hvis du ønsker å distribuere hele greia, ville du 623 00:38:24,900 --> 00:38:28,870 nødt til å vente i henhold til en tradisjonell monolittisk programvareutvikling 624 00:38:28,870 --> 00:38:32,710 miljø, vil du være nødt til å vente før han var ferdig med databasen 625 00:38:32,710 --> 00:38:36,030 før du kan faktisk gjøre eventuelle endringer på nettstedet. 626 00:38:36,030 --> 00:38:40,900 Du må omplassere den Hele programmet for å gjøre det. 627 00:38:40,900 --> 00:38:45,490 >> Og hva Docker hjelper deg å gjøre er hver person arbeid på ulike komponenter 628 00:38:45,490 --> 00:38:52,990 og oppdatere dem som de går, bare å gjøre sikker på at grensesnittene forbli den samme. 629 00:38:52,990 --> 00:38:56,350 Så hva det har gjort er det flyttet folk 630 00:38:56,350 --> 00:39:03,950 fra å gjøre disse massive monolittisk bygd for programvare som 631 00:39:03,950 --> 00:39:07,610 utplassert hver måned til en kontinuerlig integrasjon og kontinuerlig utvikling 632 00:39:07,610 --> 00:39:08,490 miljø. 633 00:39:08,490 --> 00:39:12,580 >> Nå er dette ikke unikt for Docker, men Docker gjør det så mye enklere, 634 00:39:12,580 --> 00:39:16,620 noe som betyr at du er i utgangspunktet stadig distribusjon. 635 00:39:16,620 --> 00:39:20,690 Vi snakker med bedrifter som er distribusjon av offentlige klednings applikasjoner 636 00:39:20,690 --> 00:39:30,180 tusenvis av ganger om dagen fordi de ser verdien i å bare gjøre 637 00:39:30,180 --> 00:39:33,740 små endringer, og så lenge som det går gjennom testene 638 00:39:33,740 --> 00:39:35,900 la det gå ut i produksjon. 639 00:39:35,900 --> 00:39:41,890 Nico var alltid fortelle meg tidligere at i mange miljøer, 640 00:39:41,890 --> 00:39:46,580 standard livssyklus Beholderen er målt i sekunder, 641 00:39:46,580 --> 00:39:50,460 mens en virtuell maskin kan måles i måneder. 642 00:39:50,460 --> 00:39:54,590 643 00:39:54,590 --> 00:39:58,690 >> Jeg ønsket å ta en liten snu her fordi jeg er 644 00:39:58,690 --> 00:40:00,170 ved en utdanningsinstitusjon. 645 00:40:00,170 --> 00:40:06,670 Jeg ønsket å gi et eksempel på hvordan dette fungerer i en pedagogisk forskning 646 00:40:06,670 --> 00:40:07,670 situasjon. 647 00:40:07,670 --> 00:40:10,930 Så det er en organisasjon kalt bioboxes. 648 00:40:10,930 --> 00:40:15,450 Bioboxes gjør DNA analyse for forskere. 649 00:40:15,450 --> 00:40:22,029 >> Nå hva de fant, var at når en researcher-- og dette er ikke 650 00:40:22,029 --> 00:40:24,070 feil av en bestemt researcher-- men når 651 00:40:24,070 --> 00:40:31,240 forsker utplassert en algoritme for å analysere, 652 00:40:31,240 --> 00:40:36,670 På en bestemt måte, en DNA-prøve, de ville skrive programvaren, 653 00:40:36,670 --> 00:40:39,980 publisere det, kanskje til GitHub eller et annet sted, 654 00:40:39,980 --> 00:40:42,680 og deretter ble de ferdig. 655 00:40:42,680 --> 00:40:47,440 >> Vel problemet var at det var ikke nødvendigvis reproduserbar. 656 00:40:47,440 --> 00:40:51,610 Fordi for å forstå programvaren, 657 00:40:51,610 --> 00:40:54,830 de ville bli satt opp for eksakt utviklingsmiljø 658 00:40:54,830 --> 00:41:00,460 som at forskeren brukt, vanligvis sin laptop, eller en server, eller en data 659 00:41:00,460 --> 00:41:04,280 sentrere at de brukte. 660 00:41:04,280 --> 00:41:11,530 Og derfor var det svært vanskelig å gjengi forskningsresultater når 661 00:41:11,530 --> 00:41:16,910 analysere DNA-prøver for å se på ting som incidence-- 662 00:41:16,910 --> 00:41:23,830 sammenligne forekomsten av hjerteinfarkt basert på visse gener er til stede, 663 00:41:23,830 --> 00:41:28,900 for eksempel, eller kreftrisiko, eller noen av de andre typer ting. 664 00:41:28,900 --> 00:41:33,900 >> Så hva de gjorde i stedet var de begynte å lage beholdere. 665 00:41:33,900 --> 00:41:39,380 Og du kan gå til bioboxes.org, det er en stor organisasjon. 666 00:41:39,380 --> 00:41:43,900 Og hva de gjør er at de produserer containere basert på forskning. 667 00:41:43,900 --> 00:41:46,840 Og så når noen sender i sin prøve, kan de kjøre den. 668 00:41:46,840 --> 00:41:52,770 Og det har hele miljøet som trengs for å kjøre denne algoritmen 669 00:41:52,770 --> 00:41:55,370 og produsere resultatene. 670 00:41:55,370 --> 00:41:58,250 Og de opplever at de er mye mer sannsynlig og mye 671 00:41:58,250 --> 00:42:01,300 raskere i stand til å returnere resultatene til folk. 672 00:42:01,300 --> 00:42:06,860 >> Og faktisk, er hva folk gjør kjører sin egen analyse på DNA, 673 00:42:06,860 --> 00:42:11,220 sending som i å bioboxes, og deretter Biobox tar bare dataene, 674 00:42:11,220 --> 00:42:15,350 går det mot variasjon forskjellige containere 675 00:42:15,350 --> 00:42:19,030 å se forskjellige resultater basert på annen forskning. 676 00:42:19,030 --> 00:42:21,860 Så det er en veldig kraftig Måten forskerne 677 00:42:21,860 --> 00:42:28,070 kan gjøre en enkelt forekomst som gjør andre folk til å prøve og reprodusere 678 00:42:28,070 --> 00:42:28,650 resultatene. 679 00:42:28,650 --> 00:42:31,710 680 00:42:31,710 --> 00:42:34,360 >> Så hvordan kan du komme i gang? 681 00:42:34,360 --> 00:42:37,950 682 00:42:37,950 --> 00:42:39,800 Vi er godt støttet på Linux. 683 00:42:39,800 --> 00:42:43,070 Så hvis du ønsker å installere noe på Linux, 684 00:42:43,070 --> 00:42:45,620 du bruker standard pakkebehandler å installere. 685 00:42:45,620 --> 00:42:47,600 Hvis du bruker en Debian, er det apt get. 686 00:42:47,600 --> 00:42:50,500 CentOS er yum. 687 00:42:50,500 --> 00:42:53,500 Fedora Red Hat er rpm-- jeg ikke husker. 688 00:42:53,500 --> 00:42:56,070 Uansett, det er alt der. 689 00:42:56,070 --> 00:42:59,610 Vi støtter et stort utvalg av Linux-distribusjoner. 690 00:42:59,610 --> 00:43:01,150 Du kan sjekke dem ut. 691 00:43:01,150 --> 00:43:06,370 >> Vi har også muligheter slik at du kan kjøres på Mac eller Windows. 692 00:43:06,370 --> 00:43:10,670 Nå Nico nevnte tidligere at det var bare støttes på Linux. 693 00:43:10,670 --> 00:43:18,180 Det er sant fordi det trenger en Linux-kjernen. 694 00:43:18,180 --> 00:43:20,540 Men, kan du kjøre i en virtuell maskin. 695 00:43:20,540 --> 00:43:25,290 Og hva Docker Toolbox gjør, som du kan laste ned, 696 00:43:25,290 --> 00:43:27,610 det gir deg den virtuelle maskinen. 697 00:43:27,610 --> 00:43:37,260 >> Så bare en rask 48 andre, tror jeg, laste ned. 698 00:43:37,260 --> 00:43:40,670 Du bare søke på Docker Toolbox, laste den ned til Mac, 699 00:43:40,670 --> 00:43:43,910 og denne delen er av Kurset sped opp fordi som 700 00:43:43,910 --> 00:43:47,620 ønsker å se en nedlasting signal? 701 00:43:47,620 --> 00:43:54,190 Standard Mac installasjon, og da er du 702 00:43:54,190 --> 00:43:59,795 kommer til å se Jerome lagt i hans passord. 703 00:43:59,795 --> 00:44:00,670 Det er veldig spennende. 704 00:44:00,670 --> 00:44:03,510 705 00:44:03,510 --> 00:44:06,230 Og så den installerer en hel haug med verktøy. 706 00:44:06,230 --> 00:44:10,010 Og spesielt det vil installere en kommandolinje. 707 00:44:10,010 --> 00:44:14,220 Og så kan du se Jerome teste hans bilder. 708 00:44:14,220 --> 00:44:19,050 709 00:44:19,050 --> 00:44:22,640 >> Og så basert på dette, du kan se at YouTube 710 00:44:22,640 --> 00:44:27,420 mener at Nico er interessert i Star Wars, The Jimmy Kimmel-show, 711 00:44:27,420 --> 00:44:29,020 og jeg tror Ellen. 712 00:44:29,020 --> 00:44:34,130 Jeg tror det siste er et klipp fra en Ellen showet. 713 00:44:34,130 --> 00:44:37,760 >> Så Docker Toolbox kommer selv med mer enn bare Docker Machine. 714 00:44:37,760 --> 00:44:39,840 Så Docker Machine er ting som hjelper 715 00:44:39,840 --> 00:44:43,710 du sette opp en virtuell maskin på Windows 716 00:44:43,710 --> 00:44:52,080 eller Mac-- Windows boks eller Mac box-- og hjelper deg å gjøre klargjøring, 717 00:44:52,080 --> 00:44:54,040 >> Men det kommer også med Swarm og Compose, 718 00:44:54,040 --> 00:45:00,840 som er laget for å hjelpe deg med å gjøre store utrullinger av søknaden din. 719 00:45:00,840 --> 00:45:04,000 Så hvis du ønsker å administrere klynger av noder, 720 00:45:04,000 --> 00:45:08,450 klynger av containere, Komponer og Swarm er veien å gå om det. 721 00:45:08,450 --> 00:45:11,430 >> Og selvfølgelig den kommer med Docker Motor og Kitematic, 722 00:45:11,430 --> 00:45:13,250 som er denne desktop GUI. 723 00:45:13,250 --> 00:45:17,060 Jeg bør også nevne Docker Registeret, som ikke er inkludert i verktøykassa 724 00:45:17,060 --> 00:45:23,150 men det er en måte for deg å kjøre din egen registre over Docker bilder som Docker 725 00:45:23,150 --> 00:45:28,970 Hub, men du kan også bare bruke Docker Hub som en måte å gjøre det. 726 00:45:28,970 --> 00:45:32,955 >> Og, vri, du ser det kjører i en container. 727 00:45:32,955 --> 00:45:34,830 Og det er slik vi er distribusjon av våre lysbilder. 728 00:45:34,830 --> 00:45:38,610 Hele denne presentasjonen er faktisk en HTML lysbilde dekk. 729 00:45:38,610 --> 00:45:43,170 Og det kjører i et container, som du kan få by-- 730 00:45:43,170 --> 00:45:45,596 >> NICOLA Kabar: Ja, så det er kjører full gang på min Max. 731 00:45:45,596 --> 00:45:47,540 Og jeg presenterer fra det. 732 00:45:47,540 --> 00:45:50,910 Og du bare gjøre Docker etter du installerer Toolbox. 733 00:45:50,910 --> 00:45:57,340 Du kan bare gjøre en havnearbeider run og få det, og bruke lysbildene. 734 00:45:57,340 --> 00:45:58,830 >> MANO MERKER: Og det er det. 735 00:45:58,830 --> 00:46:02,160 Så vi takker dere alle for å komme. 736 00:46:02,160 --> 00:46:03,990 Og vi er glade for å svare på spørsmål. 737 00:46:03,990 --> 00:46:07,810 Jeg bør nevne før noen later det er t-skjorter der borte. 738 00:46:07,810 --> 00:46:10,940 Beklager alle som ser dette på Livestream eller video, 739 00:46:10,940 --> 00:46:12,820 men vi har Docker T-skjorter der borte. 740 00:46:12,820 --> 00:46:16,250 Og vi vet Docker studenter, og i min erfaring, 741 00:46:16,250 --> 00:46:18,940 professorer også, som gratis klær. 742 00:46:18,940 --> 00:46:22,490 >> Så takk alle for å komme ut. 743 00:46:22,490 --> 00:46:27,050 Og følg oss på Twitter hvis du vil, eller ikke. 744 00:46:27,050 --> 00:46:27,910 Jeg bryr meg ikke. 745 00:46:27,910 --> 00:46:29,430 Følg også Docker på Twitter. 746 00:46:29,430 --> 00:46:31,890 Det er også interessant. 747 00:46:31,890 --> 00:46:32,990 Og så det er det. 748 00:46:32,990 --> 00:46:33,490 Docker.com. 749 00:46:33,490 --> 00:46:35,410 Takk skal du ha. 750 00:46:35,410 --> 00:46:39,360 >> [BIFALL] 751 00:46:39,360 --> 00:46:41,625