Доцкер: Лако као градња, трчање, готово!

Доцкер је у последње време почео да бруји, и то са добрим разлогом. Услуга контејнеризације чини постављање микро услуга лаким и стабилним, јер свака услуга може да покреће ОС у свом виртуелном окружењу. То значи потпуну компатибилност ... нема више бриге око верзија ОС-а, зависности и разлика између ваших развојних и производних машина! И за крај, лаган је тако да можете покретати више Доцкер контејнера на истој машини (ЕЦ2 инстанца). Данас ћемо научити како да поставимо и поставимо Доцкер на Амазон ЕЦ2 у 3 једноставна корака!

Пре него што започнемо, погледајте овај дијаграм на високом нивоу (захваљујући инфоворлд.цом).

На левој страни је ваша традиционална поставка виртуелне машине помоћу хипервизора. Хипервизор је једноставно ваш ВМ менаџер одговоран за додељивање хардверских ресурса сваком виртуелном ОС-у. Ако сваком гостујућем ОС треба 1 ГБ меморије, а домаћин користи 1 ГБ меморије, тада би за подешавање на левој страни требало укупно 4 ГБ.

На десној страни је поставка контејнера, која би покренула контејнерски мотор као што је Доцкер. Најзначајнија разлика је у томе што је механизам контејнера лакши јер може да дели одређене хардверске ресурсе са својим ОС-ом домаћина, за разлику од традиционалних ВМ-а који захтевају сопствену одвојену алокацију. За ово подешавање потребно је 1 ГБ за ОС домаћина и можда 600 МБ по контејнеру (јер се хипотетички дели 300 МБ за ОС ОС), што укупно захтева 2.8 ГБ. Видите те погодности? Супер, сад можемо да почнемо!

Почетак

Унесите своју ЕЦ2 инстанцу и клонирајте Кангзероос-ЕС6-Реацт-Редук-Боилерплате из Гитхуб-а. Код који видите биће за подешавање ове веб апликације, али кораци су исти за било који пројекат. Када га преузмете, идите у фасциклу и пронађите доње датотеке. Ово су датотеке које ћемо користити са Доцкером.

Dockerfile build.sh run.sh

Да бисмо могли да користимо Доцкер, прво га морамо инсталирати. Испод је брз и једноставан начин за инсталацију Доцкера, али ако желите потпуну проверу конфигурације, званичне документе.

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

Последња команда проверава да ли је Доцкер успешно покренут, а затим излази. Ако све ово успе, спремни сте за покретање Доцкеризинга!

Корак 1: Изградња Доцкер датотеке

Први корак је конфигурисање датотека потребних за Доцкер да би себи створио слику. Доцкер слике су једноставно нацрти окружења која желите да креирате, док су контејнери стварно покренуто и функционално окружење у којем ће се извршавати ваша апликација. У корену нашег директоријума апликација налази се фасцикла која се зове App. Сама веб апликација се налази у овој Appфасцикли, док су све ствари повезане са Доцкером споља. Ово је неопходно јер ће Доцкер контејнером све садржати унутра App. Дакле, хајде да прво докер фајл под називом Dockerfile(без екстензија датотеке Dockerfile.sh, само Dockerfile) и шетњу кроз њега линија по линија.

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

Прва линија је FROM ubuntu. Сврха Dockerfileје подешавање ОС-а и програма унутар ОС-а, тако да има смисла да прва линија наводи коју верзију ОС-а треба користити. ubuntuовде се говори о одређеној слици хостованој на Доцкер Хуб-у, конкретно о службеној Убунту ОС слици.

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

Следећи скуп линија је подешавање у оквиру Убунту-а. Желимо да проверимо да ли постоје ажурирања за Убунту RUN apt-get update -yи надоградње са RUN apt-get upgrade -y... прилично стандардним стварима за подешавање вашег окружења. Такође инсталирајте цурл RUN apt-get install curl -yи вим RUN apt-get install vim -y, обоје лепо за опште сврхе.

# 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

Следећи скуп линија је подешавање специфично за НодеЈС. С обзиром да желимо да користимо ЕС6 функције, требат ће нам најновија верзија НодеЈС-а постигнута преко ноде модула n. Инсталирајте НодеЈС и НПМ са RUN apt-get install nodejs -y && apt-get install npm -y. Затим очистите нпм да бисте направили места за nупотребу RUN npm cache clean -f. Инсталирајте nпомоћу RUN npm install -g n. И на крају, можемо покренути n(најновију верзију НодеЈС) са RUN n stable.

НодеЈС је за Јавасцрипт, али ако радите са другим језицима као што је Питхон, инсталирали бисте све програме који су вам потребни за покретање апликације Питхон.

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

Последњи део Dockerfileје подешавање радног директорија саме апликације. ADD /App /Appузима Appфасциклу са наше машине и копира је у Доцкер контејнер. Даље, WORKDIR /Appпоставља Доцкер радни директориј на /Appтако да се извршавају све наредбе које покренете унутар Доцкера /App. Ово је потребно за npm installинсталацију на тачно место ( /Appзвано Доцкер контејнер).

