VM ou Docker?

Como sabes se necesitas Docker e non unha máquina virtual? Debes determinar exactamente o que queres illar. Se queres illar un sistema con recursos dedicados garantidos e hardware virtual, entón a elección debería ser unha máquina virtual. Se precisa illar aplicacións en execución como procesos do sistema separados, necesitará Docker.

Entón, cal é a diferenza entre os contedores Docker e as máquinas virtuales?

Máquina virtual (VM) é un ordenador virtual con todos os dispositivos virtuais e un disco duro virtual no que se instala un novo sistema operativo independente xunto con controladores de dispositivos virtuais, xestión de memoria e outros compoñentes. É dicir, obtemos unha abstracción de hardware físico que nos permite executar moitos ordenadores virtuais nun mesmo ordenador.
Unha máquina virtual instalada pode ocupar espazo no disco do teu ordenador de diferentes xeitos:

  • espazo fixo no disco duro, o que permite un acceso máis rápido ao disco duro virtual e evita a fragmentación dos ficheiros;
  • asignación de memoria dinámica. Ao instalar aplicacións adicionais, a memoria asignarase dinámicamente ata que alcance a cantidade máxima asignada.

Cantas máis máquinas virtuais por servidor, máis espazo ocupan e tamén requiren soporte constante para o ambiente necesario para que a súa aplicación se execute.

Estivador é un software para crear aplicacións baseadas en contedores. Os contedores e as máquinas virtuais teñen vantaxes similares, pero funcionan de forma diferente. Os contedores ocupan menos espazo porque... reutilizar máis recursos compartidos do sistema host que a máquina virtual, porque a diferenza de VM, ofrece virtualización a nivel de SO, non a nivel de hardware. Este enfoque dá como resultado unha menor pegada de memoria, unha implantación máis rápida e un escalado máis sinxelo.

O contedor proporciona un mecanismo máis eficiente para encapsular aplicacións proporcionando as interfaces necesarias ao sistema host. Esta función permite que os contedores compartan o núcleo do sistema, con cada contenedor executándose como un proceso do sistema operativo host separado que ten o seu propio conxunto de áreas de memoria (o seu propio espazo de enderezo virtual). Dado que o espazo de enderezos virtuais de cada contedor é o seu, os datos pertencentes a diferentes áreas de memoria non se poden cambiar.
O SO nativo de Docker é Linux (Docker tamén se pode usar en Windows e MacOS), utiliza as súas principais vantaxes, que lle permiten organizar a separación do núcleo. A execución de contedores Docker en Windows terá lugar dentro dunha máquina virtual que executa o sistema operativo Linux, porque os contedores comparten o sistema operativo do sistema host e o sistema operativo principal para eles é Linux.

Contedor - como funciona?

Recipiente é unha abstracción a nivel de aplicación que combina código e dependencias. Os contedores créanse sempre a partir de imaxes, engadindo unha capa superior escribible e inicializando varios parámetros. Dado que un contedor ten a súa propia capa de escritura e todos os cambios almacénanse nesa capa, varios contedores poden compartir o acceso á mesma imaxe mestra.

Cada contedor pódese configurar a través dun ficheiro do proxecto docker-compose incluído na solución principal - docker-compose.yml. Alí pode establecer varios parámetros como o nome do contedor, os portos, os identificadores, os límites de recursos, as dependencias entre outros contedores. Se non especificas un nome de contedor na configuración, Docker creará un novo contedor cada vez, dándolle un nome ao chou.

Cando se inicia un contedor a partir dunha imaxe, Docker monta un sistema de ficheiros de lectura-escritura enriba das capas inferiores. Aquí é onde se executarán todos os procesos que queremos que execute o noso contedor Docker.

Cando Docker inicia por primeira vez un contedor, a capa de lectura e escritura inicial está baleira. Cando se producen cambios, aplícanse a esta capa; por exemplo, se queres cambiar un ficheiro, ese ficheiro copiarase da capa de só lectura abaixo á capa de lectura e escritura.
A versión de só lectura do ficheiro seguirá existindo, pero agora está oculta baixo a copia. Os volumes úsanse para almacenar datos, independentemente do ciclo de vida do contedor. Os volumes inícianse cando se crea o contedor.

