Qual é a diferença entre o Docker Compose e o Kubernetes?

329

Ao mergulhar no Docker, no Google Cloud e no Kubernetes, e sem entender claramente os três ainda, parece-me que esses produtos se sobrepõem, mas não são compatíveis.

Por exemplo, um docker-compose.ymlarquivo precisa ser reescrito para que um aplicativo possa ser implantado no Kubernetes.

Alguém poderia fornecer uma descrição aproximada e de alto nível de onde o Docker, o Docker Compose, o Docker Cloud e o Kubernetes se sobrepõem e onde um depende do outro?

George Katsanos
fonte

Respostas:

482

Docker :

  • O Docker é a tecnologia de contêiner que permite que você contenha seus aplicativos.
  • O Docker é o núcleo do uso de outras tecnologias.

Docker Compose

  • O Docker Compose permite configurar e iniciar vários contêineres do Docker.
  • O Docker Compose é usado principalmente como auxiliar quando você deseja iniciar vários contêineres do Docker e não deseja iniciar cada um separadamente usando docker run ....
  • O Docker Compose é usado para iniciar contêineres no mesmo host.
  • O Docker Compose é usado em vez de todos os parâmetros opcionais ao criar e executar um único contêiner do docker.

Docker Swarm

  • O Docker Swarm serve para executar e conectar contêineres em vários hosts.
  • O Docker Swarm é uma ferramenta de gerenciamento e orquestração de cluster de contêineres.
  • Ele gerencia contêineres em execução em vários hosts e faz coisas como dimensionamento, iniciando um novo contêiner quando um trava, contêineres em rede ...
  • O Docker Swarm é o Docker em produção. É a ferramenta de orquestração nativa do Docker incorporada ao mecanismo do Docker.
  • O arquivo Docker Swarm chamado arquivo de pilha é muito semelhante a um arquivo Docker Compose.

Kubernetes

  • Kubernetes é uma ferramenta de orquestração de contêineres desenvolvida pelo Google.
  • O objetivo do Kubernetes é muito semelhante ao do Docker Swarm.

Docker Cloud

  • Um serviço docker corporativo pago que permite criar e executar contêineres em servidores em nuvem ou servidores locais.
  • Ele fornece uma UI da Web e um painel de controle central para executar e gerenciar contêineres, ao mesmo tempo em que fornece todos os recursos do Docker em uma interface da Web amigável ao usuário.

Atualizar:

Nuvem Docker "parcialmente" descontinuada

Os serviços no Docker Cloud que fornecem gerenciamento de aplicativos, nós e grupos de enxames serão encerrados em 21 de maio de 2020 ... compilações automatizadas e serviços de armazenamento de registro, não serão afetados e continuarão disponíveis

yamenk
fonte
Tudo bem, sobre a última coisa "A nuvem do Docker permite executar contêineres ..." praticamente, o que você pode fazer com a execução desses contêineres na nuvem? eles podem fornecer pontos de extremidade acessados ​​publicamente? essencialmente, uma nuvem docker é algo como a AWS, mas para contêineres docker? (ou é apenas uma biblioteca recipiente para descoberta)
George Katsanos
2
Ok desculpe. Acho que ainda estou confuso. Então, isso significa que o docker-compose é como o Kubernetes, pois é usado para orquestrar contêineres localmente e é mais conveniente para o desenvolvimento local ou o Kubernetes é muito mais do que isso?
Vipin Menon
6
É justo fazer a seguinte analogia 1. docker-compose <> minikube 2. docker-swarm <> cluster kubernetes 3. cluster docker-cloud <> gerenciado cluster kubernetes por GCP, AWS, etc
Anoop
1
"O enxame do Docker é para executar e CONECTAR contêineres em vários hosts." : O que significa "conectar" significa aqui? Conexão de rede?
someone_ smiley
1
@someone_smiley Sim. Cria uma rede de sobreposição
OneCricketeer 25/03
136

Além da resposta de @ yamenk , gostaria de adicionar alguns detalhes aqui que podem ajudar as pessoas em sua jornada de entendimento do Kubernetes.

Resposta curta:

  • docker-compose: é uma ferramenta que utiliza um arquivo YAML que descreve seu aplicativo com vários contêineres e ajuda a criar , iniciar / parar , remover todos esses contêineres sem precisar digitar vários docker ...comandos para cada contêiner.
  • Kubernetes: é uma plataforma para gerenciar cargas de trabalho e serviços em contêiner , que facilita a configuração declarativa e a automação. O que? 🤔 Continue lendo ...

Docker Compose

