Hasiberrientzako Docker: zer da Docker eta nola sortu Docker Edukiontziak

Azken urteotan programazio munduko azken garapenekin harremanetan egon bazara, Docker eta Docker edukiontzien inguruko zalaparta handia nabarituko zenuke. Docker-en ospea ez da arrazoirik gabe. Docker-en aurkezpenak asko aldatu du garatzaileek aplikazioen garapenera nola jotzen duten.

Nork nahi du atzean utzi horrelako teknologia iraultzaile batek programazio mundura jotzen duenean? Beraz, gaur egun, tutorial sorta berria hasten ari gara Docker aplikazioak garatzeko nola erabili ikasteko. Dockerren hasiberri absolutua bazara, tutorial sorta hau leku egokia da hasteko.

Gure tutorial saileko lehen artikuluan, Docker zer den eta garatzaileek hainbeste maite duten Docker ulertzea bilatzen ari gara. Node.js aplikazio sinple bat ere aterako dugu Dockerren oinarrizko kontzeptuak ezagutzeko.


Zergatik itxaron gehiago? Has gaitezen!



Zer da Docker

Docker aplikazioak eraikitzeko erabiltzen den tresna da; hau da, aplikazioak edukiontzien bidez sortu, zabaldu eta exekutatzea.


Edukiontzi batekin, aplikazio bat exekutatzeko beharrezkoak diren liburutegi guztiak eta gainerako mendekotasunak pakete bakar gisa biltzen dira inplementatzeko.

Aplikazio bat edukiontzien helburu nagusia sistema berean exekutatzen diren beste aplikazio batzuetatik isolatzea da. Ikuspegi horri esker, aplikazioek ez dute elkarren funtzionamendua oztopatzen eta aplikazioen mantentze-lana askoz ere errazagoa da.

Sistema berean exekutatzen diren edukiontziak exekutatzean elkarrengandik isolatuta dauden arren, OS kernel bera partekatzen dute. Hori dela eta, edukiontziak arinagoak dira makina birtualak aplikazioaren exekuzioa isolatzeko aukera alternatiboarekin alderatuta.

Ingurumena aldatu arren, zure Windows OS-ean exekutatzen den edukiontziko aplikazio batek arazorik gabe exekutatuko duela ziurtatzen da beste erabiltzaile baten Windows makinan.


Edukiontziak Dockerren aurretik aspalditik erabiltzen ziren arren, Dockerren sarrerak garatzaileen komunitatean edukiontziak erabiliz ezagun egin ziren. Aplikazio bat atrakatzerakoan erabiltzen diren bi osagai daude: Dockerfile eta Docker irudia . Ea zer diren.

Dockerfile

Dockerfile docker irudi bat eraikitzeko beharrezkoak diren komando multzoa duen testu fitxategia da. Dockerfile-k azpiko OSari, hizkuntzari, fitxategien kokapenari eta sareko portuei buruzko informazioa dauka, besteak beste.

Docker irudia

Docker-en eraikuntza komandoa tokian dagoen docker fitxategiarekin exekutatzen duzunean, docker irudi bat sortzen da docker fitxategian oinarrituta. Txantiloi gisa jokatzen dute atrakagailuaren azken edukiontzia sortzeko. Sortu ondoren, docker irudiak estatikoak dira. Dockerren exekutatze komandoa dei dezakezu Docker edukiontzia sortzeko docker irudi bat erabiliz.



Node.js aplikazio bat atrakatzen

Tutorial honetan, Node.js aplikazio bat dokumentalizatuko dugu. Docker edukiontzia martxan jartzeko urratsez urrats jarraituko dugu.


1 - Sortu Node.js aplikazioa 2 - Sortu dockerfile 3 - Sortu docker irudia 4 - Sortu aplikazioaren edukiontzia

