Imagens de pacotes e contêineres são duas maneiras de distribuir software, evitando conflitos, embora o façam usando abordagens bem diferentes.
Pacotes são pacotes de arquivos que são instalados por um gerenciador de pacotes , como RPM no RHEL ou APT no Ubuntu, que verifica se vários pacotes usam bibliotecas compatíveis , não use os mesmos nomes de arquivos, etc., antes de gravar os arquivos em um sistema de arquivos compartilhado. Os usuários podem então iniciar programas diretamente.
Os pacotes geralmente vêm de repositórios , e cabe às pessoas que executam os repositórios decidir qual pacote obtém o controle de cada nome de arquivo, porta de rede, ID de usuário do sistema, etc., bem como quais versões de programas são empacotados. Os pacotes são criados a partir de arquivos de especificação que listam quais arquivos devem ser incluídos.
OsPPAs (Personal Package Archives) permitem que indivíduos e pequenos grupos publiquem seus próprios pacotes, para softwares que ainda não foram aceitos nos repositórios principais.
Os contêineres são caixas de proteção em que um programa ou grupo de programas pode ser executado, isolados do restante do sistema. Graças ao suporte do kernel do Linux para namespaces por processo, eles só podem acessar seus próprios arquivos (com um diretório raiz e uma tabela de montagem separados), interfaces de rede, etc. (como uma forma muito mais abrangente de chroot).
Como um contêiner só pode acessar seus próprios arquivos, há imagens , conjuntos de arquivos que formam o estado inicial de um contêiner. Não há necessidade do mesmo tipo de coordenação dos pacotes, devido ao sandboxing. Cada contêiner inclui as versões específicas das bibliotecas necessárias.
ODocker é um gerenciador de contêineres: ele inicializa contêineres a partir de imagens especificadas, configura suas interfaces de rede, registra seus resultados, etc.
Ele também gerencia imagens: ele pode criá-las a partir de scripts chamados Dockerfiles e enviá-las e baixá-las do Docker Hub , um conjunto de repositórios (principalmente) controlados pelo usuário.
As duas abordagens podem ser combinadas: você pode criar uma imagem baseada em uma imagem mínima do RHEL ou do Ubuntu e instalar pacotes dentro dela usando o yum ou o apt-get rodando dentro de um container.
O inverso também poderia ser possível: um pacote poderia instalar uma imagem, embora eu não tenha ouvido falar de ninguém fazendo isso.
E, claro, a maneira mais fácil de instalar o próprio Docker é com um gerenciador de pacotes .
Da mesma forma, ainda existem funções para sistemas de gerenciamento de configuração, como o Puppet e o Chef: configurar contêineres no interior ou controlar quais contêineres são implantados em quais máquinas e conectá-los todos juntos.