Docker é:
- Uma empresa?
- Uma tecnologia?
- Um produto?
- Um padrão?
A respota certa são todas as respostas acima. Docker é uma tecnologia de conteinerização (2) criada pela empresa Docker Inc. (1) que acabou gerando uma série de produtos como Docker Hub (3), mas posteriormente foi aberto para CNCF como um padrão chamado containerd.io (4).
Ao contrário da virtualização, a conteinerização consiste em se criar processos isolados dentro de um sistema operacional usando uma série de tecnologias do proprio Kernel do SO. Como falamos de Kernel, já estamos afirmando que ele surgiu no ambiente Linux, mas sistemas operacionais como o Windows já se mostraram capazes de criar containeres, mesmo não sendo popular.
Um container é um padrão de componente que permite o empacotamento de aplicações e suas dependências em uma forma de fácil distribuição. Ao executar uma aplicação baseada em containers, não dependemos de nenhuma dependência além da plataforma de conteinerização.
Docker se baseia em algumas tecnologias já existentes no Linux.
Copy On Write é uma técnica que permite a criação de uma estrutura de arquivos por camada. Cada camada altera a anterior e camadas podem ser compartilhadas com processos diferentes.
cgroups é uma feature do Linux que permite controlar o tanto de recurso (CPU, Memória, I/O) que um processo pode utilizar.
iptables é um programa Linux que permite criar regras de redirecionamento de portas dentro do Linux.
Linux Namespaces permite o compartilhamento, e o isolamento, de recursos do SO dentro do Linux. Similar ao cgroups, mas se refere a outros tipos de recursos. Por exemploe: PIDs, nomes de arquivos, hostnames, etc...