Gure aplikazioa dockerizatzen murgildu aurretik, ziurtatu behar duzu Docker eta Node.js zure sisteman instalatuta daudela.

  • Instalatu Docker zure sisteman; tutorial honetan ez dut azalduko Docker nola instalatu, baina Dockerren dokumentazioa jarrai dezakezu eta Docker instalatu Windows edo Ubuntu mahaigainean.
  • Deskargatu eta instalatu Node.js webgune ofizialetik

Sortu Node.js aplikazioa

Nabigatu proiektu direktorio berrira komando-lerrotik eta exekutatu komando hau aplikazioaren mendekotasunen inguruko informazioa duen paketea.json fitxategia sortzeko eta script hasteko.

npm init -y


Ondoren, instalatu eta gehitu Express zure aplikazioan mendekotasun gisa, komando hau lerroan exekutatuz. Express erabiliko dugu aplikazioa sortzeko.

npm install express --save

Honek express gehituko dio mendekotasun gisa gure package.json fitxategia.

Orain Nodo aplikazio bat sor dezakegu Express-en laguntzarekin.


Sortu app.js izeneko fitxategia proiektuaren direktorioan eta gehitu hurrengo kodea fitxategian.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(3000, () => {
console.log('Node server has started running') })

Goiko kodeak 3000 atakan sarrerako eskaerak entzuten dituen Nodo zerbitzari bat sortzen du. Komando hau exekutatu dezakezu komando lerroan Nodo zerbitzaria abiarazteko.

node app.js

Orain joan arakatzailera eta jarraitu URL http://localhost:3000 eta testua ikusiko duzu Hello World! orrian.

Nodo aplikazio sinple bat eraiki dugu gure proiektuarentzat. Orain goazen dockerfile-a sortzen.

Sortu Dockerfile

Dockerfile-an, gure Node aplikazioa Docker ingurunearekin batera eraikitzeko eta exekutatzeko beharrezkoa den informazioa eskaintzen dugu.

Horrek aplikazioan erabilitako hizkuntza eta bertsioa zehaztea, gure proiektuaren direktorioa laneko direktorio gisa ezartzea, laneko direktorioko fitxategi guztiak kopiatzea, sareko ataka ezartzea eta aplikazioaren sarrera puntua zein fitxategi den zehaztea barne hartzen ditu. Aplikazio konplexuagoetan, inguruneko aldagaiak eta datu basearen URLa ezarri beharko dituzu dockerfile-n.

FROM node:latest WORKDIR /dockerTutorial COPY . . RUN npm install EXPOSE 3000 ENTRYPOINT ['node', 'app.js']
  • NONDIK komandoak OS irudi bat berreskuratzen du, gure aplikazioa sistema eragile zehatz batean exekutatzeko, Docker Hub-etik. Docker Hub tokiko ingurunera atera ditzakegun docker irudien biltegia da. Node.js. instalatuta duen Ubuntu oinarritutako irudia berreskuratzen ari gara. Nodoaren bertsio gisa 'azken' erabiltzeak Nodoaren azken bertsioa instalatuta duen irudia ateratzen du.
  • WORKDIR komandoak aplikazioaren laneko direktorioa ezartzen du.
  • KOPIA aginduak fitxategiak uneko direktorioko (komando-lerroko) fitxategiak aurreko urratsean ezarri zen laneko direktoriora kopiatzen ditu. Kopiatzeko fitxategi izena zehaztu edo puntu bikoitzak erabil ditzakezu uneko direktorioko fitxategi guztiak laneko direktoriora kopiatzeko.
  • KORRIKA EGIN komandoak aplikazioa eraikitzeko beharrezkoak diren mendekotasun guztiak instalatzen ditu. Honek package.json atalean zehaztutako mendekotasun guztiak biltzen ditu fitxategia.
  • ERAKUSI komandoak ataka bat irekitzen du Docker edukiontzitik kanpora. Ataka honek Docker edukiontzira bidaltzen ditugun eskaera guztiak jasotzen ditu. Ataka zehazki 3000 da, Docker edukiontzian gure Nodo aplikazioak eskaerak entzuteko erabiltzen duen ataka delako.
  • SARRERA aplikazioa nola abiarazi zehazten du. Docker-ek komando bakar bati eskaintzen diogun arrayarekin bat egiten du aplikazioa abiarazteko. Kasu honetan, node app.js.

