Os contêineres são componentes de aplicativos leves e executáveis que combinam o código fonte do aplicativo com todas as bibliotecas do sistema operacional (SO) e as dependências necessárias para executar o código em qualquer ambiente.
Os contêineres aproveitam uma forma de virtualização de sistema operacional (SO) que permite que várias aplicações compartilhem uma única instância de um SO, isolando processos e controlando a quantidade de CPU, memória e disco que esses processos podem acessar.Como são menores, mais eficientes em termos de recursos e com maior portabilidade do que as máquinas virtuais (VMs), os contêineres se tornaram as unidades de computação de facto dos modernos aplicativos nativos de nuvem.
Em um estudo recente da IBM, os usuários relataram vários benefícios técnicos e comerciais específicos resultantes da adoção de contêineres e tecnologias relacionadas.
Contêineres versus máquinas virtuais versus infraestrutura tradicional
Pode ser mais fácil ou mais útil entender os contêineres como o ponto mais recente na evolução da automação e abstração da infraestrutura de TI.
Na infraestrutura tradicional, os aplicativos são executados em um servidor físico e utilizam todos os recursos disponíveis. Isso deixa você com a opção de executar vários aplicativos em um único servidor e torcer para que um deles não consuma recursos em detrimento dos outros, ou dedicar um servidor para cada aplicativo, o que desperdiça recursos e não é escalável.
As máquinas virtuais (VMs) são servidores abstratos do hardware de computador real, permitindo que você execute várias VMs em um servidor físico ou em uma única VM que abrange mais de um servidor físico. Cada VM executa sua própria instância de sistema operacional, e você pode isolar cada aplicativo em sua própria VM, reduzindo a chance de que aplicativos rodando no mesmo hardware físico subjacente afetem uns aos outros. As VMs fazem melhor uso dos recursos e são muito mais fáceis e econômicas de escalar do que a infraestrutura tradicional. E elas são descartáveis, quando você não precisa mais executar o aplicativo, você desativa a VM.
Para obter mais informações sobre máquinas virtuais, consulte "O que são máquinas virtuais?"
Os contêineres levam essa abstração a um nível superior, especificamente, além de compartilharem o hardware virtualizado subjacente, eles também compartilham um kernel de sistema operacional virtualizado subjacente. Contêineres oferecem o mesmo isolamento, escalabilidade e descartabilidade das VMs, mas, como não carregam a carga de sua própria instância de sistema operacional, são mais leves (ou seja, ocupam menos espaço) do que VMs. Eles são mais eficientes em recursos — eles permitem que você execute mais aplicativos em menos máquinas (virtuais e físicas), com menos instâncias de sistema operacional. Os contêineres são mais facilmente portáteis em ambientes de desktop, data center e nuvem. E eles são uma excelente opção para práticas de desenvolvimento Agile e DevOps .
"O que são contêineres?" fornece uma explicação completa dos contêineres e containerização. E a publicação do blog "Contêineres vs. VMs: Qual é a diferença?" apresenta um resumo completo das diferenças.
O que é Docker?
O Docker é a ferramenta mais popular para criar e executar contêineres Linux®. Embora formas iniciais de contêineres tenham sido introduzidas décadas atrás (com tecnologias como FreeBSD Jails e AIX Workload Partitions), os contêineres foram popularizados em 2013 quando o Docker os trouxe para as massas com uma nova implementação amigável para desenvolvedores e compatível com a nuvem.
O Docker começou como um projeto de código aberto, mas hoje também se refere à Docker Inc., a empresa que desenvolve o Docker, um conjunto de ferramentas de container comercial que se baseia no projeto de código aberto (e contribui com essas melhorias de volta para a comunidade de código aberto).
O Docker foi desenvolvido com base na tecnologia tradicional de contêineres Linux (LXC), mas permite uma virtualização mais granular dos processos do kernel Linux e adiciona recursos para tornar os contêineres mais fáceis de serem criados, implementados, gerenciados e protegidos pelos desenvolvedores.
Embora existam plataformas de container alternativas hoje em dia (como a Open Container Initiative (OCI), CoreOS e Canonical (Ubuntu) LXD), o Docker é tão amplamente preferido que é praticamente sinônimo de contêineres e às vezes é confundido como concorrente de tecnologias complementares, como o Kubernetes (veja o vídeo "Kubernetes vs. Docker: Não é uma Questão de Tudo ou Nada" mais abaixo).