Você pode encontrar a palestra de Mark Shuttleworth "Por que precisamos de um contêiner diferente apenas para aplicativos" no Container Camp relevante a sua pergunta. Ele fala geralmente sobre VMs, contêineres e Docker no início, continuando com snaps e como eles se encaixam em cerca de nove minutos. Aqui está meu resumo:
- Diferentes tipos de contêineres têm a mesma aparência, mas são usados para finalidades diferentes.
- Os contêineres não existem realmente no nível do kernel. Diferentes tipos de ilusões são possíveis. Independentemente, podemos criar ilusões sobre quais usuários, rede, disco e processos um contêiner vê.
- Diferentes tipos de contêineres são, na verdade, sobre diferentes classes de ilusões criadas.
- Os snaps são:
- Imutável, mas ainda faz parte do sistema básico.
- Integrado em termos de rede, compartilhe o endereço IP do sistema, ao contrário do Docker, em que cada contêiner recebe seu próprio endereço IP.
- Em outras palavras, o Docker nos dá uma coisa lá . Snaps nos dá uma coisa aqui . Por exemplo, em um desktop, um instantâneo fornece um aplicativo diretamente.
- Um piscar de olhos não pode poluir o resto do sistema. Está na sua própria caixa. Mas ainda pode ver (somente leitura) o resto do sistema, o que permite que ele fale e se integre ao sistema.
Você perguntou sobre diferentes casos de uso em comparação ao Docker. Aqui está um que os snaps podem fazer, mas o Docker não pode: aplicativos de desktop. Terceiros podem enviar aplicativos de desktop usando snaps e os usuários podem instalá-los e atualizá-los facilmente. Um contêiner do Docker não pode (facilmente) interagir com o usuário graficamente na tela, carregar documentos do diretório pessoal do usuário ou fornecer videoconferência através da webcam do usuário. Snaps podem (uma vez dada permissão).
Você pode perguntar como isso é melhor do que usar os PPAs. Mas, em comparação com o Docker, é como perguntar como o Docker é melhor do que instalar manualmente dependências em um sistema. É melhor, mas exatamente como provavelmente seria melhor respondida em uma pergunta separada e não específica do Docker.