Comprensió de Docker

Fa uns quants mesos que faig servir Docker per estructurar el procés de desenvolupament/entrega de projectes web. Ofereixo als lectors d'Habrakhabr una traducció de l'article introductori sobre Docker - "Entenent Docker".

Què és docker?

Docker és una plataforma oberta per desenvolupar, lliurar i operar aplicacions. Docker està dissenyat per oferir les vostres aplicacions més ràpidament. Amb Docker, podeu desacoblar la vostra aplicació de la vostra infraestructura i tractar la infraestructura com una aplicació gestionada. Docker us ajuda a enviar el vostre codi més ràpid, provar més ràpidament, enviar aplicacions més ràpidament i reduir el temps entre escriure el codi i executar-lo. Docker ho fa mitjançant una plataforma de virtualització de contenidors lleugera, utilitzant processos i utilitats que us ajuden a gestionar i allotjar les vostres aplicacions.

En el seu nucli, Docker us permet executar gairebé qualsevol aplicació, aïllada de manera segura en un contenidor. L'aïllament segur us permet executar molts contenidors al mateix host al mateix temps. La naturalesa lleugera del contenidor, que funciona sense la càrrega addicional d'un hipervisor, us permet treure més profit del vostre maquinari.

La plataforma i les eines de virtualització de contenidors poden ser útils en els casos següents:

  • empaquetar la vostra aplicació (i els components que feu servir) en contenidors Docker;
  • distribució i lliurament d'aquests contenidors als vostres equips per al desenvolupament i proves;
  • col·locant aquests contenidors als vostres llocs de producció, tant als centres de dades com als núvols.

Per a què puc utilitzar Docker?

Publica ràpidament les teves aplicacions

Docker és ideal per organitzar el cicle de desenvolupament. Docker permet als desenvolupadors executar contenidors locals amb aplicacions i serveis. El que posteriorment li permet integrar amb el procés d'integració contínua i el flux de treball de desplegament.

