Comprensión de Docker

Levo varios meses usando Docker para estruturar o proceso de desenvolvemento/entrega de proxectos web. Ofrézolles aos lectores de Habrakhabr unha tradución do artigo introdutorio sobre docker - "Entendendo docker".

Que é docker?

Docker é unha plataforma aberta para desenvolver, entregar e operar aplicacións. Docker está deseñado para entregar as túas aplicacións máis rápido. Con docker, pode desvincular a súa aplicación da súa infraestrutura e tratar a infraestrutura como unha aplicación xestionada. Docker axúdache a enviar o teu código máis rápido, probar máis rápido, enviar aplicacións máis rápido e reducir o tempo entre escribir código e executalo. Docker faino a través dunha plataforma lixeira de virtualización de contedores, utilizando procesos e utilidades que che axudan a xestionar e entregar as túas aplicacións.

Na súa base, Docker permítelle executar case calquera aplicación, illada de forma segura nun contedor. O illamento seguro permítelle executar moitos contedores no mesmo host ao mesmo tempo. A natureza lixeira do contedor, que funciona sen a carga adicional dun hipervisor, permítelle sacar máis proveito do seu hardware.

A plataforma e as ferramentas de virtualización de contedores poden ser útiles nos seguintes casos:

  • empaquetar a súa aplicación (e os compoñentes que utiliza) en contedores docker;
  • distribución e entrega destes contedores aos seus equipos para o seu desenvolvemento e proba;
  • colocando estes contedores nos seus sitios de produción, tanto nos centros de datos como nas nubes.

Para que podo usar o docker?

Publica rapidamente as túas aplicacións

Docker é excelente para organizar o ciclo de desenvolvemento. Docker permite aos desenvolvedores executar contedores locais con aplicacións e servizos. O que posteriormente permítelle integrarse co proceso de integración continua e fluxo de traballo de implantación.

Por exemplo, os seus desenvolvedores escriben código localmente e comparten a súa pila de desenvolvemento (un conxunto de imaxes de Docker) cos seus compañeiros. Cando estean listos, envían o código e os contedores ao sitio de proba e realizan as probas necesarias. Desde o sitio de proba, poden enviar código e imaxes á produción.

Disposición e desdobramento máis fáciles

A plataforma baseada en contedores Docker facilita a transferencia da súa carga útil. Os contedores Docker poden executarse na túa máquina local, xa sexa real ou virtual nun centro de datos ou na nube.

A portabilidade e a natureza lixeira de Docker facilitan a xestión dinámica da súa carga de traballo. Podes usar o docker para implementar ou apagar a túa aplicación ou servizos. A velocidade do docker permite que isto se faga case en tempo real.

Cargas máis altas e máis cargas útiles

Docker é lixeiro e rápido. Ofrece unha alternativa resistente e rendible ás máquinas virtuais baseadas en hipervisores. É especialmente útil en ambientes de alta carga, por exemplo, cando creas a túa propia nube ou plataforma como servizo. Pero tamén é útil para pequenas e medianas aplicacións cando se quere sacar máis proveito dos recursos dos que se dispón.

Principais compoñentes de Docker

Docker consta de dous compoñentes principais:

  • Docker: unha plataforma de virtualización de código aberto;
  • Docker Hub: a nosa plataforma como servizo para distribuír e xestionar contedores Docker.

Nota! Docker distribúese baixo a licenza Apache 2.0.

Arquitectura Docker

Docker usa unha arquitectura cliente-servidor. O cliente Docker comunícase co daemon Docker, que asume a carga de crear, executar e distribuír os seus contedores. Tanto o cliente como o servidor poden executarse no mesmo sistema, pode conectar o cliente a un daemon docker remoto. O cliente e o servidor comunícanse mediante un socket ou unha API RESTful.

Comprensión de Docker

Daemon Docker

Como se mostra no diagrama, o daemon execútase na máquina host. O usuario non interactúa directamente co servidor, senón que utiliza o cliente para iso.

Cliente Docker

O cliente Docker, o programa docker, é a interface principal de Docker. Recibe comandos do usuario e interactúa co daemon docker.

Docker interior

