O Docker é uma plataforma de containers de software líder mundial no segmento, o Docker foi criado por uma empresa chamada dotCloud, e hoje tornou-se uma ferramenta essencial devido a sua agilidade, performance, e robustez. O Docker veio para acabar com os problemas de “Ná minha máquina funciona”, quando desenvolvedores trabalhando em conjunto na hora de testar suas aplicações se deparam com muitos problemas de incompatibilidade, o Docker permite empacotar uma aplicação com todas as suas dependências em uma unidade padronizada para desenvolvimento de um software.
A ideia do Docker é possibilar a construção de aplicações, sejam baseadas em Web, compiladas ou não, escritas em PHP, Python, Java etc, em contêineres para que possam que esses mesmos containers possam trafegar em qualquer rede e rodar em qualquer servidor host que tenha o Docker instalado. A ideia inclusive inspirou seu logotipo:
Os LXC (Linux Containers) existem desde o kernel 2.6.26, que foi distribuído a partir de julho de 2008, porém, só nos últimos anos vem se popularizando graças principalmente ao Docker, que, por meio da sua arquitetura baseada em API, a utilização de imagens em camadas (técnica de copy-on-write), o repositório público de imagens, e todo o ecossistema em volta evoluiu e simplificou o gerenciamento desses contêineres Linux.
Os containeres Linux são como os sistemas operacionais guest, mas eles compartilham recursos como o kernel do sistema operacional host e rodam dentro de Cgroups (um recurso do kernel do Linux responsável por isolar a utilização de recursos como rede, memória, disco), portanto possuem PID único no host e são isolados por namespaces.
O grande trunfo do LXC é muito facilitado no Docker é que conseguimos criar namespaces para processos, para rede, para o hostname, para usuário, para montagem de sistema de arquivos e para comunicação entre usuário, para montagem de sistema de arquivos e para comunicação entre processos, e isolando esses recursos com os cgroups, conseguimos criar um contexto que dentro dele temos praticamente tudo que um sistema operacional precisa para rodar.
Vantagens
- Padroniza ambientes de desenvolvimento, teste e produção;
- Melhora a utilização de recursos físicos da infraestrutura;
- Limita memória e CPU de maneira mais simples, já que podemos designar o limite de memória e utilização de CPU do contêiner no comando de execução;
- Como iniciamos só o processo e não a pilha toda do sistema operacional sua inicialização é instantânea.
Arquitetura do Docker
Fonte: https://docs.docker.com/engine/article-img/architecture.svg
O Docker está disponível nas seguintes variantes:
- Docker Enterprise Edition (Docker EE);
- Docker Community Edition (Docker CE);
O Docker Enterprise Edition (Docker EE) foi desenvolvido para para nível enterprise, para equipes de TI que desenvolvem aplicações em produção em larga escala. O Docker EE é integrado, certificado e feito para suportar altas demandas com o mais segura plataforma de contêineres para a indústria desenvolver todas as suas aplicações com grande agilidade.
Para mais informaçoes sobre o Docker EE: https://www.docker.com/enterprise-edition.
O Docker Community Edition (Docker CE) é ideal para desenvolvedores e pequenas empresas que querem se aventurar e testar suas aplicações em containeres.
O Docker CE está disponível para várias plataformas, desde desktop até cloud. O Docker CE está disponível para MacOS, Windows e disponibiliza uma experiência mais pura para o aprimoramento em Docker, permitindo construir e compartilhar contêineres para ambientes simples.
Para mais informações sobre o Docer CE: https://www.docker.com/community-edition
Referências:
https://www.docker.com
https://www.redhat.com/pt-br/containers/whats-a-linux-container