Коначно, ми RUN npm installкоји инсталирамо наше НодеЈС зависности у нашу машину. И на крају, експлицитно ћемо изложити порт 8080 наше Доцкер слике EXPOSE 8080како би спољни свет могао да приступи нашој апликацији. Спољни свет укључује интернет, као и друге Доцкер контејнере који раде на истој машини.

Корак 2: Скрипта за изградњу

docker build -t kangzeroo .

Направите нову датотеку у главном директоријуму апликације под називом build.sh. Ово је датотека љуске за изградњу нашег Доцкер контејнера. Ова build.shдатотека заправо није потребна јер ову наредбу можемо директно покренути у терминалу. Међутим, заиста је лепо поједноставити поступак.

Ево слома ове линије: docker buildје наредба која Доцкеру говори да направи слику. -t kangzerooпоставља име ознаке слике Доцкер на kangzerooкоје се касније можемо позвати. Имајте на уму да, да би имао исправно име ознаке, мора бити малим словом и без размака (користите називе змија-случај). На крају, .каже Доцкер-у где да тражи оно Dockerfileшто је потребно за изградњу ( .значи овде).

Ако се налазите у инстанци ЕЦ2, можемо да покренемо bash build.shиз основног директоријума нашег пројекта. Ово ће започети процес израде Доцкера док пролази кроз кораке које Dockerfileсмо креирали. То би могло потрајати ... на крају би требало да изгледа овако: (Не брините због некритичних грешака као што је необавезна зависност прескочена на доњем снимку екрана).

Сада проверимо да ли је наша слика створена. Откуцајте docker imagesда бисте видели слике које се тренутно покрећу у нашој машини. Требали бисте видети овакав резултат:

Ако желимо да избришемо ову слику, једноставно откуцајте docker rmi kangzeroo. Ако docker imagesпоново куцате након брисања, видећете да слике више нема. За сада оставимо слику јер ћемо је користити за изградњу Доцкер контејнера за покретање наше апликације.

Корак 3: Покрени скрипту

Сада када је наша слика створена, направимо run.sh. Подсетите се да су Доцкер слике једноставно нацрти окружења која желите да креирате. Контејнери су стварно покренуто и функционално окружење у којем ће се извршавати ваша апликација. Тако run.shће наше слике претворити у контејнере. Ево како то run.shизгледа:

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

Кренимо кроз овај кратки сценарио. docker runје наредба за покретање контејнера са слике. -d -itје наредба за daemon(покретање задатака у позадини) и interactive terminal(даје нам начин интеракције са контејнером). Ако изоставите, -dконтејнер доцкера неће радити у позадини и видећете излаз из апликације из дневника. -p 80:8080пресликава порт 80 наше машине у порт 8080 контејнера. Подсетимо се да смо раније навели EXPOSE 8080у нашем Dockerfile. Дакле, сада примамо долазне везе на порт 80 наше машине (порт 80 је подразумевани за хттп) и преусмеравамо их на порт нашег контејнера 8080. Ако ваша апликација није веб страница, онда можете изузети ово мапирање порта. --name=kzдаје име нашем контејнеру kz. Коначно, kangzeroo npm run ec2односи се на нашу слику тзвkangzerooи npm run ec2команда је специфична за ову апликацију за пример (за покретање апликације). Последњи део — — host=0.0.0.0поставља таблу да ради на 0.0.0.0 уместо лоцалхост (Ово је такође специфично за плочицу). Да имате покренуту позадинску апликацију Питхон, то би изгледало docker run -d -it --name=kz kangzeroo python app.py.

Сјајно! Сачувајте ову датотеку и покрените је са bash run.sh. Затим куцањем проверите да ли је контејнер покренут docker ps -a. Овако би требало да изгледа:

Ваша апликација је сада на мрежи и ради у Доцкер контејнеру! Проверите да ли ради ... за овај пример можете проверити из веб прегледача.

И успева! Одлично, сада искључимо наш Доцкер контејнер. Откуцајте docker ps -aда бисте поново видели све контејнере. Укуцајте docker stop kzи заустави контејнер. Ако куцате docker ps, контејнер више нећете видети, али видећете га ако куцате docker ps -a( -aзначи све, укључујући покретање а не покретање контејнера. Изоставите -aако желите да видите само активне контејнере). Да бисте уклонили контејнер, откуцајте docker rm kz. Ако укуцате docker ps -a, контејнер више нећете видети.

Закључак

То је био Доцкер! Кад се све узме у обзир, Доцкер је много лакши од постављања ВМ-а заснованог на хипервизору и можете видети како архитектуром микросервиса постаје много лакше управљати када усвојите контејнере. Са нашим Dockerfile, build.shи run.shфајлова је направљена за ЕЦ2, можемо сумирати 3 корака да ради Доцкер од наших корена апликација директоријуму:

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

То је то! Доцкер: лаган као градња, трчање, готово!

Бонус Цхеатсхеет

Будући да је овај водич подучавао Доцкер корак по корак, мислим да је прикладно да вас оставимо са прегледом свих Доцкер наредби које су вам потребне за општу употребу.

$ 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
Ове методе су делимично коришћене у примени рентхеро.ца