Para comprender en que consiste docker, cómpre coñecer tres compoñentes:

  • imaxes
  • rexistro
  • Contenedores

As imaxes

A imaxe de Docker é un modelo de só lectura. Por exemplo, a imaxe pode conter o sistema operativo Ubuntu con Apache e unha aplicación nel. As imaxes utilízanse para crear recipientes. Docker facilita a creación de novas imaxes, a actualización das existentes ou pode descargar imaxes creadas por outras persoas. As imaxes son compoñentes dunha compilación docker.

O rexistro

O rexistro de Docker almacena imaxes. Existen rexistros públicos e privados desde os que podes descargar ou cargar imaxes. Un rexistro público de Docker é Hub Docker. Hai unha enorme colección de imaxes almacenadas alí. Como sabes, podes crear imaxes ti ou podes usar imaxes creadas por outros. Os rexistros son un compoñente de distribución.

Contenedores

Os contedores son similares aos directorios. Os contedores conteñen todo o que precisa a aplicación para executarse. Cada recipiente créase a partir dunha imaxe. Os contedores pódense crear, iniciar, deter, migrar ou eliminar. Cada contedor está illado e proporciona unha plataforma segura para a aplicación. Os contedores son compoñentes do traballo.

Entón, como funciona Docker?

Ata agora sabemos que:

  • podemos crear imaxes nas que se localicen as nosas aplicacións;
  • podemos crear contedores a partir de imaxes para executar aplicacións;
  • Podemos distribuír imaxes a través de Docker Hub ou outro rexistro de imaxes.

Vexamos como encaixan estes compoñentes.

Como funciona a imaxe?

Xa sabemos que unha imaxe é un modelo de só lectura a partir do que se crea un contedor. Cada imaxe consta dun conxunto de niveis. Docker usa sistema de ficheiros de unión para combinar estes niveis nunha soa imaxe. O sistema de ficheiros Union permite que os ficheiros e directorios de diferentes sistemas de ficheiros (distintas ramas) se superpoñan de forma transparente, creando un sistema de ficheiros coherente.

Unha das razóns polas que o docker é lixeiro é porque usa capas como esta. Cando cambia a imaxe, como actualizar unha aplicación, créase unha nova capa. Así, sen substituír a imaxe enteira nin reconstruíla, como pode ter que facer cunha máquina virtual, só se engade ou actualiza a capa. E non tes que distribuír a nova imaxe enteira, só se distribúe a actualización, o que fai que a distribución de imaxes sexa máis sinxela e rápida.

No corazón de cada imaxe hai unha imaxe base. Por exemplo, ubuntu, a imaxe base de Ubuntu, ou fedora, a imaxe base da distribución Fedora. Tamén pode usar imaxes como base para crear novas imaxes. Por exemplo, se tes unha imaxe de Apache, podes usala como imaxe base para as túas aplicacións web.

Nota! Docker normalmente extrae imaxes do rexistro de Docker Hub.

As imaxes de Docker pódense crear a partir destas imaxes base; chamamos instrucións aos pasos para crear estas imaxes. Cada instrución crea unha nova imaxe ou nivel. As instrucións serán as seguintes:

  • comando executar
  • engadindo un ficheiro ou directorio
  • creando unha variable de ambiente
  • instrucións sobre que executar cando se lanza o contedor desta imaxe

Estas instrucións gárdanse nun ficheiro Dockerfile. Docker le isto Dockerfile, cando constrúe a imaxe, executa estas instrucións e devolve a imaxe final.

Como funciona o rexistro docker?

O rexistro é un repositorio de imaxes docker. Unha vez creada a imaxe, pode publicala no rexistro público de Docker Hub ou no seu rexistro persoal.

Co cliente docker, pode buscar imaxes xa publicadas e descargalas na súa máquina docker para crear contedores.

Docker Hub ofrece repositorios de imaxes públicos e privados. A procura e a descarga de imaxes desde repositorios públicos está dispoñible para todos. Os contidos dos almacenamentos privados non están incluídos nos resultados da busca. E só ti e os teus usuarios podes recibir estas imaxes e crear contedores a partir delas.

Como funciona un recipiente?

