Fundamentos de docker

CompletedCreated timeDateElemento
NoMarch 1, 2024 5:14 PMMarch 1, 2024curso docker

O que são containers e porque são mais leves que maquinas virtuais?

Os containers são mais leves porque funcionam como processos diretamente do sistema operacional, utilizam namespaces para garantir o isolamento e não requerem a instalação de um sistema operacional dentro deles. O uso de Cgroups permite um controle mais preciso do consumo de recursos.

Porque containers são mais leves?

Namespaces:

Namespaces são recursos do kernel do Linux que permitem a criação de ambientes isolados dentro de um sistema operacional. Eles garantem o isolamento entre processos e recursos, permitindo a execução de múltiplos ambientes independentes no mesmo sistema. Cada namespace é responsável por isolar um aspecto específico do sistema, como processos, rede, sistema de arquivos, entre outros.

Captura de tela 2024-02-28 221747.png

Cgroups:

As cgroups são uma funcionalidade do kernel do Linux que permitem o controle e gerenciamento de recursos, como CPU e memória, por processos ou grupos de processos. Elas são utilizadas para definir limites de recursos e monitorar o consumo dos mesmos, garantindo um melhor controle e eficiência do sistema.


Imagem

Uma imagem no contexto do Docker é um pacote executável que contém tudo o que é necessário para executar uma aplicação, incluindo o código, as bibliotecas, as dependências e as configurações. É como uma receita que define como um container deve ser criado e executado. As imagens são criadas a partir de um arquivo chamado Dockerfile, que contém as instruções para construir a imagem. No Docker Hub, você pode encontrar diversas imagens prontas para uso, que podem ser baixadas e executadas em containers.

  • Imagens são imutáveis, ou seja, depois de baixadas, múltiplos containers conseguirão reutilizar a mesma imagem;
  • Imagens são compostas por uma ou mais camadas. Dessa forma, diferentes imagens são capazes de reutilizar uma ou mais camadas em comum entre si;
  • Podemos criar nossas imagens através de Dockerfiles e do comando docker build;
  • Para subir uma imagem no Docker Hub, utilizamos o comando docker push.

Docker hub

O Docker Hub é um repositório de imagens que são usadas para executar containers. É um serviço online onde você pode encontrar e compartilhar imagens prontas para uso. Nele, você pode encontrar imagens oficiais mantidas por um grupo confiável de pessoas, além de diversas outras imagens interessantes.

Volume

Os volumes no Docker são uma forma de persistir dados de forma mais robusta e flexível. Eles são uma abstração que permite que os dados sejam armazenados fora do ciclo de vida do container, o que significa que eles podem ser compartilhados entre diferentes containers e também persistem mesmo quando um container é excluído.

Os volumes podem ser criados e gerenciados pelo Daemon do Docker, que é responsável por controlar o ciclo de vida dos containers. Eles são armazenados em um diretório específico no host e podem ser montados em um ou mais containers.

Existem diferentes tipos de volumes no Docker, como volumes anônimos, volumes nomeados e volumes de host. Os volumes anônimos são criados automaticamente pelo Docker e possuem um nome gerado aleatoriamente. Os volumes nomeados são criados explicitamente pelo usuário e possuem um nome definido. Já os volumes de host são diretórios ou arquivos no host que são montados em um container.

Os volumes são muito úteis para persistir dados sensíveis, como bancos de dados, arquivos de configuração e logs. Eles também facilitam a migração de containers entre diferentes ambientes, pois os dados podem ser facilmente transferidos através dos volumes.

No Docker, os volumes são criados e gerenciados através de comandos específicos, como "docker volume create" para criar um novo volume e "docker volume ls" para listar os volumes existentes. Além disso, é possível especificar volumes ao executar um container utilizando a flag "--mount".

Em resumo, os volumes no Docker são uma forma de persistir dados de forma flexível e robusta, permitindo o compartilhamento e a persistência de dados entre containers e execuções subsequentes dos containers. Eles são uma solução recomendada pelo Docker para garantir a integridade e a disponibilidade dos dados em ambientes de contêineres.

Network

No Docker, a funcionalidade de network (rede) permite que os containers se comuniquem entre si e com o mundo exterior. Ela é essencial para estabelecer uma comunicação estável e eficiente entre os containers.

Existem diferentes tipos de redes disponíveis no Docker, cada uma com suas características e finalidades específicas. Alguns exemplos são:

  1. Bridge: É o driver de rede padrão no Docker. Ele cria uma rede interna isolada, na qual os containers podem se comunicar entre si usando nomes personalizados ou IPs. Essa rede também permite que os containers se comuniquem com o mundo exterior através de portas mapeadas.
  2. Host: Nesse tipo de rede, o container compartilha a mesma rede do host, ou seja, não há isolamento de rede. Isso significa que o container pode acessar os serviços do host diretamente, sem a necessidade de mapeamento de portas.
  3. Overlay: É uma rede que permite a comunicação entre containers em diferentes hosts do Docker Swarm. Ela é útil para criar aplicações distribuídas e escaláveis, onde os containers precisam se comunicar em um ambiente de cluster.
  4. Null: Essa rede é usada quando você deseja desabilitar completamente a rede em um container. Isso pode ser útil em casos específicos, como quando você precisa executar um container apenas para executar um comando único.

Além desses tipos de redes, o Docker também oferece recursos avançados, como a criação de redes personalizadas, que permitem criar redes com configurações específicas para atender às necessidades do seu projeto.

Em resumo, a funcionalidade de network no Docker é essencial para estabelecer a comunicação entre os containers. Ela oferece diferentes tipos de redes, como bridge, host, overlay e null, cada um com suas características específicas. A escolha do tipo de rede depende das necessidades do seu projeto.