Conclusão, nomenclatura e perguntas frequentes
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 proporcional 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.
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.
Os 4 componentes são os seguintes:
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.
R: Em uma máquina virtual, cada instância de uma imagem de sistema operacional instancia o sistema operacional inteiro, com todas as suas libs e dependências, portanto N instâncias.
Um container, por outro lado, é executado em cima de um arquivo de SO, porém 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 libs e dependências que forem utilizar, em vez de instanciar todas as existentes.
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 de e para cada um deles sejam encaminhados corretamente.