Como se relaciona a imaxe co recipiente?

Imaxe — o elemento principal de cada recipiente. A imaxe créase a partir dun Dockerfile engadido ao proxecto e é un conxunto de sistemas de ficheiros (capas) superpostos uns sobre outros e agrupados, de só lectura; o número máximo de capas é 127.

No corazón de cada imaxe hai unha imaxe base, que se especifica polo comando FROM, o punto de entrada ao crear a imaxe Dockerfile. Cada capa é unha capa de só lectura e está representada por un único comando que modifica o sistema de ficheiros, escrito nun ficheiro Docker.
Para combinar estas capas nunha única imaxe, Docker usa o sistema de ficheiros Union avanzado de varias capas (AuFS está construído sobre UnionFS), permitindo que se superpoñan de forma transparente diferentes ficheiros e directorios de diferentes capas de ficheiros, creando un sistema de ficheiros cohesionado.

As capas conteñen metadatos que che permiten almacenar información relacionada sobre cada capa durante o tempo de execución e de compilación. Cada capa contén unha ligazón á seguinte capa; se unha capa non ten unha ligazón, entón é a capa superior da imaxe.

O Dockerfile pode conter comandos como:

  • FROM — punto de entrada ao formar unha imaxe;
  • MINTAINER - nome do propietario da imaxe;
  • RUN — execución de comandos durante a montaxe da imaxe;
  • ENGADIR - copiando o ficheiro host a unha nova imaxe; se especificas o URL do ficheiro, Docker descargarao no directorio especificado;
  • ENV - variables de ambiente;
  • CMD - inicia a creación dun novo contedor baseado na imaxe;
  • ENTRYPOINT: o comando execútase cando se inicia o contedor.
  • WORKDIR é o directorio de traballo para executar o comando CMD.
  • USUARIO: establece o UID para o contedor creado a partir da imaxe.
  • VOLUME - monta o directorio host no contedor.
  • EXPOSE é un conxunto de portos que se escoitan no contedor.

Como funciona UnionFS?

UnionFS - Sistema de ficheiros de pila de utilidades (FS) para Linux e FreeBSD. Este FS implementa un mecanismo de copia sobre escritura (Copy-On-Write, COW). A unidade de traballo de UnionFS é unha capa, cada capa debe considerarse como un sistema de ficheiros completo e separado cunha xerarquía de directorios desde a propia raíz. UnionFS crea un montaxe de unión para outros sistemas de ficheiros e permite que ficheiros e directorios de diferentes sistemas de ficheiros (chamados forks) se combinen nun único sistema de ficheiros coherente, de forma transparente para o usuario.

Os contidos dos directorios cos mesmos camiños aparecerán xuntos nun directorio unificado (nun único espazo de nomes) do sistema de ficheiros resultante.

UnionFS combina capas baseándose nos seguintes principios:

  • unha das capas convértese na capa de nivel superior, a segunda e as seguintes capas convértense nas capas de nivel inferior;
  • os obxectos de capa están dispoñibles para o usuario "de arriba a abaixo", é dicir. se o obxecto solicitado está na capa "superior", devólvese, independentemente da presenza dun obxecto co mesmo nome na capa "inferior"; se non, devólvese o obxecto da capa "inferior"; se o obxecto solicitado non está nin alí nin alí, devólvese o erro "Non hai ningún ficheiro ou directorio".
  • a capa de traballo é a "superior", é dicir, todas as accións do usuario para cambiar os datos reflíctense só na capa de nivel superior, sen afectar o contido das capas dos niveis inferiores.

Docker é a tecnoloxía máis común para usar contedores para executar aplicacións. Converteuse no estándar no campo, baseándose nos cgroups e espazos de nomes proporcionados polo núcleo de Linux.

Docker permítenos implementar rapidamente aplicacións e facer o mellor uso do sistema de ficheiros dividindo o núcleo do sistema operativo entre todos os contedores, executando como procesos do sistema operativo separados.

Fonte: www.habr.com

Engadir un comentario