(dos documentos): Compose é uma ferramenta para definir e executar aplicativos Docker de vários contêineres. Com o Compose, você usa um arquivo YAML para configurar os serviços do seu aplicativo. Em seguida, com um único comando, você cria e inicia todos os serviços da sua configuração.

O Compose possui comandos para gerenciar todo o ciclo de vida do seu aplicativo:

  • Iniciar, parar e reconstruir serviços
  • Exibir o status dos serviços em execução
  • Transmita a saída de log dos serviços em execução
  • Execute um comando único em um serviço

Kubernetes

(da Introdução ao Kubernetes ): O Kubernetes é um orquestrador de contêineres como Docker Swarm, Maratona de Mesos, Amazon ECS, Hashicorp Nomad . Os orquestradores de contêiner são as ferramentas que agrupam hosts para formar um cluster e nos ajudam a garantir que os aplicativos:

  • são tolerantes a falhas,
  • pode escalar e fazer isso sob demanda
  • use os recursos de maneira ideal
  • podem descobrir outros aplicativos automaticamente e se comunicar
  • são acessíveis a partir do mundo externo
  • pode atualizar / reverter sem nenhum tempo de inatividade.

Muitas pessoas argumentam que Kubernetes é difícil de aprender. É porque resolve uma série de problemas e as pessoas tentam entender sem conhecer todos os pré-requisitos. Isso torna complicado. Comece a montar as peças do quebra-cabeça lendo sobre conceitos / termos como os seguintes. Esse processo ajudará você a entender os tipos de problemas que o Kubernetes tenta resolver:

  • Aplicativos de 12 fatores,
  • Embalagem automática,
  • Mecanismos de autocura,
  • Escala horizontal,
  • Descoberta de serviços e balanceamento de carga,
  • Lançamentos e reversões automatizados,
  • Implantações azul esverdeado / implantações Canárias
  • Segredos e gerenciamento de configuração,
  • Orquestração de armazenamento

E como existem muitas coisas diferentes em relação aos contêineres e seu gerenciamento, fique de olho no cenário do Cloud Native:

Versão interativa aqui: landscape.cncf.io/

insira a descrição da imagem aqui

Atualizações

Maio de 2020: a Docker Compose Specification agora é um padrão aberto

Trabalhando com a AWS, Microsoft e outros na comunidade de código aberto, estendemos a Especificação de composição para oferecer suporte a plataformas nativas da nuvem como Kubernetes e Amazon ECS, além das plataformas de composição existentes. Mais aqui: blog / compose-spec.io

tgogos
fonte
Esta resposta está desatualizada. docker.com/blog/…
OneCricketeer 25/03
1
Obrigado @ cricket_007 Vou ficar de olho nisso, mas acho que esta postagem de blog de 2018 é uma espécie de ... "marketing". É 2020 e se você verificar os documentos na referência da versão 3 do arquivo Docker Compose e Compose, não há nada sobre o Kubernetes.
tgogos 26/03
Assim? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
oh, incrível que exista uma camada de composição que abstraia toda a sintaxe do kubernetes! Obrigado @ cricket_007.
George Katsanos 25/04
28

Se você estiver em contêineres em rede com o mesmo host, vá para a composição do docker .

Se você estiver contêineres de rede em vários hosts, escolha kubernetes .

Aniket Alhat
fonte
2
Esse é o tipo de resposta que eu estava esperando! Embora possa ter mais explicações, a parte "tl; dr" é realmente o ponto. Nenhuma das outras respostas diz isso!
O Padrinho
8

A primeira distinção é entre o mecanismo do contêiner e o orquestrador de contêineres.

docker é um mecanismo de contêiner, faz com que você construa e execute normalmente não mais que um contêiner, no máximo, localmente no seu PC para fins de desenvolvimento.

docker-compose é um utilitário do Docker para executar vários contêineres e permitir que eles compartilhem volumes e redes através dos recursos do mecanismo do docker, executa localmente para emular a composição do serviço e remotamente nos clusters.

O Kubernetes é uma plataforma de orquestração de contêineres, que cuida da execução de contêineres e aprimora os recursos do mecanismo para que os contêineres possam ser compostos e dimensionados para atender a aplicativos complexos (tipo de PaaS, gerenciado por você ou por um provedor em nuvem). O principal recurso do Kubernetes é dissociar a infraestrutura do aplicativo usando contêineres e também está aberto para outros mecanismos que o Docker, por exemplo, pode executar contêineres com rkt ou cri-o.

A nuvem do Docker também é uma oferta PaaS que permite executar e orquestrar contêineres por meio da dockerAPI do mecanismo.