Per exemple, els vostres desenvolupadors escriuen codi localment i comparteixen la seva pila de desenvolupament (un conjunt d'imatges de Docker) amb els companys. Quan estiguin a punt, envien el codi i els contenidors al lloc de prova i executen les proves necessàries. Des del lloc de prova, poden enviar codi i imatges a la producció.

Disseny i desplegament més fàcils

La plataforma basada en contenidors Docker facilita el port de la vostra càrrega útil. Els contenidors Docker es poden executar a la vostra màquina local, ja sigui real o virtual en un centre de dades o al núvol.

La portabilitat i la naturalesa lleugera de Docker facilita la gestió dinàmica de la vostra càrrega de treball. Podeu utilitzar Docker per implementar o tancar la vostra aplicació o serveis. La velocitat del docker permet que això es faci gairebé en temps real.

Càrregues més altes i més càrregues útils

Docker és lleuger i ràpid. Proporciona una alternativa resistent i rendible a les màquines virtuals basades en hipervisor. És especialment útil en entorns de càrrega elevada, per exemple, quan creeu el vostre propi núvol o plataforma com a servei. Però també és útil per a aplicacions petites i mitjanes quan es vol treure més profit dels recursos de què disposa.

Components principals de Docker

Docker consta de dos components principals:

  • Docker: una plataforma de virtualització de codi obert;
  • Docker Hub: la nostra plataforma com a servei per distribuir i gestionar contenidors Docker.

Nota! Docker es distribueix sota la llicència Apache 2.0.

Arquitectura Docker

Docker utilitza una arquitectura client-servidor. El client Docker es comunica amb el dimoni Docker, que assumeix la càrrega de crear, executar i distribuir els vostres contenidors. Tant el client com el servidor es poden executar al mateix sistema, podeu connectar el client a un dimoni docker remot. El client i el servidor es comuniquen mitjançant un sòcol o una API RESTful.

Comprensió de Docker

Dimoni Docker

Com es mostra al diagrama, el dimoni s'executa a la màquina host. L'usuari no interactua directament amb el servidor, sinó que utilitza el client per a això.

Client Docker

El client Docker, el programa docker, és la interfície principal de Docker. Rep ordres de l'usuari i interactua amb el dimoni docker.

Dins docker

Per entendre en què consisteix Docker, heu de conèixer tres components:

  • imatges
  • registre
  • contenidors

Imatges

La imatge de Docker és una plantilla només de lectura. Per exemple, la imatge pot contenir el sistema operatiu Ubuntu amb Apache i una aplicació. Les imatges s'utilitzen per crear contenidors. Docker facilita la creació d'imatges noves, l'actualització de les existents o podeu descarregar imatges creades per altres persones. Les imatges són components d'una compilació docker.

El registre

El registre Docker emmagatzema imatges. Hi ha registres públics i privats des dels quals podeu descarregar o pujar imatges. Un registre Docker públic és docker Hub. Hi ha una gran col·lecció d'imatges emmagatzemades allà. Com sabeu, les imatges les podeu crear vosaltres o podeu utilitzar imatges creades per altres. Els registres són un component de distribució.

contenidors

Els contenidors són semblants als directoris. Els contenidors contenen tot el que l'aplicació necessita per executar-se. Cada contenidor es crea a partir d'una imatge. Els contenidors es poden crear, iniciar, aturar, migrar o suprimir. Cada contenidor està aïllat i proporciona una plataforma segura per a l'aplicació. Els contenidors són components de l'obra.

Llavors, com funciona Docker?

Fins ara sabem que:

  • podem crear imatges en les quals es troben les nostres aplicacions;
  • podem crear contenidors a partir d'imatges per executar aplicacions;
  • Podem distribuir imatges mitjançant Docker Hub o un altre registre d'imatges.

Vegem com encaixen aquests components.

Com funciona la imatge?

Ja sabem que una imatge és una plantilla de només lectura a partir de la qual es crea un contenidor. Cada imatge consta d'un conjunt de nivells. Docker utilitza sistema de fitxers de la unió per combinar aquests nivells en una imatge. El sistema de fitxers Union permet que els fitxers i directoris de diferents sistemes de fitxers (diferents branques) se superposin de manera transparent, creant un sistema de fitxers coherent.

Una de les raons per les quals Docker és lleuger és perquè utilitza capes com aquesta. Quan canvieu la imatge, com ara actualitzar una aplicació, es crea una nova capa. Així, sense substituir la imatge sencera ni reconstruir-la, com potser haureu de fer amb una màquina virtual, només s'afegeix o s'actualitza la capa. I no cal que distribuïu tota la nova imatge, només es distribueix l'actualització, cosa que fa que la distribució d'imatges sigui més fàcil i ràpida.

Al cor de cada imatge hi ha una imatge bàsica. Per exemple, ubuntu, la imatge base d'Ubuntu, o fedora, la imatge base de la distribució Fedora. També podeu utilitzar imatges com a base per crear imatges noves. Per exemple, si teniu una imatge Apache, podeu utilitzar-la com a imatge base per a les vostres aplicacions web.

Nota! Docker normalment extreu imatges del registre de Docker Hub.

Les imatges Docker es poden crear a partir d'aquestes imatges base; anomenem instruccions als passos per crear aquestes imatges. Cada instrucció crea una nova imatge o nivell. Les instruccions seran les següents:

  • comanda executar
  • afegint un fitxer o directori
  • creant una variable d'entorn
  • instruccions sobre què s'ha d'executar quan es llança el contenidor d'aquesta imatge

Aquestes instruccions s'emmagatzemen en un fitxer Dockerfile. Docker llegeix això Dockerfile, quan creeu la imatge, executa aquestes instruccions i retorna la imatge final.

Com funciona el registre docker?

El registre és un dipòsit d'imatges de Docker. Un cop creada la imatge, podeu publicar-la al registre públic de Docker Hub o al vostre registre personal.

Amb el client Docker, podeu cercar imatges ja publicades i baixar-les a la vostra màquina Docker per crear contenidors.

Docker Hub proporciona dipòsits d'imatges públics i privats. La cerca i la baixada d'imatges dels dipòsits públics està disponible per a tothom. El contingut dels emmagatzematges privats no s'inclou als resultats de la cerca. I només vosaltres i els vostres usuaris podeu rebre aquestes imatges i crear-ne contenidors.

Com funciona un contenidor?

Un contenidor consta d'un sistema operatiu, fitxers d'usuari i metadades. Com sabem, cada contenidor es crea a partir d'una imatge. Aquesta imatge indica a Docker què hi ha al contenidor, quin procés ha d'iniciar, quan s'inicia el contenidor i altres dades de configuració. La imatge de Docker és només de lectura. Quan Docker inicia un contenidor, crea una capa de lectura/escriptura a la part superior de la imatge (utilitzant el sistema de fitxers d'unió com s'ha indicat abans) en la qual es pot executar l'aplicació.

Què passa quan comença el contenidor?

O utilitzant el programa docker, o utilitzant l'API RESTful, el client docker diu al dimoni docker que iniciï el contenidor.

$ sudo docker run -i -t ubuntu /bin/bash

Fem una ullada a aquesta comanda. El client s'inicia mitjançant l'ordre docker, amb opció run, que diu que es llançarà un nou contenidor. Els requisits mínims per executar un contenidor són els atributs següents:

  • quina imatge utilitzar per crear el contenidor. En el nostre cas ubuntu
  • l'ordre que voleu executar quan s'iniciï el contenidor. En el nostre cas /bin/bash

Què passa sota el capó quan executem aquesta comanda?

Docker, en ordre, fa el següent:

  • baixa la imatge d'ubuntu: Docker comprova la disponibilitat de la imatge ubuntu a la màquina local i, si no hi és, descarregueu-la docker Hub. Si hi ha una imatge, l'utilitza per crear un contenidor;
  • crea un contenidor: quan es rep la imatge, Docker l'utilitza per crear un contenidor;
  • inicialitza el sistema de fitxers i munta el nivell de només lectura: el contenidor es crea al sistema de fitxers i la imatge s'afegeix al nivell de només lectura;
  • inicialitza la xarxa/pont: crea una interfície de xarxa que permet que Docker es comuniqui amb la màquina host;
  • Configuració de l'adreça IP: cerca i estableix l'adreça;
  • Inicia el procés especificat: llança la teva aplicació;
  • Processa i produeix resultats de la vostra aplicació: connecta i registra l'entrada, la sortida i el flux d'errors estàndard de la vostra aplicació perquè pugueu fer un seguiment del rendiment de la vostra aplicació.

Ara teniu un contenidor que funciona. Podeu gestionar el vostre contenidor, interactuar amb la vostra aplicació. Quan decidiu aturar l'aplicació, suprimiu el contenidor.

Tecnologies utilitzades

Docker està escrit a Go i utilitza algunes característiques del nucli de Linux per implementar la funcionalitat anterior.

Espais de noms

Docker utilitza tecnologia namespaces per organitzar espais de treball aïllats, que anomenem contenidors. Quan iniciem un contenidor, Docker crea un conjunt d'espais de noms per a aquest contenidor.

Això crea una capa aïllada, amb cada aspecte del contenidor s'executa al seu propi espai de noms i no té accés al sistema extern.

Llista d'alguns espais de noms que fa servir Docker:

  • pid: aïllar el procés;
  • xarxa: per gestionar interfícies de xarxa;
  • ipc: per gestionar els recursos IPC. (ICP: Comunicació InterProccess);
  • mnt: per gestionar els punts de muntatge;
  • utc: per aïllar el nucli i controlar la generació de versions (UTC: sistema de temps compartit Unix).

Grups de control

Docker també utilitza tecnologia cgroups o grups de control. La clau per executar una aplicació de manera aïllada és proporcionar a l'aplicació només els recursos que voleu proporcionar. Això assegura que els contenidors seran bons veïns. Els grups de control us permeten compartir els recursos de maquinari disponibles i, si cal, establir límits i restriccions. Per exemple, limiteu la possible quantitat de memòria per al contenidor.

Sistema d'arxius de la Unió

Union File System o UnionFS és un sistema de fitxers que funciona creant capes, fent-lo molt lleuger i ràpid. Docker utilitza UnionFS per crear els blocs a partir dels quals es construeix el contenidor. Docker pot utilitzar diverses variants d'UnionFS, com ara: AUFS, btrfs, vfs i DeviceMapper.

Formats de contenidors

Docker combina aquests components en un embolcall que anomenem format contenidor. El format predeterminat s'anomena libcontainer. Docker també admet el format de contenidor tradicional a Linux utilitzant lxc. En el futur, Docker pot ser compatible amb altres formats de contenidors. Per exemple, la integració amb les presons BSD o les zones Solaris.

Font: www.habr.com

Afegeix comentari