1 00:00:00,000 --> 00:00:05,042 >> [MUSIK SPELA] 2 00:00:05,042 --> 00:00:06,000 DAVID MALAN: Okej. 3 00:00:06,000 --> 00:00:07,630 Tack så mycket för att ni kom. 4 00:00:07,630 --> 00:00:11,850 Detta är CS50 seminarium om Docker, en teknik som vi själva och CS50 5 00:00:11,850 --> 00:00:13,392 har börjat använda under en tid nu. 6 00:00:13,392 --> 00:00:15,766 Så mitt namn är David Malan, jag undervisa Harvard inledning 7 00:00:15,766 --> 00:00:16,671 till datalogi. 8 00:00:16,671 --> 00:00:18,670 För ett antal år, Vi har gett studenter 9 00:00:18,670 --> 00:00:20,435 nedladdningsbar klientsidan virtuella maskiner 10 00:00:20,435 --> 00:00:22,134 där de gör sina problem uppsättningar. 11 00:00:22,134 --> 00:00:24,300 Att vi nu har gått till ett moln miljö 12 00:00:24,300 --> 00:00:27,396 som faktiskt använder denna teknik kallas Docker, så att alla de CS50 13 00:00:27,396 --> 00:00:29,270 studenter har nu sin egna Docker behållare 14 00:00:29,270 --> 00:00:31,180 att du snart kommer att få höra allt om. 15 00:00:31,180 --> 00:00:33,740 >> Dessutom, på CS50 server sido kluster, under många år 16 00:00:33,740 --> 00:00:35,290 vi använde Amazons Cloud server. 17 00:00:35,290 --> 00:00:37,164 Vi körde individuell virtuella maskiner. 18 00:00:37,164 --> 00:00:40,330 Även detta har vi börjat övergången till dessa saker som kallas Docker containrar 19 00:00:40,330 --> 00:00:43,762 så att alla våra applikationer är nu perfekt isolerade från varandra. 20 00:00:43,762 --> 00:00:46,720 Så för detta och mer, låt mig introducera våra vänner, Nico och Mano, 21 00:00:46,720 --> 00:00:48,574 från Docker självt. 22 00:00:48,574 --> 00:00:49,740 NICOLA Kabar: Tack, David. 23 00:00:49,740 --> 00:00:51,410 Hej, alla. 24 00:00:51,410 --> 00:00:54,230 Mitt namn är Nico och det är Mano. 25 00:00:54,230 --> 00:00:58,260 Vi är från Docker. 26 00:00:58,260 --> 00:01:02,240 Vi kommer att prata about-- ger er en introduktion till Docker, 27 00:01:02,240 --> 00:01:08,100 och förhoppningsvis mot slutet av detta prat kan du inser 28 00:01:08,100 --> 00:01:12,890 hur mycket du kan använda läkare oxalat din applikationsutveckling 29 00:01:12,890 --> 00:01:14,200 och driftsättning. 30 00:01:14,200 --> 00:01:21,250 >> Så vi kommer att börja verkliga snabb med lite bakgrundsinformation. 31 00:01:21,250 --> 00:01:22,750 Beskriv vad Docker handlar om. 32 00:01:22,750 --> 00:01:25,490 Hur fungerar det? 33 00:01:25,490 --> 00:01:27,400 Hur är det arkitekten? 34 00:01:27,400 --> 00:01:29,360 Jag kommer att göra några demos. 35 00:01:29,360 --> 00:01:35,070 Och Mano kommer att bli beskriver hur kan du använda Docker 36 00:01:35,070 --> 00:01:37,720 och ger dig konkreta åtgärder hur du kan komma igång. 37 00:01:37,720 --> 00:01:41,490 >> Jag skulle uppskatta om ni kan hålla off för era frågor mot slutet. 38 00:01:41,490 --> 00:01:46,800 På så sätt kan jag att ta upp dem frågor under presentationen. 39 00:01:46,800 --> 00:01:52,150 Så vi lämnar lite tid i slutet för frågor. 40 00:01:52,150 --> 00:01:55,170 >> Så bara riktigt snabbt, som har faktiskt någonsin arbetat på Docker, 41 00:01:55,170 --> 00:01:56,850 som lekte med den? 42 00:01:56,850 --> 00:01:58,000 Grymt bra. 43 00:01:58,000 --> 00:01:58,520 Häftigt. 44 00:01:58,520 --> 00:01:59,817 Bra. 45 00:01:59,817 --> 00:02:01,525 Så jag kommer att börja med lite historia. 46 00:02:01,525 --> 00:02:04,350 47 00:02:04,350 --> 00:02:09,820 Så tillbaka i 90-talet och tidiga 2000-talet, i princip 48 00:02:09,820 --> 00:02:16,940 som webbutvecklare, app-utvecklare, när de gick för att distribuera ett program 49 00:02:16,940 --> 00:02:19,350 det var knuten till ren metall. 50 00:02:19,350 --> 00:02:20,860 Det var en server. 51 00:02:20,860 --> 00:02:22,870 Det var ett program. 52 00:02:22,870 --> 00:02:25,260 >> Traditionellt, ett exempel skulle vara som en LAMP stack, 53 00:02:25,260 --> 00:02:30,630 där du faktiskt tvungen att ta upp resurspool. 54 00:02:30,630 --> 00:02:37,110 CPU, minne, disk, nätverk, installation operativsystem ovanpå det. 55 00:02:37,110 --> 00:02:40,060 Om du tjänar något, om du faktiskt har webbserver, 56 00:02:40,060 --> 00:02:42,470 du behöver något liknande Apache att tjäna det. 57 00:02:42,470 --> 00:02:47,540 >> Om din ansökan behöver databas, backhand, 58 00:02:47,540 --> 00:02:50,840 du skulle installera något som MySQL, och så vidare. 59 00:02:50,840 --> 00:02:55,910 Och om du behöver körtiden, PHP: s och PHP Python arbete var där. 60 00:02:55,910 --> 00:02:59,480 Och så att vi faktiskt var tvungna att vidta dessa åtgärder i syfte 61 00:02:59,480 --> 00:03:02,060 att få din ansökan igång. 62 00:03:02,060 --> 00:03:08,440 >> Om du behöver mer datorkraft, du i princip tvungen att ringa din Ops kille 63 00:03:08,440 --> 00:03:16,260 eller gal att gå och rack upp en ny maskinvara, anslut den, 64 00:03:16,260 --> 00:03:19,850 och du måste upprepa de processer om och om igen. 65 00:03:19,850 --> 00:03:23,680 Så denna process var relativt dyra. 66 00:03:23,680 --> 00:03:26,080 Var definitivt mycket långsam. 67 00:03:26,080 --> 00:03:27,550 >> Det var ineffektivt. 68 00:03:27,550 --> 00:03:33,890 Och i många fall, din hårdvara var underutnyttjad. 69 00:03:33,890 --> 00:03:38,830 Så, i slutet av 90-talet och början av 2000-talet, virtualisering hårdvara kom över. 70 00:03:38,830 --> 00:03:42,475 Och som ni kan se här i bild, i princip vad de gjorde 71 00:03:42,475 --> 00:03:46,390 abstraheras den pool av frigöra resurser hårdvara 72 00:03:46,390 --> 00:03:49,680 och typ av tjänade de till de övre skikten, 73 00:03:49,680 --> 00:03:52,360 i detta fall, en gäst-operativsystem. 74 00:03:52,360 --> 00:03:54,940 >> Och hela idén med virtuella maskiner kom över 75 00:03:54,940 --> 00:03:59,110 och som verkligen hjälpte Cloud computing som vi känner den idag. 76 00:03:59,110 --> 00:04:02,730 Så vad det innebar är du kan köra flera virtuella maskiner, som 77 00:04:02,730 --> 00:04:06,720 innebar flera staplar, multipel program på en samma fysiska maskin. 78 00:04:06,720 --> 00:04:10,570 79 00:04:10,570 --> 00:04:16,440 >> Detta definitivt hjälpt till med hastighet av programdistribution. 80 00:04:16,440 --> 00:04:17,629 Definitivt med kostnader. 81 00:04:17,629 --> 00:04:22,810 Du behöver inte gå och spendera energi, tid och resurser för att rack 82 00:04:22,810 --> 00:04:26,210 fler servrar för att komma till mer compute. 83 00:04:26,210 --> 00:04:30,950 Och hastigheten faktiskt föra de resurser upp är mycket snabbare. 84 00:04:30,950 --> 00:04:31,450 Bra. 85 00:04:31,450 --> 00:04:34,320 >> Så vi löst världssvälten, eller hur? 86 00:04:34,320 --> 00:04:36,390 Nej inte direkt. 87 00:04:36,390 --> 00:04:42,410 Så, virtualisering så mycket som det är faktiskt hjälpt, ta itu med problemet, 88 00:04:42,410 --> 00:04:45,460 det faktiskt införes en hel del utmaningar. 89 00:04:45,460 --> 00:04:49,210 Den hypervisor definitivt infört en hel del komplexitet, 90 00:04:49,210 --> 00:04:53,820 hantering de underliggande pool av resurser. 91 00:04:53,820 --> 00:04:57,910 >> Det är tyngre i den meningen att före du hade ett enda operativsystem som 92 00:04:57,910 --> 00:05:01,830 är som tre, fyra gig på disk. 93 00:05:01,830 --> 00:05:04,230 Nu, om du har 10 maskiner på en enda hårdvara 94 00:05:04,230 --> 00:05:09,060 du måste multiplicera med antalet maskiner. 95 00:05:09,060 --> 00:05:11,440 Det är definitivt mer dyrt i en mening du fortfarande 96 00:05:11,440 --> 00:05:14,430 måste få licensiering för virtualiseringsteknik 97 00:05:14,430 --> 00:05:18,210 om det inte är öppen källkod. 98 00:05:18,210 --> 00:05:21,120 >> Men låt oss inte ta alla kredit från virtualisering. 99 00:05:21,120 --> 00:05:27,530 Eftersom vad som hände är att det finns en Många stackar och massor av programvara 100 00:05:27,530 --> 00:05:33,900 teknik som möjlig av hur snabbt du skulle kunna få 101 00:05:33,900 --> 00:05:38,040 till resurser med molnet bommen. 102 00:05:38,040 --> 00:05:46,675 >> Så, idag en enda app eller tjänst kan att använda någon av följande drifttider 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, allt. 106 00:05:56,070 --> 00:05:59,740 Så det finns en hel del komplexitet på detta Antalet staplar att faktiskt ta upp 107 00:05:59,740 --> 00:06:02,210 en enda tjänst. 108 00:06:02,210 --> 00:06:07,300 Och tillsammans med det, du hade en hel del underliggande resurser eller infrastruktur 109 00:06:07,300 --> 00:06:15,210 typer att testa distribuera och i princip ta till produktion dessa program 110 00:06:15,210 --> 00:06:16,900 att du utvecklar. 111 00:06:16,900 --> 00:06:21,950 >> Särskilt som ditt team har vuxit arbetar på dessa program, 112 00:06:21,950 --> 00:06:25,310 det finns en hel del komplexitet och utmaningar 113 00:06:25,310 --> 00:06:31,660 som fördes för att säkerställa att den cycle-- princip ansökan 114 00:06:31,660 --> 00:06:34,040 utvecklingscykel, är faktiskt framgångsrik. 115 00:06:34,040 --> 00:06:40,440 Så det faktum att din ansökan arbetar lokalt på din lokala VM 116 00:06:40,440 --> 00:06:47,480 garanterar inte att din kollega kommer att förvänta sig samma resultat. 117 00:06:47,480 --> 00:06:51,330 >> Och när verksamheten laget är involverad i att ta vad du har 118 00:06:51,330 --> 00:06:54,480 och distribuera den i produktion skala, också det finns ingen garanti 119 00:06:54,480 --> 00:06:56,730 att det faktiskt kommer att hända. 120 00:06:56,730 --> 00:07:00,900 Så detta lämnar oss med en riktigt big-- en hel del frågetecken, 121 00:07:00,900 --> 00:07:07,700 en hel del utmaningar faktiskt inför liknande förr i tiden. 122 00:07:07,700 --> 00:07:12,280 Och det påminde oss om sjöfartsindustrin. 123 00:07:12,280 --> 00:07:14,280 >> Så sjöfartsindustrin hade en hel del varor, 124 00:07:14,280 --> 00:07:16,190 som ni kan se på vänster sida. 125 00:07:16,190 --> 00:07:19,840 Och på höger sida, det finns en hel del, i princip, 126 00:07:19,840 --> 00:07:22,160 sätt att transportera varorna. 127 00:07:22,160 --> 00:07:26,040 Och vad som händer när ett par folks kom tillsammans och sade, 128 00:07:26,040 --> 00:07:29,600 vi måste standardisera hur vi faktiskt skickar varorna. 129 00:07:29,600 --> 00:07:33,280 Och bom, har du intermodala transportbehållare. 130 00:07:33,280 --> 00:07:38,970 >> Så de kom överens om det mesta vanligaste storlekarna för behållaren. 131 00:07:38,970 --> 00:07:40,160 Hur man hanterar dem. 132 00:07:40,160 --> 00:07:44,560 Vad exakt metod du behöver att lasta dem och lossa dem. 133 00:07:44,560 --> 00:07:49,590 Och därför, som verkligen hjälpte sjöfarten. 134 00:07:49,590 --> 00:07:55,250 Nu mer än 90% fokus transporteras globalt använder dessa behållare. 135 00:07:55,250 --> 00:08:01,010 Och som definitivt minskar kostnader samt 136 00:08:01,010 --> 00:08:03,400 skador på grund av sjöfarten. 137 00:08:03,400 --> 00:08:09,660 >> Så vi tar samma modell och vi tillämpa två applikationsutveckling programvara 138 00:08:09,660 --> 00:08:13,080 arkitektur, i den meningen att containerisering 139 00:08:13,080 --> 00:08:15,842 tog virtualisering upp en nivå. 140 00:08:15,842 --> 00:08:17,800 Så istället för att göra det på hårdvaran nivå, 141 00:08:17,800 --> 00:08:22,060 Det blev mer av ett operativsystem systemnivå virtualisering. 142 00:08:22,060 --> 00:08:26,450 >> Och vi gör det genom att förse varje applikation i sin egen lätt, 143 00:08:26,450 --> 00:08:31,180 isolerat, körbart, och bärbar, viktigast av allt, 144 00:08:31,180 --> 00:08:35,049 ett sätt att faktiskt paketera allt som behövs för att köra. 145 00:08:35,049 --> 00:08:36,100 Överallt kan köras. 146 00:08:36,100 --> 00:08:42,039 Så, oavsett om du kör det på lokal dev miljö, din produktion 147 00:08:42,039 --> 00:08:44,490 miljö, din iscensättning eller tester. 148 00:08:44,490 --> 00:08:47,700 Oavsett vad som ligger bakom infrastrukturen är där, 149 00:08:47,700 --> 00:08:51,410 du hade en fungerande arbets app. 150 00:08:51,410 --> 00:08:54,100 151 00:08:54,100 --> 00:09:01,800 >> Så det är precis vad som i grunden behållare gör på detta problem. 152 00:09:01,800 --> 00:09:04,070 De åtgärda det genom förpackning det på ett sådant sätt 153 00:09:04,070 --> 00:09:09,490 att det kan garantera att det är utplacerade framgångsrikt oavsett var den lever. 154 00:09:09,490 --> 00:09:12,120 Så om du ska liknande, Bob det är fortfarande OK. 155 00:09:12,120 --> 00:09:17,860 Om du är förvirrad med vad jag säger, Jag kommer att utarbeta på det. 156 00:09:17,860 --> 00:09:20,900 >> Så hur Docker själv passa på den här bilden? 157 00:09:20,900 --> 00:09:26,335 Så Docker är en öppen plattform enkelt, betonar lätt, 158 00:09:26,335 --> 00:09:30,500 att bygga fartyg, springa, lätt portabel själv 159 00:09:30,500 --> 00:09:33,440 tillräckliga app behållare någonstans. 160 00:09:33,440 --> 00:09:37,660 Så om du tar något av detta prata, ta följande. 161 00:09:37,660 --> 00:09:40,980 >> Om du har din app igång lokalt och du utvecklat det 162 00:09:40,980 --> 00:09:45,930 i att använda Docker plattformen, förväntar det möjligt att framgångsrikt användas. 163 00:09:45,930 --> 00:09:49,380 Oavsett vad är det underliggande infrastrukturen. 164 00:09:49,380 --> 00:09:53,830 Så om du har en Docker behållare och det funkar, då 165 00:09:53,830 --> 00:09:58,130 så länge som det finns en Docker motorn på den andra side-- 166 00:09:58,130 --> 00:10:02,190 Om operationen infrastruktur använder någon Cloud, oavsett om det 167 00:10:02,190 --> 00:10:06,680 är AWS, eller Google eller Microsoft, eller någon av de offentliga moln, 168 00:10:06,680 --> 00:10:10,010 eller din egen Cloud, eller din öppna stack Cloud, eller din närmiljö. 169 00:10:10,010 --> 00:10:11,970 >> Om du har en motor kör, det betyder 170 00:10:11,970 --> 00:10:14,537 det kommer att bli framgångsrikt utplacerade där. 171 00:10:14,537 --> 00:10:16,620 Det kommer att vara igång exakt samma beteende 172 00:10:16,620 --> 00:10:21,480 som ni arkitekten att det ska vara. 173 00:10:21,480 --> 00:10:26,080 Så om vi tittar at-- jag går att gå igenom vad som faktiskt 174 00:10:26,080 --> 00:10:29,160 är de viktigaste komponenterna i Docker. 175 00:10:29,160 --> 00:10:31,060 >> Så Engine är kärnan i Docker. 176 00:10:31,060 --> 00:10:32,770 Det är hjärnans. 177 00:10:32,770 --> 00:10:39,360 Det orchestrates byggnad, sjöfart, och driftsätta och hantera 178 00:10:39,360 --> 00:10:41,570 själva behållarna. 179 00:10:41,570 --> 00:10:45,160 Jag ska gräva i vad Engine gör mer detaljerat i en sekund. 180 00:10:45,160 --> 00:10:47,740 181 00:10:47,740 --> 00:10:51,720 I grund och botten, eftersom läkare byggdes runt klientserverarkitekturer, 182 00:10:51,720 --> 00:10:56,630 så för att interagera med Motor du behöver någon form av en klient. 183 00:10:56,630 --> 00:11:01,200 >> Bilder är mallarna i vilka behållare byggs från. 184 00:11:01,200 --> 00:11:06,800 Så bilderna är i grunden bara statiska filer. 185 00:11:06,800 --> 00:11:08,740 Mallar och containrar är faktiskt vad är 186 00:11:08,740 --> 00:11:12,280 körs vid körning som tjänar din ansökan 187 00:11:12,280 --> 00:11:15,150 eller göra någonting med data. 188 00:11:15,150 --> 00:11:19,020 >> Registret behandlas som ett problem hur du faktiskt distribuera bilder. 189 00:11:19,020 --> 00:11:23,230 Så om du behöver för att dela en bild att du arbetat på din kollega 190 00:11:23,230 --> 00:11:27,220 eller till den op laget, du använda den med registret. 191 00:11:27,220 --> 00:11:31,720 Du kan ladda ner en öppen källkod version av den som Docker fungerade på 192 00:11:31,720 --> 00:11:33,150 och öppna anskaffas. 193 00:11:33,150 --> 00:11:38,040 >> Eller så kan du använda Docker hjälp, vilket är Cloud version 194 00:11:38,040 --> 00:11:40,130 att driva och dra bilderna ute. 195 00:11:40,130 --> 00:11:41,160 Det är en stor sak. 196 00:11:41,160 --> 00:11:44,520 Eftersom det finns en enorm ekosystemet runt Docker och det är 197 00:11:44,520 --> 00:11:48,960 verkligen tungt utnyttjar navet. 198 00:11:48,960 --> 00:11:59,780 >> Så för att sammanfatta här, det är hur minimalistiska Docker arbetsflöde klient. 199 00:11:59,780 --> 00:12:04,040 Du interagerar med värden i det här fallet är det de Docker demoner. 200 00:12:04,040 --> 00:12:06,490 Det är samma sak som Engine. 201 00:12:06,490 --> 00:12:09,690 Du gör kommandon som Docker bygga, dra, kör. 202 00:12:09,690 --> 00:12:14,280 Och själva motorn går och gör dessa saker. 203 00:12:14,280 --> 00:12:18,010 >> Så antingen det interagerar med Registret för att dra dessa bilder 204 00:12:18,010 --> 00:12:19,670 och skikten av bilderna. 205 00:12:19,670 --> 00:12:25,030 Oavsett om du vill distribuera, köra containrar, döda dem, kasta ner dem, 206 00:12:25,030 --> 00:12:25,730 allt möjligt. 207 00:12:25,730 --> 00:12:32,190 Så det här sammanfattar arbetsflödet av alla dessa komponenter. 208 00:12:32,190 --> 00:12:34,710 >> Så om du tar varje komponenten av sig själv. 209 00:12:34,710 --> 00:12:37,690 Så Motor, det är bara en demon. 210 00:12:37,690 --> 00:12:40,800 Det kommer slags spela det för att stödja det på Linux eftersom det gör 211 00:12:40,800 --> 00:12:44,380 kräver vissa Linuxkärnan funktioner. 212 00:12:44,380 --> 00:12:48,820 Men Windows fungerar på att göra samma sak. 213 00:12:48,820 --> 00:12:53,720 Det är tänkt att stödjas Windows Server 2016. 214 00:12:53,720 --> 00:13:01,500 >> Så, återigen, ansvar med Motorn är att, eller till att bygga bilder. 215 00:13:01,500 --> 00:13:05,340 Dra bilder från Docker Hub eller ditt eget kansli. 216 00:13:05,340 --> 00:13:07,840 Om du är klar med dessa bilder eller om du skapar en ny bilder, 217 00:13:07,840 --> 00:13:14,770 du kan driva dem tillbaka till registret att distribuera dem till andra lag. 218 00:13:14,770 --> 00:13:18,300 >> Och försöker innehålla den lokalt och hantera containrar livscykeln 219 00:13:18,300 --> 00:13:19,260 lokalt. 220 00:13:19,260 --> 00:13:22,010 Den är byggd kring HTTP REST API. 221 00:13:22,010 --> 00:13:24,480 Så tekniskt sett kan du skriva din egen klient 222 00:13:24,480 --> 00:13:31,650 så länge som den använder HTTP, som är en mycket standard mekanism för att prata med motor 223 00:13:31,650 --> 00:13:33,110 och en hel del andra tjänster. 224 00:13:33,110 --> 00:13:35,780 Och du kan se från här att oavsett 225 00:13:35,780 --> 00:13:39,010 av vad infrastrukturen är, så länge du can-- alla 226 00:13:39,010 --> 00:13:42,170 du behöver är ett operativsystem systemet, Linux specifikt. 227 00:13:42,170 --> 00:13:45,460 >> Och du kan installera Docker Engine ovanpå det och ha det igång 228 00:13:45,460 --> 00:13:48,970 och det orchestrates, i princip, alla dessa appen en, två, 229 00:13:48,970 --> 00:13:51,530 och tre är faktiska behållare. 230 00:13:51,530 --> 00:13:53,990 Så det är Engine. 231 00:13:53,990 --> 00:13:58,040 Som jag nämnde tidigare eftersom du behöver för att interagera med motor, 232 00:13:58,040 --> 00:13:59,200 Det är kunden. 233 00:13:59,200 --> 00:14:03,180 >> Men egentligen när du installerar Docker, det levereras med det. 234 00:14:03,180 --> 00:14:06,110 Så det blir installerad, så det är en enda binär. 235 00:14:06,110 --> 00:14:11,830 Och du kan göra lokalsamtal till Docker Engine. 236 00:14:11,830 --> 00:14:14,040 Eller avlägsna samtal till fjärr motorer. 237 00:14:14,040 --> 00:14:16,600 238 00:14:16,600 --> 00:14:19,590 Det gör använder HTTP, som Jag nämnde tidigare. 239 00:14:19,590 --> 00:14:24,200 Det finns ett GUI klient som heter Kitematic från Docker. 240 00:14:24,200 --> 00:14:26,390 Och det finns definitivt en hel del andra människor 241 00:14:26,390 --> 00:14:29,740 som bygger en hel del GUI som i stort sett genomför 242 00:14:29,740 --> 00:14:32,980 vissa HTTP samtal att prata med Engine. 243 00:14:32,980 --> 00:14:35,920 244 00:14:35,920 --> 00:14:39,280 >> Bara några exempelkommandon. 245 00:14:39,280 --> 00:14:44,620 Om du gör Docker version, skulle det visa klientversionen samt 246 00:14:44,620 --> 00:14:47,030 serverversionen. 247 00:14:47,030 --> 00:14:49,500 Om du gör Docker info det kommer berätta dig all information 248 00:14:49,500 --> 00:14:54,300 om hur många behållare kör eller skapas, hur många bilder du har, 249 00:14:54,300 --> 00:14:56,530 och så vidare och så vidare. 250 00:14:56,530 --> 00:15:01,850 >> Här har jag, i näst sista rutan, jag har Doctor springa. 251 00:15:01,850 --> 00:15:04,970 Så det är hur jag faktiskt skapa behållare. 252 00:15:04,970 --> 00:15:08,960 Och jag ger det till echo Hello World och sova för en sekund och allt. 253 00:15:08,960 --> 00:15:12,830 Och du kan se resultat. Så det är pågående. 254 00:15:12,830 --> 00:15:16,930 Och liknande till Linux ps, kan du se alla processer och, i detta fall, 255 00:15:16,930 --> 00:15:18,540 alla löpande behållare. 256 00:15:18,540 --> 00:15:23,430 Den här är att hänvisa till behållaren Jag har nyss skapat. 257 00:15:23,430 --> 00:15:27,560 >> Så, är detta verkligen viktigt eftersom, liknande, kan det vara lite förvirrande. 258 00:15:27,560 --> 00:15:33,050 Så bilderna är skrivskyddad den samling filer, eller hur? 259 00:15:33,050 --> 00:15:37,000 De är vad vår behållare är baserad på. 260 00:15:37,000 --> 00:15:40,340 Men de är bara skrivskyddad. 261 00:15:40,340 --> 00:15:44,330 Så du börjar med en bas bild. 262 00:15:44,330 --> 00:15:50,180 Det tenderar att efterlikna OS-liknande, så Ubuntu CentOS, whatnot basbild. 263 00:15:50,180 --> 00:15:53,990 Och sedan börja bygga ovanpå att vissa skikt, som kommer att göra upp 264 00:15:53,990 --> 00:16:00,010 din slutbild, slutresultatet här. 265 00:16:00,010 --> 00:16:03,220 >> Och vart och ett av dessa skikt bör ha en förälder bild 266 00:16:03,220 --> 00:16:06,690 att det refererar till när det faktiskt vill skapa. 267 00:16:06,690 --> 00:16:09,922 De är oföränderliga, i den meningen att skrivskyddad eftersom de är, 268 00:16:09,922 --> 00:16:11,630 du kan faktiskt inte göra ändringar i dem. 269 00:16:11,630 --> 00:16:17,540 Du kan använda dem för att skapa en container från en bild, som 270 00:16:17,540 --> 00:16:23,530 kommer att kalla alla efterföljande nödvändiga bilder under den. 271 00:16:23,530 --> 00:16:26,400 >> Du kan göra ändringar till ett annat lager, 272 00:16:26,400 --> 00:16:28,810 Det är en omskrivning skikt jag ska tala om i en sekund. 273 00:16:28,810 --> 00:16:31,350 Men var och en av dessa skikt aldrig ändras. 274 00:16:31,350 --> 00:16:34,300 275 00:16:34,300 --> 00:16:38,670 I grund och botten bilder använda något kallas Union File System, UFS. 276 00:16:38,670 --> 00:16:42,280 Och det finns olika lagrings backends som utnyttjar denna teknik. 277 00:16:42,280 --> 00:16:49,430 Och vad det betyder är att det sammanför olika filsystem 278 00:16:49,430 --> 00:16:51,190 att få dem att se ut som en. 279 00:16:51,190 --> 00:16:54,460 >> Så du kan faktiskt, från en ansökan perspektiv, 280 00:16:54,460 --> 00:16:59,570 du har en topp av en vy som visar alla olika filsystem behövs 281 00:16:59,570 --> 00:17:01,120 för det programmet för att köra. 282 00:17:01,120 --> 00:17:04,400 Men de är faktiskt på detta, de är faktiskt i separata platser 283 00:17:04,400 --> 00:17:06,410 och utnyttjas av andra behållare samt. 284 00:17:06,410 --> 00:17:09,569 285 00:17:09,569 --> 00:17:14,410 >> Så som ni kan se här att Om vi ​​börjar med demonen bild 286 00:17:14,410 --> 00:17:18,619 som en bas image, och sedan Vi går in och lägg [? emacs?] 287 00:17:18,619 --> 00:17:20,720 och då är det ett annat skikt. 288 00:17:20,720 --> 00:17:21,916 Och sedan lägga till Apache. 289 00:17:21,916 --> 00:17:22,790 Det är ett annat lager. 290 00:17:22,790 --> 00:17:25,470 Och sedan vi tillbringar behållare från det. 291 00:17:25,470 --> 00:17:29,760 Var och en av dessa bilder, vart och ett av dessa skikt, 292 00:17:29,760 --> 00:17:35,530 är distinkt och kan vara återanvändas av andra behållare. 293 00:17:35,530 --> 00:17:40,070 >> Om man tittar på behållare själva, de är något som VM-liknande, 294 00:17:40,070 --> 00:17:41,930 men inte behandlas på samma gång. 295 00:17:41,930 --> 00:17:49,180 Så, de har inte tekniskt, den fullständig operativsystem under dem. 296 00:17:49,180 --> 00:17:52,630 De använder enda kärna av värdoperativsystemet. 297 00:17:52,630 --> 00:17:54,440 Och de bygger på toppen av det. 298 00:17:54,440 --> 00:17:56,250 De härmar hur de ser ut. 299 00:17:56,250 --> 00:18:00,710 De härmar deras rot-fil system av operativsystemet. 300 00:18:00,710 --> 00:18:04,930 Men de faktiskt inte replikerar. 301 00:18:04,930 --> 00:18:12,080 >> Så, istället för att ha oföränderliga skikt, det sista lagret, som är behållaren 302 00:18:12,080 --> 00:18:14,690 själv, det är en läs- och skrivskiktet. 303 00:18:14,690 --> 00:18:17,350 Det driver också processerna av din ansökan. 304 00:18:17,350 --> 00:18:23,530 Och det beror på de underliggande lagren. 305 00:18:23,530 --> 00:18:26,730 Varje behållare är skapas från en bild. 306 00:18:26,730 --> 00:18:32,450 Och den bilden kan vara en enda skikt eller flerskiktsbild. 307 00:18:32,450 --> 00:18:37,200 >> Och jag vill att notera här att Docker tungt använder 308 00:18:37,200 --> 00:18:40,370 eller bygger på copy-on-write mekanism. 309 00:18:40,370 --> 00:18:44,350 Så att, faktiskt, om du inte är göra ändringar i behållaren, 310 00:18:44,350 --> 00:18:45,930 det kommer inte att ta extra utrymme. 311 00:18:45,930 --> 00:18:49,600 Så det är i princip hur du sammanfatta en copy-on-write. 312 00:18:49,600 --> 00:18:53,820 Det kommer definitivt påskynda uppstart för behållaren. 313 00:18:53,820 --> 00:18:56,300 För om du inte gör ändringar i behållaren, 314 00:18:56,300 --> 00:18:57,800 det är att använda det som redan finns. 315 00:18:57,800 --> 00:19:01,130 316 00:19:01,130 --> 00:19:02,955 >> Så, hur det faktiskt fungerar. 317 00:19:02,955 --> 00:19:06,920 318 00:19:06,920 --> 00:19:14,240 En del av det är, just nu, är det utnyttjar minst två nyckel kärna 319 00:19:14,240 --> 00:19:14,820 funktioner. 320 00:19:14,820 --> 00:19:17,660 Och det är i princip vad skapat denna nivå av isolering 321 00:19:17,660 --> 00:19:19,550 för själva behållarna. 322 00:19:19,550 --> 00:19:22,290 Dessa funktioner är namn och cgroups. 323 00:19:22,290 --> 00:19:29,870 Så namn är ett sätt att skapa isolerade resurser, 324 00:19:29,870 --> 00:19:36,290 så att de inom själva behållaren, bara du kan se vissa resurser. 325 00:19:36,290 --> 00:19:40,030 Såsom nätverksgränssnitt eller vissa användare eller whatnot. 326 00:19:40,030 --> 00:19:44,160 >> Och de är bara synliga och endast tillgängliga i behållaren. 327 00:19:44,160 --> 00:19:48,290 Cgroup på andra sidan gränserna hur du använder dessa resurser. 328 00:19:48,290 --> 00:19:50,950 CPU, minne och disk. 329 00:19:50,950 --> 00:19:53,900 När du kan gå in, jag menar de är faktiskt 330 00:19:53,900 --> 00:19:57,410 funktioner som utvecklats by-- de är en del av Linux-kärnan. 331 00:19:57,410 --> 00:20:01,800 Så de var inte återuppfunnit med eller återskapas av Docker. 332 00:20:01,800 --> 00:20:03,770 Docker använder dem. 333 00:20:03,770 --> 00:20:05,560 >> Vad Doctor verkligen här är faktiskt det 334 00:20:05,560 --> 00:20:08,680 iscensatt skapa namnområden för varje behållare 335 00:20:08,680 --> 00:20:13,320 och skapa cgroups så att det är löjligt enkelt att skapa behållare 336 00:20:13,320 --> 00:20:14,870 med hjälp av dessa funktioner. 337 00:20:14,870 --> 00:20:22,910 Naturligtvis, som jag beskrev tidigare, Union File System och copy-on-write riktigt 338 00:20:22,910 --> 00:20:26,810 hjälpa hastigheten och skivan Återvinning av emballage. 339 00:20:26,810 --> 00:20:28,917 >> Och när du får din händerna runt Docker, 340 00:20:28,917 --> 00:20:32,000 du kommer att se hur snabbt det är att faktiskt snurra upp behållare och tår 341 00:20:32,000 --> 00:20:32,500 ner dem. 342 00:20:32,500 --> 00:20:36,060 343 00:20:36,060 --> 00:20:40,230 Så, om du kan fråga, hur kan du faktiskt bygga bilder? 344 00:20:40,230 --> 00:20:45,940 Vi bygger bilder genom en process som skapar containrar och göra förändringar, förändra 345 00:20:45,940 --> 00:20:50,220 dem, och begå dem in i passande en bild. 346 00:20:50,220 --> 00:20:54,330 >> Så det är en kyckling och ägg referens här, 347 00:20:54,330 --> 00:20:57,350 eftersom alla behållarna kommer från bilder och bilder kommer 348 00:20:57,350 --> 00:21:00,270 från begått behållare, för det mesta. 349 00:21:00,270 --> 00:21:03,830 Det finns tre alternativ att skapa bilder. 350 00:21:03,830 --> 00:21:06,580 Jag kommer att beskriva den första och sista. 351 00:21:06,580 --> 00:21:10,060 Du kan antingen manuellt gå och kör behållaren 352 00:21:10,060 --> 00:21:14,280 och göra dessa förändringar, som du skulle göra på en VM 353 00:21:14,280 --> 00:21:17,060 eller alla operativsystem, t.ex. som att installera nya binärer, 354 00:21:17,060 --> 00:21:19,370 sätta filsystem, och allt. 355 00:21:19,370 --> 00:21:22,620 >> Och sedan du avslutar, som du kan se där uppe. 356 00:21:22,620 --> 00:21:24,330 Jag lämnar min behållare. 357 00:21:24,330 --> 00:21:26,050 Och då jag gör Docker begå. 358 00:21:26,050 --> 00:21:28,390 Och jag begår det. 359 00:21:28,390 --> 00:21:31,560 Du kan se att antalet här är bara en UUID, eller första 12 360 00:21:31,560 --> 00:21:32,810 bitar av UUID. 361 00:21:32,810 --> 00:21:34,320 Eller byte av UUID. 362 00:21:34,320 --> 00:21:35,770 Och sedan jag kalla det min bild. 363 00:21:35,770 --> 00:21:39,510 Så nu Docker tar hand om inspelning allt jag gjorde det 364 00:21:39,510 --> 00:21:42,830 och skapa nya bild som bygger på det. 365 00:21:42,830 --> 00:21:47,080 366 00:21:47,080 --> 00:21:52,560 >> Jag tänker inte tala om tarball, men det finns ett sätt du kan få en enda, 367 00:21:52,560 --> 00:21:58,200 skapa en enda, eller göra en enda lager bild med tarbollar. 368 00:21:58,200 --> 00:22:02,650 Vad jag kommer att tala om detta och vad som används mest i dag, 369 00:22:02,650 --> 00:22:03,270 är Dockerfile. 370 00:22:03,270 --> 00:22:07,260 Som är tekniskt den första steg automatiseras av Docker självt. 371 00:22:07,260 --> 00:22:11,920 Så Dockerfiles är saker som du är kommer att se i en massa github repor 372 00:22:11,920 --> 00:22:13,150 i dag. 373 00:22:13,150 --> 00:22:16,420 Det är i princip bara en textfil som beskriver 374 00:22:16,420 --> 00:22:19,780 exakt hur man bygger en bild. 375 00:22:19,780 --> 00:22:25,540 >> Och för varje rad, det faktiskt skapar behållaren, exekverar den linjen, 376 00:22:25,540 --> 00:22:30,480 begår att behållaren in i en ny bild, och du, i princip, 377 00:22:30,480 --> 00:22:36,160 använda den för alla efterföljande operationer tills du kommer till den sista bilden. 378 00:22:36,160 --> 00:22:39,260 Som är i grunden avsluta målet här, i slutet. 379 00:22:39,260 --> 00:22:42,420 Och när du exec-- efter skriv din Dockerfile, som 380 00:22:42,420 --> 00:22:46,750 är enbart i text, gör du Docker bygga och namnet på bilden. 381 00:22:46,750 --> 00:22:50,000 >> Och du pekar på att det är där Dockerfile är på. 382 00:22:50,000 --> 00:22:56,570 Och du kan förvänta dig att se min bild som en bild som du har lokalt. 383 00:22:56,570 --> 00:22:59,100 Så det är bara en visuell exempel på vad som händer. 384 00:22:59,100 --> 00:23:00,820 Du börjar med en bas bild. 385 00:23:00,820 --> 00:23:05,150 Du kör det i en behållare som ändrar inte basen själva bilden. 386 00:23:05,150 --> 00:23:08,310 Men istället skapar en skriva skikt ovanpå det 387 00:23:08,310 --> 00:23:10,340 där du gör ändringarna där du begår 388 00:23:10,340 --> 00:23:15,050 och du upprepa processen tills du kommer till din slutliga bilden. 389 00:23:15,050 --> 00:23:20,980 >> Och genom att göra så, varannan build process kan använda samma skikt 390 00:23:20,980 --> 00:23:23,870 och same-- princip Docker cacher dessa skikt. 391 00:23:23,870 --> 00:23:30,040 Så att om jag gör exakt samma process, men istället för att installera PHP, 392 00:23:30,040 --> 00:23:31,540 Jag installera Python. 393 00:23:31,540 --> 00:23:34,210 Det kommer att använda Apache och Ubuntu. 394 00:23:34,210 --> 00:23:39,570 Så på det sättet som du använder din disk. 395 00:23:39,570 --> 00:23:42,330 Det utnyttjar cachen och tillgängliga bilder där. 396 00:23:42,330 --> 00:23:45,320 397 00:23:45,320 --> 00:23:48,840 >> Den sista pusselbiten är Registry, som är hur du distribuerar dina bilder. 398 00:23:48,840 --> 00:23:52,710 Och, som jag nämnde tidigare, det finns ett moln version av den, 399 00:23:52,710 --> 00:23:54,290 vilket är Docker Hub. 400 00:23:54,290 --> 00:23:57,550 Du kan gå och utforska en massa, i princip 401 00:23:57,550 --> 00:24:04,900 Det är en offentlig SAS produkt som du kan fortfarande ha privata bilder, 402 00:24:04,900 --> 00:24:06,590 men det finns en hel del offentliga bilder. 403 00:24:06,590 --> 00:24:10,580 Det är faktiskt obegränsad, du kan skjuta obegränsat offentliga bilder där. 404 00:24:10,580 --> 00:24:13,730 Och det är hur du kan samarbeta med ditt team. 405 00:24:13,730 --> 00:24:17,159 >> Du kan bara peka dem på dig repa och de kan ladda ner det eller din bild 406 00:24:17,159 --> 00:24:18,200 och de kan ladda ner det. 407 00:24:18,200 --> 00:24:21,140 408 00:24:21,140 --> 00:24:24,990 Så nog med prat. 409 00:24:24,990 --> 00:24:29,110 Vem vill se några demos riktigt snabbt? 410 00:24:29,110 --> 00:24:31,330 Okej. 411 00:24:31,330 --> 00:24:34,050 Så här har jag. 412 00:24:34,050 --> 00:24:37,480 Ca ni se min skärm? 413 00:24:37,480 --> 00:24:38,390 Okej. 414 00:24:38,390 --> 00:24:45,810 >> Så jag har Docker kör här, så jag kan kontrollera it's-- Detta är version 415 00:24:45,810 --> 00:24:47,510 av Docker som kör. 416 00:24:47,510 --> 00:24:49,320 Kan göra Docker info. 417 00:24:49,320 --> 00:24:55,730 Kontrollera all information om hur många bilder som de har, och så vidare och så vidare. 418 00:24:55,730 --> 00:24:58,890 Docker PS, det finns inget rinnande. 419 00:24:58,890 --> 00:25:00,570 Sammanlänkade dessa. 420 00:25:00,570 --> 00:25:06,370 >> Så det första jag vill göra är att visa dig hur du enkelt kan köra en behållare. 421 00:25:06,370 --> 00:25:09,350 Så skönheten om Läkare kör, om det faktiskt 422 00:25:09,350 --> 00:25:14,700 inte hitta en bild lokalt, som standard talar till Doctor Hub 423 00:25:14,700 --> 00:25:17,240 och försöker hitta den där och nedladdningar det åt dig. 424 00:25:17,240 --> 00:25:22,820 Så det innefattar en Docker Dra kommandot, naturligtvis. 425 00:25:22,820 --> 00:25:26,130 >> Så om jag gör en Docker springa, hello-värld. 426 00:25:26,130 --> 00:25:28,890 427 00:25:28,890 --> 00:25:31,200 Så, först det kommer att försöka lokalisera den. 428 00:25:31,200 --> 00:25:36,140 Annars, som ni kan se här, Det gick inte att hitta den lokalt. 429 00:25:36,140 --> 00:25:41,830 Just nu är det bara drog två skikt som gjorde den bilden och jag sprang det. 430 00:25:41,830 --> 00:25:45,440 Hello-världen är bara grunden utgångar, vad du har gjort. 431 00:25:45,440 --> 00:25:47,680 Så det här är det enklaste, en de enklaste exemplen. 432 00:25:47,680 --> 00:25:53,840 Så egentligen jag bara sprang och avslutade behållaren riktigt snabbt. 433 00:25:53,840 --> 00:25:59,500 >> Om jag vill run-- och förresten, om Jag vill tid att bara så ni vet, 434 00:25:59,500 --> 00:26:03,572 detta är hur lång tid det tar att faktiskt snurra upp och innehålla det. 435 00:26:03,572 --> 00:26:05,030 Vi mäter det i millisekunder. 436 00:26:05,030 --> 00:26:10,600 Så du kan se hur mycket detta kan faktiskt hjälpa dig inte bara i att testa, 437 00:26:10,600 --> 00:26:13,200 men också med distribution. 438 00:26:13,200 --> 00:26:17,221 Så det är en snabb anteckning om detta. 439 00:26:17,221 --> 00:26:18,970 Nästa sak jag kommer att göra är faktiskt 440 00:26:18,970 --> 00:26:21,930 köra en bild jag har redan förberett. 441 00:26:21,930 --> 00:26:24,460 Så Docker körning. 442 00:26:24,460 --> 00:26:27,240 -d är bara en flagga för att berätta den att köra i bakgrunden. 443 00:26:27,240 --> 00:26:30,290 Och p tilldelar vissa hamnar. 444 00:26:30,290 --> 00:26:32,670 På grund av standard behållare är isolerade, 445 00:26:32,670 --> 00:26:36,080 så du måste ange exakt hur det kan komma åt dem. 446 00:26:36,080 --> 00:26:41,150 Och i det här fallet, säger jag Docker att mappa en slumpmässig porten på värd 447 00:26:41,150 --> 00:26:44,560 till en viss hamn i själva behållaren. 448 00:26:44,560 --> 00:26:47,130 449 00:26:47,130 --> 00:26:56,460 Och det är i grund och botten där image-- förhoppningsvis detta är den rätta. 450 00:26:56,460 --> 00:27:01,780 >> Så det gör parallella nedladdningar vardera av dessa lager som ni kan se här. 451 00:27:01,780 --> 00:27:06,949 De är av skikten göra slut bilden som jag byggt. 452 00:27:06,949 --> 00:27:08,115 Det kommer att ta en sekund. 453 00:27:08,115 --> 00:27:11,290 454 00:27:11,290 --> 00:27:12,370 Och voila. 455 00:27:12,370 --> 00:27:16,590 >> Så nu om jag gör en hamnarbetare ps, skulle jag ser något som är igång. 456 00:27:16,590 --> 00:27:22,250 Jag skulle se ID, bilden att det baserades bort, 457 00:27:22,250 --> 00:27:23,880 och kommandot som utfördes. 458 00:27:23,880 --> 00:27:28,720 Och hur man kan få det är i princip du gå till den porten. 459 00:27:28,720 --> 00:27:33,240 Så jag kommer att gå att-- detta är jag kör den på AWS. 460 00:27:33,240 --> 00:27:37,150 Jag kommer att gå till 32769. 461 00:27:37,150 --> 00:27:37,650 Hoppsan. 462 00:27:37,650 --> 00:27:40,495 463 00:27:40,495 --> 00:27:41,120 Och nu kör vi. 464 00:27:41,120 --> 00:27:44,550 >> Så det här är faktiskt bara en webbtjänst som visar 465 00:27:44,550 --> 00:27:46,240 vilken behållare det som serveras från. 466 00:27:46,240 --> 00:27:50,450 Så du kan se att det är från container a9f. 467 00:27:50,450 --> 00:27:52,850 Och här är det namn på behållaren. 468 00:27:52,850 --> 00:27:56,550 Så ni kan se hur snabbt det var faktiskt inte bara dra utan också 469 00:27:56,550 --> 00:28:00,440 distribuera denna behållare. 470 00:28:00,440 --> 00:28:05,070 >> Nu är nästa steg att undersöka Dockerfiles 471 00:28:05,070 --> 00:28:09,430 och hur vi kan faktiskt bygga nya bilder. 472 00:28:09,430 --> 00:28:15,250 Jag kommer bara att gå och hämta klon, en smaka på Dockerfile baserat på den tidigare 473 00:28:15,250 --> 00:28:17,755 diagram, den som Apache och PHP. 474 00:28:17,755 --> 00:28:26,740 475 00:28:26,740 --> 00:28:28,140 Förhoppningsvis Jag minns min repa. 476 00:28:28,140 --> 00:28:36,410 477 00:28:36,410 --> 00:28:38,750 >> Så jag har min förvaret just nu. 478 00:28:38,750 --> 00:28:43,080 Och du kommer att se detta mycket faktiskt. 479 00:28:43,080 --> 00:28:45,110 Jag har inte installerat träd. 480 00:28:45,110 --> 00:28:48,700 >> Så i princip du kommer att se hur din källkod dokumentation runt 481 00:28:48,700 --> 00:28:51,240 det, och sedan en Dockerfile på hur man faktiskt paketera det. 482 00:28:51,240 --> 00:28:57,970 Så det är bara ett urval PHP som ekar hej CS50. 483 00:28:57,970 --> 00:29:01,550 >> Så om jag vill köra den, Jag ska göra docker bygga. 484 00:29:01,550 --> 00:29:03,370 Jag måste bygga upp det först. 485 00:29:03,370 --> 00:29:12,420 Jag kommer att kalla den demo_cs50. 486 00:29:12,420 --> 00:29:16,470 Och du behöver en tagg i det också. 487 00:29:16,470 --> 00:29:19,802 Så låt oss kalla det v1 prick. 488 00:29:19,802 --> 00:29:21,760 Så som jag beskrev tidigare, vad jag gör i dag 489 00:29:21,760 --> 00:29:26,840 är Jag säger Docker gå användningen that-- faktiskt, förlåt, min dåliga. 490 00:29:26,840 --> 00:29:29,450 491 00:29:29,450 --> 00:29:32,500 Vi ville inte ta en titt vid Dockerfile själv. 492 00:29:32,500 --> 00:29:39,020 Så det enda i här är index.php liksom Readme-filen 493 00:29:39,020 --> 00:29:39,810 och en Dockerfile. 494 00:29:39,810 --> 00:29:44,600 >> Så om du tar en titt på den Dockerfile, så det är 495 00:29:44,600 --> 00:29:47,150 mycket liknar vad Jag beskrev tidigare. 496 00:29:47,150 --> 00:29:51,220 Det är bara ett gäng steg som Docker exekverar 497 00:29:51,220 --> 00:29:56,330 genom att skapa och riva ner behållare och [? räkna?] dem till en bild. 498 00:29:56,330 --> 00:29:59,570 >> Och i princip kan du see-- [OHÖRBAR] det här-- 499 00:29:59,570 --> 00:30:04,340 men detta är från den lokala repa. 500 00:30:04,340 --> 00:30:06,410 Det kommer att gå och greppa index.php. 501 00:30:06,410 --> 00:30:10,970 Så det är den enda källkod som är faktiskt en del av din ansökan. 502 00:30:10,970 --> 00:30:16,800 Allt detta är i grunden operativsystem VVS, 503 00:30:16,800 --> 00:30:21,460 få rätt paket och Apache och PHP, och allt. 504 00:30:21,460 --> 00:30:26,950 Men detta är faktiskt tar index.php och begår den in i behållaren, 505 00:30:26,950 --> 00:30:28,210 in i bilden. 506 00:30:28,210 --> 00:30:33,120 >> Så om du går vidare och köra kommandot genom att göra följande, 507 00:30:33,120 --> 00:30:36,155 det going-- faktiskt, Detta kan ta en bit. 508 00:30:36,155 --> 00:30:40,870 509 00:30:40,870 --> 00:30:42,455 Förhoppningsvis kommer det inte tar alltför lång tid. 510 00:30:42,455 --> 00:30:45,129 511 00:30:45,129 --> 00:30:46,170 Så du kan se stegen. 512 00:30:46,170 --> 00:30:49,320 Och jag uppmuntrar dig att gå tillbaka hem idag och prova det. 513 00:30:49,320 --> 00:30:51,280 Och Mano kommer att beskriva exakt hur du gör det. 514 00:30:51,280 --> 00:30:57,810 Men det är riktigt bra att se exakt vad som händer bakom kulisserna. 515 00:30:57,810 --> 00:31:02,420 Men det är löjligt enkelt att bygga bilder och distribuera dem med Docker. 516 00:31:02,420 --> 00:31:12,170 517 00:31:12,170 --> 00:31:14,050 >> Det tar en bit längre än förväntat. 518 00:31:14,050 --> 00:31:29,085 519 00:31:29,085 --> 00:31:32,690 >> Låt oss se vad som händer när du-- svalna. 520 00:31:32,690 --> 00:31:36,260 Så som ni kan se, vart och ett av dessa steg representerar linjer i Dockerfile. 521 00:31:36,260 --> 00:31:42,570 Och det visar här att det framgångsrikt byggt den här bilden. 522 00:31:42,570 --> 00:31:46,480 >> Så om jag gör docker bilder, kommer jag att se alla bilder som jag har lokalt. 523 00:31:46,480 --> 00:31:52,160 Och en av dem kallas min användarnamn och namnet på bilden, 524 00:31:52,160 --> 00:31:56,050 och märket representing-- främst är det en version tag. 525 00:31:56,050 --> 00:31:58,040 >> Så nu om jag vill köra det, jag gör docker körning. 526 00:31:58,040 --> 00:32:06,040 527 00:32:06,040 --> 00:32:14,960 Och jag vill bara göra en -d -P. Gör v1. 528 00:32:14,960 --> 00:32:18,500 Så jag kan se nu när jag har två behållare kör, det som jag bara 529 00:32:18,500 --> 00:32:21,230 skapas och hej Docker en som jag fick sist. 530 00:32:21,230 --> 00:32:24,320 >> Och du kan se här att det tilldelats en annan port. 531 00:32:24,320 --> 00:32:30,710 Så om jag går till samma IP men tilldela den en annan port-- förhoppningsvis jag inte. 532 00:32:30,710 --> 00:32:33,060 Så nu är detta program att jag bara sättas in. 533 00:32:33,060 --> 00:32:35,980 534 00:32:35,980 --> 00:32:43,900 >> Om jag vill göra ändringar, jag kan snabbt ändra källkoden 535 00:32:43,900 --> 00:32:49,050 och gör följande. 536 00:32:49,050 --> 00:32:55,170 Låt oss göra hello Harvard. 537 00:32:55,170 --> 00:32:57,989 Så nu vad som händer hända är att jag är 538 00:32:57,989 --> 00:32:59,905 kommer att märka det med en olika version-- oh, 539 00:32:59,905 --> 00:33:03,080 inte detta guy-- märka det med en annan version. 540 00:33:03,080 --> 00:33:05,735 Och du kommer att see-- gör ni förväntar 541 00:33:05,735 --> 00:33:11,020 den för att ta samma tid att bygga det en andra gång eller inte? 542 00:33:11,020 --> 00:33:14,470 Okej, och alla vet varför? 543 00:33:14,470 --> 00:33:15,020 Tala högre. 544 00:33:15,020 --> 00:33:16,350 >> PUBLIK: [OHÖRBAR] 545 00:33:16,350 --> 00:33:19,830 >> NICOLA Kabar: Det är i princip vi bara ändra en av de senare stegen. 546 00:33:19,830 --> 00:33:23,110 Och därför kommer att använda cache och använda vart och ett av dessa skikt. 547 00:33:23,110 --> 00:33:27,080 Och det är verkligen en del av killer funktioner i Docker 548 00:33:27,080 --> 00:33:32,930 är hur det faktiskt utnyttjar och återanvändningar tar över 549 00:33:32,930 --> 00:33:36,950 din disk för samma exakta bitar av information. 550 00:33:36,950 --> 00:33:40,700 >> Så om vi gör samma sak, Det tog bara ett par sekunder. 551 00:33:40,700 --> 00:33:48,860 Om vi ​​vill redeploy-- så nu Jag bör ha tre containrar. 552 00:33:48,860 --> 00:33:56,160 Men detta är att serveras på the-- sju en. 553 00:33:56,160 --> 00:33:58,860 Så nu är det den tredje behållaren. 554 00:33:58,860 --> 00:34:02,580 Alla förstår vad jag gjorde just här? 555 00:34:02,580 --> 00:34:06,320 >> Så nu om du vill dela denna behållare riktigt snabbt med dina vänner, 556 00:34:06,320 --> 00:34:14,840 Du kan bara göra docker skjuta namn på behållaren, förhoppningsvis. 557 00:34:14,840 --> 00:34:20,130 Så nu det kommer att driva det att-- Jag är inte loggat in här. 558 00:34:20,130 --> 00:34:33,511 559 00:34:33,511 --> 00:34:34,219 Förlåt för det. 560 00:34:34,219 --> 00:34:39,219 Men jag tänker inte felsöka nu. 561 00:34:39,219 --> 00:34:42,780 Men i princip att ett kommando är bara att gå upp driva det. 562 00:34:42,780 --> 00:34:45,670 Och du kommer att kunna se det om du går till Docker Hub 563 00:34:45,670 --> 00:34:48,587 Och du loggar in, är du kommer att kunna se den. 564 00:34:48,587 --> 00:34:50,420 Och då kan du bara peka vem går 565 00:34:50,420 --> 00:34:52,750 att använda den bilden för att gå och dra. 566 00:34:52,750 --> 00:34:55,460 Och de kan använda den. 567 00:34:55,460 --> 00:34:57,760 >> Med detta, förhoppningsvis Jag slags visat 568 00:34:57,760 --> 00:35:01,230 hur lätt det är att arbeta med Docker. 569 00:35:01,230 --> 00:35:06,610 Och jag ska bara ge tillbaka till Mano. 570 00:35:06,610 --> 00:35:11,760 Och han ska ta det från här. 571 00:35:11,760 --> 00:35:13,990 >> MANO MARKS: Okej tack, tack Nico. 572 00:35:13,990 --> 00:35:18,700 573 00:35:18,700 --> 00:35:20,614 Än sen då? 574 00:35:20,614 --> 00:35:24,410 Så en av de saker jag ville göra är att sätta ihop 575 00:35:24,410 --> 00:35:28,820 varför detta är ett important-- varför Docker och varför 576 00:35:28,820 --> 00:35:33,000 behållare är sådan viktig nyhet, 577 00:35:33,000 --> 00:35:36,890 ett nytt sätt att faktiskt göra programvara. 578 00:35:36,890 --> 00:35:41,300 >> Och innan jag gör, jag kommer att bara införa några statistik. 579 00:35:41,300 --> 00:35:42,790 Jag tänker inte läsa alla dessa. 580 00:35:42,790 --> 00:35:52,540 Men detta visar dig en hel del om hur populärt det är i samhället. 581 00:35:52,540 --> 00:35:56,310 Kärnan Docker teknik är öppen källkod. 582 00:35:56,310 --> 00:36:03,560 Så det är Docker Engine, komponera, Swarm, en massa andra grejer 583 00:36:03,560 --> 00:36:05,210 är all öppen källkod. 584 00:36:05,210 --> 00:36:10,590 Och vi har, vad gjorde jag säga 1.300 deltagare. 585 00:36:10,590 --> 00:36:15,630 Du ser nu, om man tittar på Antalet lediga jobb, sista gången 586 00:36:15,630 --> 00:36:19,640 vi såg, det var ungefär 43.000 jobb öppningar särskilt nämna 587 00:36:19,640 --> 00:36:22,230 förtrogenhet med Docker. 588 00:36:22,230 --> 00:36:26,450 Hundratals miljoner bilder har laddats ner från Docker Hub. 589 00:36:26,450 --> 00:36:31,870 Och, ja, mycket mer stora statistik. 590 00:36:31,870 --> 00:36:34,770 >> För den som är nyfiken, det skrevs ursprungligen på Python 591 00:36:34,770 --> 00:36:37,730 och sedan skrivas in Go. 592 00:36:37,730 --> 00:36:40,320 Och det har bara varit öppna source-- det är bara 593 00:36:40,320 --> 00:36:44,950 gått till cirka 2 och 1/2 år, vilket innebär att i 2 och 1/2 år, 594 00:36:44,950 --> 00:36:48,020 Vi har sett en enorm mängd av tillväxt och betydelse 595 00:36:48,020 --> 00:36:50,190 detta i samhället. 596 00:36:50,190 --> 00:36:52,400 Och så vill jag prata lite om varför. 597 00:36:52,400 --> 00:36:54,940 598 00:36:54,940 --> 00:36:59,880 >> Så bara för att upprepa några av Nico viktigaste punkter är Docker snabbt. 599 00:36:59,880 --> 00:37:00,630 Det är bärbar. 600 00:37:00,630 --> 00:37:02,500 Det är reproducerbar. 601 00:37:02,500 --> 00:37:06,130 Och det sätter upp en standardmiljö. 602 00:37:06,130 --> 00:37:13,370 >> Och Vad-- detta är min skit utrota monoliterna slide-- vad 603 00:37:13,370 --> 00:37:17,990 det är att hjälpa människor att göra, som en hel del av mjukvaruindustrin 604 00:37:17,990 --> 00:37:21,400 började göra i tidiga 2000-talet, går 605 00:37:21,400 --> 00:37:24,200 från dessa monolitiska enkla applikationer 606 00:37:24,200 --> 00:37:28,590 där varje beroendet måste vara testas innan hela programmet hade 607 00:37:28,590 --> 00:37:31,280 att sättas in, vilket skulle kunna innebära en webbplats 608 00:37:31,280 --> 00:37:36,240 endast fick utplacerade gång var tredje månad, eller mer, 609 00:37:36,240 --> 00:37:42,650 till en mycket mer service orienterad arkitektur 610 00:37:42,650 --> 00:37:46,090 eller componentized olika typ av applikationsarkitektur. 611 00:37:46,090 --> 00:37:48,610 Och så tillåter dessa typ av arkitekturer 612 00:37:48,610 --> 00:37:52,250 att dra nytta av Docker att köra i dessa tre 613 00:37:52,250 --> 00:37:58,450 huvudsakliga utvecklingsområden, som är utveckling skriver faktiska koden, 614 00:37:58,450 --> 00:38:00,140 testa din kod, och distribuera den. 615 00:38:00,140 --> 00:38:03,000 616 00:38:03,000 --> 00:38:05,420 >> Så varför är detta viktigt? 617 00:38:05,420 --> 00:38:09,920 Om du är en-- Låt mig ge ett exempel. 618 00:38:09,920 --> 00:38:13,600 Om du är en webbplats enhet utvecklare, du är 619 00:38:13,600 --> 00:38:19,020 utveckla en webbplats som är baserat på databas som David producerade hit. 620 00:38:19,020 --> 00:38:20,490 Ledsen David, jag ringer dig. 621 00:38:20,490 --> 00:38:22,984 622 00:38:22,984 --> 00:38:24,900 Om du vill distribuera det hela, skulle du 623 00:38:24,900 --> 00:38:28,870 måste vänta enligt en traditionell monolitisk mjukvaruutveckling 624 00:38:28,870 --> 00:38:32,710 miljö, skulle du behöva vänta tills han var klar med databasen 625 00:38:32,710 --> 00:38:36,030 innan du kunde faktiskt göra eventuella ändringar på din webbplats. 626 00:38:36,030 --> 00:38:40,900 Du skulle behöva omfördela de hela programmet för att göra det. 627 00:38:40,900 --> 00:38:45,490 >> Och vad Docker hjälper dig att göra varje personen arbete med olika komponenter 628 00:38:45,490 --> 00:38:52,990 och uppdatera dem eftersom de går bara att göra Kontrollera att gränssnitten förblir detsamma. 629 00:38:52,990 --> 00:38:56,350 Så vad den har gjort är det skiftat folk 630 00:38:56,350 --> 00:39:03,950 från att göra dessa massiva monolitiska arkitekten mjukvara som 631 00:39:03,950 --> 00:39:07,610 utplacerade varje månad till en kontinuerlig integration och kontinuerlig utveckling 632 00:39:07,610 --> 00:39:08,490 miljö. 633 00:39:08,490 --> 00:39:12,580 >> Nu är detta inte unikt för Docker, men Docker gör det så mycket lättare, 634 00:39:12,580 --> 00:39:16,620 vilket innebär att du är i grund och botten ständigt distribuera. 635 00:39:16,620 --> 00:39:20,690 Vi pratar med företag som är driftsätta applikationer offentliga fasad 636 00:39:20,690 --> 00:39:30,180 tusentals gånger om dagen eftersom de ser värdet i att bara göra 637 00:39:30,180 --> 00:39:33,740 små förändringar, och så länge eftersom det går genom tester, 638 00:39:33,740 --> 00:39:35,900 låter det gå ut i produktion. 639 00:39:35,900 --> 00:39:41,890 Nico var alltid talar om för mig tidigare att i många miljöer, 640 00:39:41,890 --> 00:39:46,580 standard livscykel behållaren mäts i sekunder, 641 00:39:46,580 --> 00:39:50,460 medan en virtuell maskin kan mätas i månader. 642 00:39:50,460 --> 00:39:54,590 643 00:39:54,590 --> 00:39:58,690 >> Jag ville ta en liten sväng här eftersom jag är 644 00:39:58,690 --> 00:40:00,170 vid en läroanstalt. 645 00:40:00,170 --> 00:40:06,670 Jag ville ge ett exempel på hur detta fungerar i en pedagogisk forskning 646 00:40:06,670 --> 00:40:07,670 situation. 647 00:40:07,670 --> 00:40:10,930 Så det finns en organisation kallade bioboxes. 648 00:40:10,930 --> 00:40:15,450 Bioboxes gör DNA analys för forskare. 649 00:40:15,450 --> 00:40:22,029 >> Nu vad de fann var att när en researcher-- och detta är inte 650 00:40:22,029 --> 00:40:24,070 fel av någon särskild researcher-- men när 651 00:40:24,070 --> 00:40:31,240 en forskare utplacerade en algoritm för att analysera, 652 00:40:31,240 --> 00:40:36,670 På ett särskilt sätt, ett DNA-prov, de skulle skriva mjukvaran, 653 00:40:36,670 --> 00:40:39,980 offentliggöra detta, kanske till GitHub eller någon annanstans, 654 00:40:39,980 --> 00:40:42,680 och sedan de gjordes. 655 00:40:42,680 --> 00:40:47,440 >> Väl problemet var att det var inte nödvändigtvis reproducerbar. 656 00:40:47,440 --> 00:40:51,610 Eftersom de för att förstå programvaran, 657 00:40:51,610 --> 00:40:54,830 de skulle ställas upp för exakta utvecklingsmiljö 658 00:40:54,830 --> 00:41:00,460 att denna forskare används, vanligtvis sin bärbara dator eller en server, eller en data 659 00:41:00,460 --> 00:41:04,280 centrum att de använde. 660 00:41:04,280 --> 00:41:11,530 Och därför var det mycket svårt att reproducera forskningsresultaten när 661 00:41:11,530 --> 00:41:16,910 analysera DNA-prov för att se på saker som incidence-- 662 00:41:16,910 --> 00:41:23,830 jämföra förekomsten av hjärtinfarkt baserat på vissa gener är närvarande, 663 00:41:23,830 --> 00:41:28,900 till exempel, eller cancerrisken, eller någon av de andra typer av saker. 664 00:41:28,900 --> 00:41:33,900 >> Så vad de gjorde i stället var de började skapa behållare. 665 00:41:33,900 --> 00:41:39,380 Och du kan gå till bioboxes.org, det är en stor organisation. 666 00:41:39,380 --> 00:41:43,900 Och vad de gör är att de producerar behållare baserat på forskning. 667 00:41:43,900 --> 00:41:46,840 Och sedan när någon skickar i deras urval, kan de köra den. 668 00:41:46,840 --> 00:41:52,770 Och det har allt miljön behövs för att köra den algoritmen 669 00:41:52,770 --> 00:41:55,370 och de resultat. 670 00:41:55,370 --> 00:41:58,250 Och de fann att de är mycket mer sannolikt och mycket 671 00:41:58,250 --> 00:42:01,300 snabbare kunna ger resultat för människor. 672 00:42:01,300 --> 00:42:06,860 >> Och i själva verket är vad folk gör kör sin egen analys av DNA, 673 00:42:06,860 --> 00:42:11,220 skicka det i till bioboxes, och sedan Biobox tar bara data, 674 00:42:11,220 --> 00:42:15,350 körs mot sorten av olika behållare 675 00:42:15,350 --> 00:42:19,030 att se olika resultat baserat på olika forskning. 676 00:42:19,030 --> 00:42:21,860 Så det är en mycket kraftfull sätt på vilket forskare 677 00:42:21,860 --> 00:42:28,070 kan göra en enda instans som gör andra människor för att försöka återskapa 678 00:42:28,070 --> 00:42:28,650 resultaten. 679 00:42:28,650 --> 00:42:31,710 680 00:42:31,710 --> 00:42:34,360 >> Så hur kommer du igång? 681 00:42:34,360 --> 00:42:37,950 682 00:42:37,950 --> 00:42:39,800 Vi är väl stöds på Linux. 683 00:42:39,800 --> 00:42:43,070 Så om du vill installera något på Linux, 684 00:42:43,070 --> 00:42:45,620 du använder din vanliga pakethanterare att installera. 685 00:42:45,620 --> 00:42:47,600 Om du använder en Debian, är det apt get. 686 00:42:47,600 --> 00:42:50,500 CentOS är yum. 687 00:42:50,500 --> 00:42:53,500 Fedora Red Hat är rpm-- Jag minns inte. 688 00:42:53,500 --> 00:42:56,070 Hur som helst, det är allt. 689 00:42:56,070 --> 00:42:59,610 Vi stöder ett stort utbud av Linux-distributioner. 690 00:42:59,610 --> 00:43:01,150 Du kan kontrollera dem ut. 691 00:43:01,150 --> 00:43:06,370 >> Vi har också alternativ så att du kan köras på Mac eller Windows. 692 00:43:06,370 --> 00:43:10,670 Nu Nico nämnde tidigare att det var bara stöds på Linux. 693 00:43:10,670 --> 00:43:18,180 Det är sant, eftersom det behöver en Linux-kärna. 694 00:43:18,180 --> 00:43:20,540 Men kan du köra i en virtuell maskin. 695 00:43:20,540 --> 00:43:25,290 Och vad Docker Toolbox gör, som du kan ladda ner, 696 00:43:25,290 --> 00:43:27,610 Det ger dig den virtuella maskinen. 697 00:43:27,610 --> 00:43:37,260 >> Så bara en snabb 48 andra, tror jag, ladda ner. 698 00:43:37,260 --> 00:43:40,670 Du söker bara på Docker Verktygslåda, ladda ner den till Mac, 699 00:43:40,670 --> 00:43:43,910 och denna del är av Kursen rusade upp för vem 700 00:43:43,910 --> 00:43:47,620 vill titta på en nedladdningssignal? 701 00:43:47,620 --> 00:43:54,190 Standard Mac installation, och då är du 702 00:43:54,190 --> 00:43:59,795 kommer att se Jerome sätta i sitt lösenord. 703 00:43:59,795 --> 00:44:00,670 Det är väldigt spännande. 704 00:44:00,670 --> 00:44:03,510 705 00:44:03,510 --> 00:44:06,230 Och sedan installerar en massa verktyg. 706 00:44:06,230 --> 00:44:10,010 Och i synnerhet kommer det installera en kommandorad. 707 00:44:10,010 --> 00:44:14,220 Och då kan du se Jerome testar sina bilder. 708 00:44:14,220 --> 00:44:19,050 709 00:44:19,050 --> 00:44:22,640 >> Och sedan utifrån detta, du kan se att YouTube 710 00:44:22,640 --> 00:44:27,420 anser att Nico är intresserad av Star Wars, Jimmy Kimmel show, 711 00:44:27,420 --> 00:44:29,020 och jag tror att Ellen. 712 00:44:29,020 --> 00:44:34,130 Jag tror att sista är ett klipp från ett Ellen show. 713 00:44:34,130 --> 00:44:37,760 >> Så Docker Toolbox men kommer med mer än bara Docker Machine. 714 00:44:37,760 --> 00:44:39,840 Så Docker Machine är det som hjälper 715 00:44:39,840 --> 00:44:43,710 du ställa in en virtuell maskin på din Windows 716 00:44:43,710 --> 00:44:52,080 eller Mac-- Windows box eller din Mac box-- och hjälper dig att göra provisionering, 717 00:44:52,080 --> 00:44:54,040 >> Men det kommer också med Swarm och komponera, 718 00:44:54,040 --> 00:45:00,840 som är utformade för att hjälpa dig att göra stora skala installationer av din ansökan. 719 00:45:00,840 --> 00:45:04,000 Så om du vill hantera kluster av noder, 720 00:45:04,000 --> 00:45:08,450 kluster av containrar, komponera och Swarm är rätt väg att gå om det. 721 00:45:08,450 --> 00:45:11,430 >> Och naturligtvis det kommer med Docker Motor och Kitematic, 722 00:45:11,430 --> 00:45:13,250 vilket är denna skrivbords GUI. 723 00:45:13,250 --> 00:45:17,060 Jag bör också nämna Docker kansli, som inte ingår i verktygslådan, 724 00:45:17,060 --> 00:45:23,150 men det är ett sätt för dig att köra din egen register av Docker bilder som Docker 725 00:45:23,150 --> 00:45:28,970 Hub, men du kan också använda Docker Hub som ett sätt att göra det. 726 00:45:28,970 --> 00:45:32,955 >> Och tomten twist, du ser den körs i en behållare. 727 00:45:32,955 --> 00:45:34,830 Och det är hur vi är distribuera våra diabilder. 728 00:45:34,830 --> 00:45:38,610 Hela denna presentation är faktiskt en HTML slide däck. 729 00:45:38,610 --> 00:45:43,170 Och den körs i en behållare, som du kan få by-- 730 00:45:43,170 --> 00:45:45,596 >> NICOLA Kabar: Ja, så det är kör på heltid på min Max. 731 00:45:45,596 --> 00:45:47,540 Och jag presenterar därifrån. 732 00:45:47,540 --> 00:45:50,910 Och du bara göra Docker efter du har installerat Toolbox. 733 00:45:50,910 --> 00:45:57,340 Du kan bara göra en hamnarbetare körning och få det, och använda bilderna. 734 00:45:57,340 --> 00:45:58,830 >> MANO MARKS: Och det är det. 735 00:45:58,830 --> 00:46:02,160 Så vi tackar er alla för att ni kom. 736 00:46:02,160 --> 00:46:03,990 Och vi är glada att svara på frågor. 737 00:46:03,990 --> 00:46:07,810 Jag bör nämna innan någon lämnar det finns T-shirts där borta. 738 00:46:07,810 --> 00:46:10,940 Tyvärr någon som tittar detta på Livestream eller video, 739 00:46:10,940 --> 00:46:12,820 men vi har Docker T-shirts där borta. 740 00:46:12,820 --> 00:46:16,250 Och vi vet Docker studenter, och enligt min erfarenhet, 741 00:46:16,250 --> 00:46:18,940 professorer också, liksom gratis kläder. 742 00:46:18,940 --> 00:46:22,490 >> Så tack alla för att ni kom ut. 743 00:46:22,490 --> 00:46:27,050 Och följ oss på Twitter om du vill, eller inte. 744 00:46:27,050 --> 00:46:27,910 Jag bryr mig inte. 745 00:46:27,910 --> 00:46:29,430 Följ också Docker på Twitter. 746 00:46:29,430 --> 00:46:31,890 Det är också intressant. 747 00:46:31,890 --> 00:46:32,990 Och då är det. 748 00:46:32,990 --> 00:46:33,490 Docker.com. 749 00:46:33,490 --> 00:46:35,410 Tack. 750 00:46:35,410 --> 00:46:39,360 >> [APPLÅDER] 751 00:46:39,360 --> 00:46:41,625