Docker: Jednostavan kao gradnja, trčanje, gotovo!

Docker u posljednje vrijeme puno čuje, i to s dobrim razlogom. Usluga kontejnerizacije čini postavljanje mikro usluga lakim i stabilnim, jer svaka usluga može pokretati OS u svom virtualnom okruženju. To znači potpunu kompatibilnost ... nema više brige oko verzija OS-a, ovisnosti i razlika između vaših razvojnih i proizvodnih strojeva! I za kraj, lagan je tako da možete pokretati više Dockerovih spremnika na istom stroju (instanca EC2). Danas ćemo naučiti kako postaviti i rasporediti Docker na Amazon EC2 u 3 jednostavna koraka!

Prije nego što započnemo, pogledajte ovaj dijagram na visokoj razini (zahvaljujući infoworld.com).

Na lijevoj strani je postavka vašeg tradicionalnog virtualnog stroja pomoću hipervizora. Hipervizor je jednostavno vaš VM upravitelj odgovoran za dodjelu hardverskih resursa svakom virtualnom OS-u. Ako svakom OS-u za goste treba 1 GB memorije, a domaćin koristi 1 GB memorije, za postavljanje s lijeve strane potrebno je ukupno 4 GB.

S desne je strane postavljen spremnik koji bi pokrenuo kontejnerski stroj poput Dockera. Najznačajnija je razlika u tome što je mehanizam spremnika lakši jer može dijeliti određene hardverske resurse s glavnim OS-om, za razliku od tradicionalnih VM-ova koji zahtijevaju vlastitu zasebnu dodjelu. Ova postavka zahtijeva 1 GB za OS-a domaćina i možda 600 MB po spremniku (jer se hipotetički dijeli 300 MB s OS-om domaćina), što ukupno zahtijeva 2,8 GB. Vidite te pogodnosti? Super, sad možemo početi!

Početak rada

Unesite svoju EC2 instancu i klonirajte Kangzeroos-ES6-React-Redux-Boilerplate iz Github-a. Kôd koji vidite bit će za postavljanje ove web aplikacije, ali koraci su isti za bilo koji projekt. Nakon što ga preuzmete, idite u mapu i pronađite datoteke u nastavku. To su datoteke koje ćemo koristiti s Dockerom.

Dockerfile build.sh run.sh

Prije nego što možemo koristiti Docker, prvo ga moramo instalirati. Ispod je brz i jednostavan način za instalaciju Dockera, ali ako želite potpunu provjeru konfiguracije, službene dokumente.

$ sudo apt-get update $ sudo apt-get install docker-engine $ sudo service docker start $ sudo docker run hello-world

Posljednja naredba provjerava je li Docker uspješno pokrenut, a zatim izlazi. Ako sve ovo uspije, spremni ste za početak dockerizacije!

Korak 1: Izrada datoteke Docker

Prvi korak je konfiguriranje datoteka potrebnih za Docker kako bi sebi stvorio sliku. Docker slike su jednostavno nacrti okruženja koja želite stvoriti, dok su spremnici stvarno pokrenuto i funkcionalno okruženje u kojem će se izvršavati vaša aplikacija. U korijenu našeg direktorija aplikacije nalazi se mapa koja se zove App. Sama web aplikacija nalazi se u ovoj Appmapi, dok su sve stvari povezane s Dockerom vani. To je neophodno jer će Docker spremiti sve unutra App. Zato napravimo prvu Docker datoteku koja se zove Dockerfile(bez nastavka datoteke Dockerfile.sh, samo Dockerfile) i prošetajmo redom po njoj.

FROM ubuntu # ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install nodejs -y && apt-get install npm -y # install curl for n RUN apt-get install curl -y RUN apt-get install vim -y # obtain latest stable version of node RUN npm cache clean -f RUN npm install -g n RUN n stable # setup working directory # ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080

Prvi redak je FROM ubuntu. Svrha Dockerfileje postavljanja OS-a i programa unutar OS-a, tako da je logično da prvi redak navodi koju verziju OS-a treba koristiti. ubuntuovdje se misli na određenu sliku hostiranu na Docker Hubu, posebno na službenu Ubuntu OS sliku.