Docker irudia eraikitzen

Erabili hurrengo komandoa Docker fitxategitik Docker irudia sortzeko.

docker build -t docker-tutorial .

Docker-tutorial Docker irudiaren izena da. Puntuak proiektuaren direktorioaren fitxategiaren bidea adierazten du, eta bertan gaude komando-lerroan.

Fitxategiarekin zehaztutako OS irudia bada NONDIK agindua, nodo: azkena , oraingoz ez dago zure gailuan, goiko agindua exekutatzean Docker Hub-etik aterako da.

Irudia atera ondoren, docker fitxategiko komando bakoitza banan-banan exekutatuko da.

Exekuzioaren amaieran, mezua ikusten baduzu ongi eraiki da , aplikazioaren docker irudia behar bezala eraiki da. Exekutatu komando hau eraikitako docker irudia tokiko irudi biltegian ikusteko.

docker images

Irteerak itxura hau du

Edukiontzia sortzea

Orain eraikitako irudia gure Docker edukiontzia sortzeko erabil dezakegu. Erabili docker run komandoa edukiontzia sortzeko.

docker run -p 8080:3000 docker-tutorial

Hemen, 8080 eta 3000 zenbakiek edukiontziaren kanpokoa eta barnekoa adierazten dute. Kanpoko ataka, 8080, gure arakatzailearen bidez aplikaziora konektatzeko erabiltzen dugun ataka da. Barne ataka, 3000, sarrerako eskaerak entzuteko ataka da. Docker edukiontziak emandako kanpoko ataka barneko ataka mapatzen du.

Bisitatu URL http://localhost:8080 arakatzailean eta ikusi orria lortzen duzun Hello World! http://localhost:3000 bisitatzean jaso zenuen mezua aurretik. Bai bada, Docker edukiontzia martxan dago.

Komando hau erabil dezakezu zure gailuan martxan dauden Docker edukiontzi guztiak ikusteko.

docker ps

Komandoak honelako irteera emango dizu. Hemen dagoen edukiontziaren CONTAINER_ID eta IZENA aurki ditzakegu.

Ingurumen aldagaiak gehitzea zure eskaerari

Gogoratzen dut nola aipatu nuen ingurumen aldagaiak dituen aplikazio batek argibide gehiago behar dituela docker fitxategian? Ingurumen aldagaiaren balioa aldatzen ari den ingurunearekin aldatzen da.

Kontuan izan nola aipatu dugun Nodo aplikazioak zerbitzaria exekutatzen ari denean entzuten duen portua. Ikuspegi hau malgua da eta akatsak ditu. Gure aplikazioa Nodo zerbitzarirako 3000 ataka irekitzen ez duen ingurune batean exekutatzen badugu, gure aplikazioak funtzionatzeari uzten dio.

Ezarpenik egokiena portuaren zenbakia aplikaziotik ateratzea da. Horren ordez, aldagai izen bat erabiltzen dugu ataka zenbakiaren ordez eta aldagai horren balioa ezartzen dugu martxan dagoen ingurunean. Gure kasuan, martxan dagoen ingurunea Docker edukiontzia da. Beraz, ataka zenbakia dockerfile-ra gehitu behar dugu ingurune aldagai gisa.

Ikus dezagun nola egin dezakegun hori.

Lehenik eta behin, gehitu ingurumen aldagaia gure docker fitxategiari bere balioarekin. Hori lortzeko komando berri bat gehitu behar diogu docker fitxategiari.

FROM node:latest WORKDIR /dockerTutorial COPY . . ENV PORT=3000 RUN npm install EXPOSE $PORT ENTRYPOINT ['node', 'app.js']