Un contedor está formado por un sistema operativo, ficheiros de usuario e metadatos. Como sabemos, cada recipiente é creado a partir dunha imaxe. Esta imaxe indica ao docker o que hai no contedor, o proceso que debe iniciar, cando se inicia o contedor e outros datos de configuración. A imaxe de Docker é de só lectura. Cando o docker inicia un contedor, crea unha capa de lectura/escritura enriba da imaxe (usando o sistema de ficheiros de unión como se indicou anteriormente) na que se pode executar a aplicación.

Que pasa cando comeza o recipiente?

Ou usando o programa docker, ou usando a API RESTful, o cliente docker indica ao daemon docker que inicie o contedor.

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

Vexamos este comando. O cliente lánzase mediante o comando docker, con opción run, que di que se lanzará un novo contedor. Os requisitos mínimos para executar un contedor son os seguintes atributos:

  • que imaxe utilizar para crear o recipiente. No noso caso ubuntu
  • o comando que quere executar cando se inicie o contedor. No noso caso /bin/bash

Que pasa baixo o capó cando executamos este comando?

Docker, en orde, fai o seguinte:

  • descarga a imaxe de ubuntu: docker comproba a dispoñibilidade de imaxes ubuntu na máquina local e, se non está alí, descárguea desde Hub Docker. Se hai unha imaxe, utilízaa para crear un contedor;
  • crea un contenedor: cando se recibe a imaxe, docker utilízaa para crear un contedor;
  • inicializa o sistema de ficheiros e monta o nivel de só lectura: o contedor créase no sistema de ficheiros e a imaxe engádese ao nivel de só lectura;
  • inicializa a rede/ponte: crea unha interface de rede que permite ao docker comunicarse coa máquina host;
  • Configuración do enderezo IP: atopa e establece o enderezo;
  • Inicia o proceso especificado: lanza a túa aplicación;
  • Procesa e produce resultados da súa aplicación: conecta e rexistra a entrada, saída e fluxo de erros estándar da túa aplicación para que poidas seguir o rendemento da túa aplicación.

Agora tes un recipiente que funciona. Podes xestionar o teu contedor, interactuar coa túa aplicación. Cando decida deter a aplicación, elimine o contedor.

Tecnoloxías empregadas

Docker está escrito en Go e usa algunhas funcións do núcleo de Linux para implementar a funcionalidade anterior.

Espazos de nomes

Docker usa tecnoloxía namespaces para organizar espazos de traballo illados, aos que chamamos contedores. Cando iniciamos un contedor, docker crea un conxunto de espazos de nomes para ese contedor.

Isto crea unha capa illada, con cada aspecto do contedor funcionando no seu propio espazo de nomes e sen ter acceso ao sistema externo.

Lista dalgúns espazos de nomes que usa Docker:

  • pid: para illar o proceso;
  • rede: para xestionar interfaces de rede;
  • ipc: para xestionar os recursos IPC. (ICP: Comunicación InterProccess);
  • mnt: para xestionar puntos de montaxe;
  • UTC: para illar o núcleo e controlar a xeración de versións (UTC: sistema de tempo compartido Unix).

Grupos de control

Docker tamén usa tecnoloxía cgroups ou grupos de control. A clave para executar unha aplicación de forma illada é proporcionarlle só os recursos que quere proporcionar. Isto garante que os contedores serán bos veciños. Os grupos de control permítenche compartir os recursos de hardware dispoñibles e, se é necesario, establecer límites e restricións. Por exemplo, limite a cantidade posible de memoria para o contedor.

Sistema de ficheiros da Unión

Union File System ou UnionFS é un sistema de ficheiros que funciona creando capas, o que o fai moi lixeiro e rápido. Docker usa UnionFS para crear os bloques a partir dos que está construído o contedor. Docker pode usar varias variantes de UnionFS, incluíndo: AUFS, btrfs, vfs e DeviceMapper.

Formatos de contedores

Docker combina estes compoñentes nun envoltorio que chamamos formato contenedor. O formato predeterminado chámase libcontainer. Docker tamén admite o formato de contedor tradicional en Linux usando LXC. No futuro, Docker pode admitir outros formatos de contedores. Por exemplo, a integración con BSD Jails ou Solaris Zones.

Fonte: www.habr.com

Engadir un comentario