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.
Canto máis máquinas virtuais no servidor, canto máis espazo ocupan e máis soporte constante requiren para o ambiente que a túa aplicación necesita para executarse.
Estivador — é software para crear aplicacións baseadas en contedores. Contedores e máquinas virtuais Teñen vantaxes semellantes pero funcionan de xeito diferente. Os contedores ocupan menos espazo porque reutilizan máis recursos compartidos do sistema anfitrión que as máquinas virtuais, xa que, a diferenza destas, proporcionan virtualización a nivel do sistema operativo en lugar de no hardware. Esta estratexia garante unha pegada de memoria menor, unha implementación máis rápida e unha escalabilidade máis sinxela.
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 sistema operativo nativo de Docker é Linux (Docker tamén se pode usar en Windows, e en MacOS), usa as súas principais vantaxes, que lle permiten organizar a separación do núcleo. Executar contedores Docker en Windows ocorrerá dentro dunha máquina virtual co sistema operativo Linux, porque os contedores comparten o sistema operativo anfitrión e o sistema operativo subxacente 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 — un sistema de ficheiros de pila de servizos (FS) para Linux e FreeBSD. Este sistema de ficheiros implementa un mecanismo de copia ao escribir (COW). A unidade de traballo de UnionFS é a capa, e cada capa debe considerarse un sistema de ficheiros completo e separado cunha xerarquía de directorios que comeza desde a raíz. UnionFS crea unha montaxe de unión para outros sistemas de ficheiros e permite que os ficheiros e directorios de diferentes sistemas de ficheiros (chamados forks) se fusionen nun único sistema de ficheiros cohesivo 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 de contedores máis empregada para a execución de aplicacións. Converteuse no estándar neste eido, baseándose nos grupos de control e espazos de nomes proporcionados polo kernel. 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