# ubuntu setup RUN apt-get update -y RUN apt-get upgrade -y RUN apt-get install curl -y RUN apt-get install vim -y

Sljedeći niz linija postavlja se u Ubuntuu. Želimo provjeriti ima li Ubuntu ažuriranja RUN apt-get update -yi nadogradnji s RUN apt-get upgrade -y... prilično standardnim stvarima za postavljanje vašeg okruženja. Također instalirajte curl RUN apt-get install curl -yi vim RUN apt-get install vim -y, oboje lijepo za opće svrhe.

# obtain latest stable version of node RUN apt-get install nodejs -y && apt-get install npm -y RUN npm cache clean -f RUN npm install -g n RUN n stable

Sljedeći niz linija je postavljanje specifično za NodeJS. Budući da želimo koristiti ES6 značajke, trebat će nam najnovija verzija NodeJS-a postignuta putem node modula n. Instalirajte NodeJS i NPM sa RUN apt-get install nodejs -y && apt-get install npm -y. Zatim očistite npm kako biste napravili mjesta za nupotrebu RUN npm cache clean -f. Instalirajte npomoću RUN npm install -g n. I na kraju, možemo pokrenuti n(najnoviju verziju NodeJS) s RUN n stable.

NodeJS je za Javascript, ali ako radite s drugim jezicima kao što je Python, instalirali biste sve programe koji su vam potrebni za pokretanje aplikacije Python.

# setup working directory ADD /App /App WORKDIR /App RUN npm install # expose port EXPOSE 8080

Posljednji dio Dockerfileje postavljanje radnog direktorija same aplikacije. ADD /App /Appuzima Appmapu s našeg stroja i kopira je u Docker spremnik. Dalje, WORKDIR /Apppostavlja Docker radni direktorij na /Apptako da se izvršavaju sve naredbe koje pokrenete unutar Dockera /App. To je potrebno za npm installinstalaciju na ispravnom mjestu (zvanom /AppDocker spremnik).

Konačno, mi RUN npm installkoji instaliramo naše NodeJS ovisnosti u naš stroj. I na kraju, eksplicitno ćemo izložiti port 8080 naše Dockerove slike EXPOSE 8080kako bi vanjski svijet mogao pristupiti našoj aplikaciji. Vanjski svijet uključuje internet, kao i druge Dockerove spremnike koji rade na istom stroju.

Korak 2: skripta izrade

docker build -t kangzeroo .

Stvorite novu datoteku u korijenskom direktoriju svoje aplikacije pod nazivom build.sh. Ovo je datoteka ljuske za izgradnju našeg Docker spremnika. Ova build.shdatoteka zapravo nije potrebna jer ovu naredbu možemo izravno pokrenuti u terminalu. Međutim, zaista je lijepo za pojednostavljivanje postupka.

Evo sloma ovog retka: docker buildje naredba koja Dockeru govori da izgradi sliku. -t kangzeroopostavlja naziv oznake Dockerove slike na kangzerookoje se kasnije možemo pozvati. Imajte na umu da, da bi imao valjano ime oznake, mora biti malim slovom i bez razmaka (koristite nazive zmijskih slova). Na kraju, .kaže Dockeru gdje treba potražiti ono Dockerfilešto je potrebno za izgradnju ( .znači ovdje).

Ako ste u EC2 instanci, možemo pokrenuti bash build.shiz korijenskog direktorija našeg projekta. Ovo će započeti postupak gradnje Dockera dok prolazi kroz korake u Dockerfilestvorenom. To bi moglo potrajati ... na kraju bi to trebalo izgledati ovako: (Ne brinite se zbog nekritičnih pogrešaka poput neobavezne ovisnosti preskočene na donjem snimku zaslona).

Sada provjerimo je li stvorena naša slika. Upišite docker imageskako biste vidjeli slike koje se trenutno izvode u našem stroju. Trebali biste vidjeti takav rezultat:

Ako želimo izbrisati ovu sliku, jednostavno upišite docker rmi kangzeroo. Ako docker imagesponovno utipkate nakon brisanja, vidjet ćete da slike više nema. Za sada ostavimo sliku jer ćemo je koristiti za izgradnju Docker spremnika za pokretanje naše aplikacije.