Agora, dependendo de suas necessidades, nível de controle na infraestrutura e público-alvo, você pode usar o Kubernetes no baremetal, ou o Azure ACS ou o Google GKE, etc ...

Espero que isso tenha ajudado :) Atenciosamente

Francesco Gualazzi
fonte
1
Estou um pouco confuso, por que você normalmente executa apenas um contêiner na janela de encaixe? Embora eu ache que a composição do Docker é uma solução melhor, não há nada que o impeça de iniciar vários contêineres sem ela!
Peter Peter
ah sim, às vezes eu tenho um mysql rodando em segundo plano e inicio o httpd e o nginx como contêineres autônomos ... mas quando eu quero que tudo seja automatizado, definitivamente criarei um docker-compose.yml para especificar dependências, redes, etc. ..
Francesco Gualazzi
6

O Docker Compose não é uma ferramenta pronta para produção. Ele funciona muito bem para ambientes de PoC ou desenvolvimento, mas não possui muitos recursos que são mais ou menos importantes para uso sério da produção. O Swarm está mais pronto para a produção, mas eu nunca investiria no Swarm em um cenário greenfield. O Kubernetes venceu a batalha de orquestração, como evidenciado por sua inclusão no Docker Desktop e por ser oferecido por todos os principais provedores de nuvem. O Kubernetes é muito mais capaz e possui muito mais suporte comunitário e corporativo.

Eu recomendaria mergulhar em alguns dos tutoriais do Kubernetes disponíveis no Pluralsight, Linux Academy etc. e criar um cluster para brincar na sua plataforma de nuvem preferida (EKS, AKS, GKE etc.). Se você está tentando usar o bare metal, dê uma olhada no OpenShift, mas reconheça que você perde um pouco da magia do Kubernetes nesta configuração.

Ashok Reddy
fonte
Concordou que os k8s "venceram" (por enquanto). Mas o Mesos costumava ser chamado de padrão-ouro para os clusters de produção . O DC / OS fez um bom trabalho ao expandir os recursos da empresa, mas agora você pode até executar vários clusters k8s em um ambiente Mesos e acessá-los a partir de uma única plataforma independente de fornecedor, o que é realmente melhor?
OneCricketeer 25/03
3

Composição do Docker:

Em um docker-compose.ymlarquivo, cada entrada pode, opcionalmente, docker-composecriar uma imagem. cada entrada pode representar um único contêiner que queremos criar e cada entrada define os requisitos ou portas de rede.

Kubernetes:

O Kubernetes espera que todas as imagens já sejam construídas e existe um arquivo de configuração por objeto que queremos criar e temos que configurar manualmente todas as redes.

Portanto, garantimos que nossa imagem esteja hospedada no Docker Hub, crie um arquivo de configuração para criar o contêiner e um arquivo de configuração para configurar a rede.

Daniel
fonte
1

O Docker-Compose é um arquivo de implantação que predefiniu um ou mais contêineres com seu ambiente, como volumes, rede, um comando para executar e assim por diante.

O Kubernetes, por outro lado, é um sistema que orquestra contêineres de docker e outros microsserviços e os torna escalonados e confiáveis ​​em vários nós

Yaniv Hakim
fonte
1

Composição do Docker: os contêineres do Docker podem ser executados diretamente sem a ajuda de qualquer arquivo yaml. Porém, com o auxílio do Docker, as propriedades do contêiner da ferramenta podem ser definidas dentro de um arquivo chamado arquivo docker-compose.yml. encontre o arquivo yml de amostra abaixo para obter mais detalhes.

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

nome da imagem, número de réplicas, etc. pode ser configurado através do arquivo yml.

Kubernetes: Esta é a plataforma de gerenciamento de contêiner executada sobre o Docker criado pelo Google. O Docker swam é outra plataforma de gerenciamento de contêiner criada pelo próprio docker. O Kubernetes também fornece a facilidade de salvar a configuração relacionada aos pods (corresponde ao contêiner na janela de encaixe) no arquivo yaml como o docker compor. arquivo yaml de exemplo

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

aqui também podem ser fornecidas imagens, portas a serem abertas e pod para hospedar mapeamentos de portas, etc. como o docker compor, o kubectl apply -f é o comando para executar este arquivo.

Nalin Kularathna
fonte
Então, qual a diferença? =)
O Padrinho
docker compose é um console para executar imagens do docker e o kubernetes não é como se fosse um sistema de orquestração de contêineres. então esses dois não podem ser comparados e totalmente diferentes. mas o kubernetes tem o kubectl, também é um console e semelhante ao docker compor
Nalin Kularathna