Aldagaiaren izenaren eta balioen esleipenaren ondoren ENV komandoa erabiliz, ingurumen aldagai berri bat gehitu dezakegu gure docker fitxategian. Konturatu al zara EXPOSE 3000 komandoa nola aldatu den ataka zenbakia esplizituki aipatzeko? Horren ordez, sortutako PORT aldagaia aipatzen du ataka zenbaki zehatza lortzeko. Ikuspegi honekin, ataka zenbakia aldatu behar badugu, gure kodean leku bakarra aldatu behar dugu eta horrek gure aplikazioa erraz mantentzen du.

Orain dockerfile-a aldatu dugu, hurrengo urratsa app.js aldatzea da sortutako ingurune aldagaia aipatzeko. Horretarako, entzuteko metodoaren barruan erabilitako 3000 ataka zenbakia process.env.PORT ordezkatuko dugu.

const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(process.env.PORT, () => {
console.log('Node server has started running') })

Gure aplikazioen fitxategietan eta dockerfile-n aldaketak egin ditugunez, irudi berria eraiki behar dugu edukiontzi berri baterako. Baina lehenik eta behin, martxan dagoen Docker edukiontzia geldiarazi behar dugu hori lortzeko.

Docker stop komandoa erabil dezakegu edukiontzia geldiarazteko.

docker stop f10

Komando honetan erabilitako balioa, f10, edukiontziaren IDaren lehen hiru digituak dira.

Docker kill komandoa erabil dezakegu martxan dagoen edukiontzia geldiarazteko.

docker kill f10

Docker hilketaren eta docker stoparen arteko aldea da docker stop horrek edukiontzia modu dotorean gelditzen duela baliabideak erabiliz askatuz eta egoera aurreztuz. docker kill-ek, hala ere, edukiontzia bortitzago gelditzen du baliabideak behar bezala askatu gabe edo estatua salbatu gabe. Ekoizpen ingurunean dabilen edukiontzi batentzat, docker stop-a erabiltzea edukiontzia geldiarazteko aukera onena da.

Martxan dagoen edukiontzia gelditu ondoren, ziurtatu edukiontziak utzitako hondarra ostalariaren ingurunetik garbitzen duzula ondorengo komandoaren bidez.

Edukiontzia Daemon moduan exekutatzen

Edukiontzia geldiarazteko goiko komandoak exekutatzen saiatzen zarenean, konturatuko zinen edukiontzia sortzeko erabili dugun terminal fitxan ezin dela erabili komando gehiago exekutatzeko edukiontzia hil ezean. Horretarako konponbide bat aurki dezakegu komando berriak exekutatzeko beste fitxa bat erabiliz.

Baina ikuspegi hobea dago. Edukiontzia deabru moduan exekutatu dezakegu. Daemon moduan, edukiontzia atzeko planoan exekutatzen da uneko fitxa erabili gabe irteerak erakusteko.

Edukiontzi bat deabru moduan hasteko, -d bandera gehigarria besterik ez duzu gehitu behar Docker exekutatzeko komandoari.

docker run -d -p 8080:3000 docker-tutorial

Edukiontzia modu interaktiboan exekutatzea

Edukiontzia modu interaktiboan exekutatzeko, edukiontzia dagoeneko martxan egon beharko litzateke. Modu interaktiboan sartuta, edukiontzira fitxategiak gehitzeko edo kentzeko komandoak exekutatu ditzakezu, fitxategiak zerrendatu edo normalean erabiltzen ditugun beste bash komandoak exekutatu.

Erabili komando hau edukiontzia modu interaktiboan exekutatzeko.

docker exec -it e37 bash

Hemen, e37 da edukiontziaren IDa. Jolastu modu interaktiboarekin bash komandoak erabiliz.



Ondorioa

Gure Docker tutorial saileko lehen tutorialean, Node.js aplikazio soil baterako Docker edukiontzia nola sortzen ikasi zenuen. Baina Docker eta edukiontziekin egin dezakezu gehiago. Datozen gure tutorialetan, datu baseekin, bolumenekin eta mikroserbitzuekin sortutako aplikazioek erabilitako edukiontzi anitzekin nola lan egin ikusiko dugu.