Korak 3: Pokreni skriptu

Sad kad je naša slika stvorena, napravimo run.sh. Sjetite se da su Docker slike jednostavno nacrti okruženja koja želite stvoriti. Spremnici su stvarno pokrenuto i funkcionalno okruženje u kojem će se izvršavati vaša aplikacija. Tako run.shće naše slike pretvoriti u spremnike. Evo kako run.shizgleda:

docker run -d -it -p 80:8080 --name=kz kangzeroo npm run ec2 -- --host=0.0.0.0

Krenimo kroz ovu kratku skriptu. docker runje naredba za pokretanje spremnika sa slike. -d -itje naredba za daemon(izvršavanje zadataka u pozadini) i interactive terminal(daje nam način interakcije sa spremnikom). Ako izostavite -d, spremnik dockera neće raditi u pozadini i vidjet ćete izlazne zapise iz aplikacije. -p 80:8080preslikava priključak 80 našeg stroja na priključak 8080 spremnika. Podsjetimo da smo ranije naveli EXPOSE 8080u našem Dockerfile. Dakle, sada primamo dolazne veze na priključku 80 na našem računalu (priključak 80 zadani je za http) i preusmjeravamo ih na priključak 8080 našeg spremnika. Ako vaša aplikacija nije web stranica, tada možete izuzeti preslikavanje tih priključaka. --name=kzdaje našem spremniku ime kz. Konačno, kangzeroo npm run ec2odnosi se na našu sliku tzvkangzerooi npm run ec2naredba je specifična za ovu aplikaciju (za pokretanje aplikacije). Posljednji dio — — host=0.0.0.0postavlja tablu da radi na 0.0.0.0 umjesto localhost (Ovo je također specifično za pločicu). Da imate pokrenutu pozadinsku aplikaciju Python, to bi izgledalo docker run -d -it --name=kz kangzeroo python app.py.

Sjajno! Spremite ovu datoteku i pokrenite je s bash run.sh. Zatim provjerite radi li spremnik tipkanjem docker ps -a. Evo kako bi to trebalo izgledati:

Vaša je aplikacija sada na mreži i radi u spremniku Docker! Provjerite radi li ... za ovaj obrazac možete provjeriti putem web preglednika.

I djeluje! Izvrsno, sada isključimo naš Docker spremnik. Upišite docker ps -akako biste ponovno vidjeli sve spremnike. Upišite docker stop kzi zaustavlja spremnik. Ako upišete, docker psspremnik više nećete vidjeti, ali vidjet ćete ga ako upišete docker ps -a( -aznači sve, uključujući pokretanje, a ne pokretanje spremnika. Izostavite -aako želite vidjeti samo pokrenute spremnike). Da biste uklonili spremnik, upišite docker rm kz. Ako upišete, docker ps -aspremnik više nećete vidjeti.

Zaključak

To je bio Docker! Kad se sve uzme u obzir, Docker je puno jednostavniji od postavljanja VM-a temeljenog na hipervizoru i možete vidjeti kako arhitekturom mikroservisa postaje puno lakše upravljati kada usvojite spremnike. Uz naše Dockerfile, build.sha run.shdatoteke stvorene u EC2, možemo sažeti 3 koraka za trčanje lučki radnik iz naše aplikacije korijenski direktorij:

$ bash build.sh $ bash run.sh $ exit

To je to! Docker: jednostavan kao gradnja, trčanje, gotovo!

Bonus tablica s varalicama

Budući da je ovaj vodič podučavao Docker korak po korak, mislim da je prikladno ostaviti vas pregledom svih naredbi Docker koje će vam trebati za opću namjenu.

$ docker images // To view install images $ docker rmi  // To remove an installed image $ docker ps -a // To view all docker containers $ docker stop  // To stop a docker container $ docker rm  // To remove a docker container $ docker exec -it  bash // Execute into container and run bash * If you want to see the log output from a docker container, omit the -d from run.sh
Te su se metode djelomično koristile u postavljanju renthero.ca