Conclusão

Conclusão, nomenclatura e perguntas frequentes

Conclusão

Uma das grandes vantagens do Docker está em resolver o problema de executar aplicativos em sistemas incapacitados, seja por incompatibilidade do sistema, ou pela falta de programas, binários, bibliotecas ou dependências necessárias para a execução do aplicativo. Com o uso de containers, o Docker acaba com a necessidade de executar um sistema operacional inteiro (como em uma máquina virtual) para rodar um aplicativo, proporcionando ao usuário um ambiente portátil e com todas as necessidades básicas para sua execução. Além disso, Docker é perfeito para proporcionar um ambiente de desenvolvimento homogêneo entre uma equipe, ao permitir a criação e compartilhamento de "SOs com configurações customizadas" com alguns simples passos, e seu vasto registro de imagens e repositório de aplicações e dependências soluciona virtualmente todos os problemas relacionados à configuração de ambiente que um desenvolvedor possa ter.
Portanto, ainda que ele possua seus problemas com interfaces gráficas e com divisão de recursos, Docker permanece uma excelente opção para se desenvolver e executar pequenas aplicações de servidor com simplicidade e maestria, garantindo aos desenvolvedores um ambiente de desenvolvimento homogêneo, leve e de simples configuração.




Nomenclatura

Dockerfiles

Uma vantagem do Docker são Dockerfiles, arquivos de texto que contém comandos que um usuário pode executar na hora da criação de um container. Eles permitem a configuração de arquivos de imagem, que por sua vez serão usados para a criação de containers com configurações específicas. Pode-se pensar em um Dockerfile como uma “lista de instruções a ser lida no momento de criação de um container”. Por ser um simples arquivo de texto, pode ser facilmente compartilhado, tornando-se útil para uma equipe que deseja desenvolver em um ambiente de trabalho homogêneo.





Perguntas

1) Quais são os 4 componentes básicos do Docker e o que fazem?

Os 4 componentes são os seguintes:

  • Docker server e daemon: lida com o gerenciamento de recursos, criação de destruição de containers e conexão entre o cliente e tais containers.
  • Imagens: São arquivos de imagem de sistemas operacionais, e servem de base para a criação de containers. São armazenadas no Registro do Docker.
  • Registros: Armazenam os arquivos de imagem que serão usados de base para construir containers.
  • Containers: São a parte principal do Docker. São pacotes executáveis de imagens de SO que agem como um sistema autônomo, porém são mais fáceis de serem configurados e bem mais leves, pois só carregam as bibliotecas e dependências necessárias ao serem instanciados, ao contrário do que um SO comum costuma fazer.

2) Qual a principal vantagem de um container do Docker, quando comparado a um ambiente de desenvolvimento comum?

Um container do Docker, ao ser instanciado, apenas baixa e carrega as bibliotecas e dependências pedidas pelo usuário, ao contrário de um SO comum, que carrega diversos arquivos ao ser iniciado, muitos dos quais irrelevantes para a execução da tarefa atual a ser realizada. Isso torna os containers muito mais velozes ao inicializarem, e também os torna bem mais leves do que um SO comum.


3) Qual a diferença entre um container do Docker e uma máquina virtual?

Em uma máquina virtual, cada instância de uma imagem de sistema operacional carrega uma nova cópia do sistema operacional inteiro, com todas as suas bibliotecas e dependências, portanto N instâncias de máquinas virtuais causarão o carregamento de N sistemas operacionais diferentes.
Um container, por outro lado, é executado em cima de um arquivo de sistema operacional, mas ao contrário de uma máquina virtual, vários containers podem ser executados em cima de um mesmo arquivo de imagem, e estes só instanciam as bibliotecas e dependências que forem utilizar, em vez de instanciar todas as existentes. Portanto, N instâncias de containers que utilizem a mesma imagem só carregarão um novo sistema operacional uma vez.


4) Quais são as vantagens de containers, comparados à máquinas virtuais?

Devido ao tamanho de máquinas virtuais, um host que poderia apenas executar dezenas de VMs pode executar centenas de containers. Além disso, containers, por serem mais leves, são inicializados muito mais rapidamente.
Por fim, como containers possuem o paradigma da infraestrutura imutável, o usuário tem mais garantia de que instâncias do container baseadas na mesma imagem possuirão o mesmo software instalado.


5) Como o Docker lida com possíveis conflitos de rede entre containers?

O Docker realiza um mapeamento entre suas portas (as portas físicas do hardware do servidor) e as portas virtuais de cada container. Dessa forma, se mais de um container utiliza a porta 80 para alguma troca de mensagens pela rede, por exemplo, o host do Docker mapeia diferentes portas físicas para as portas virtuais 80 destes containers, de modo que os pacotes destinados e originados em cada um deles sejam encaminhados corretamente.



Bibliografia

Wilson, Bibin. “What is Docker? How does it work?”. Último acesso em 23/08/17. Disponível em https://devopscube.com/what-is-docker/

Wikipedia. “Docker Software”. Último acesso em 23/08/17. Disponível em https://en.wikipedia.org/wiki/Docker_(software)

Wikipedia. “Operating-System-Level virtualization”. Último acesso em 23/08/17. Disponível em https://en.wikipedia.org/wiki/Operating-system-level_virtualization

Linux Containers. “What’s LXC?”. Último acesso em 23/08/17. Disponível em https://linuxcontainers.org/lxc/introduction/

Corrie, Ben. “What is a Container?”. Último acesso em 23/08/17. Disponível em https://www.youtube.com/watch?v=EnJ7qX9fkcU

AuFS(advanced multi-layered unification filesystem). Último acesso em 23/08/17. Disponível em http://aufs.sourceforge.net/

Wang, Chenxi. “What is Docker? Linux Containers Explained”. Último acesso em 23/08/17. Disponível em http://www.infoworld.com/article/3204171/linux/what-is-docker-linux-containers-explained.html

Documentação do Docker. “Docker Overview”. Último acesso em 23/08/17. Disponível em https://docs.docker.com/engine/docker-overview/

SdxCentral. “What is a Docker Container?”. Último acesso em 23/08/17. Disponível em https://www.sdxcentral.com/cloud/containers/definitions/what-is-docker-container-open-source-project/