O Docker é geralmente sólido o suficiente para implantação em produção?

Olá,

Esta é uma pergunta fora do tópico.

Estamos empacotando e distribuindo uma aplicação web e sentimos a necessidade de mudar a implantação via deb/rpm para a abordagem baseada em contêineres, a fim de controlar as versões das dependências (como uma versão mais recente do Python em distribuições mais antigas).

Pesquisei sobre LXC/LXD e a ideia de desenvolver aplicações com estado armazenado dentro do contêiner parece atraente. No entanto, também precisamos implantar em RHEL/CentOS, e o estado dos pacotes tanto do LXC quanto do LXD parece lamentável nessas distribuições. Além disso, não parece que o LXD ou o LXC tenham um futuro no ecossistema RHEL.

Resisti um pouco ao Docker devido a vários problemas de design ou segurança que ele teve ao longo dos anos, além da mudança de paradigma para contêineres sem estado que nós, da velha guarda, precisamos abraçar.

O Docker é hoje uma plataforma confiável para implantações em produção, tanto pequenas quanto grandes, onde o tempo de atividade da aplicação é realmente importante?

E quais seriam as melhores práticas para empacotar e distribuir aplicações com Docker?

Como o Discourse é implantado exclusivamente via Docker e tenho certeza de que possui implantações de grande escala, parece ser o melhor lugar para fazer essa pergunta.

Obrigado

Estamos executando centenas de servidores em dezenas de data centers, tanto em bare metal quanto na nuvem, e todas as partes do aplicativo Discourse são executadas em contêineres Docker.

O Docker tem sua cota de bugs, mas para nós os benefícios superam os problemas.

Apenas uma coisa:

Não sei exatamente o que você quer dizer com isso, mas estado de longo prazo, como dados de banco de dados, geralmente é mantido em volumes que mapeiam para o host.

É sabido que os containers do Discourse funcionam sem problemas tanto em hosts com Ubuntu quanto em distribuições RHEL (Ubuntu 18.04/16.04 e CentOS 7/8)?

Isso é esperado pelo Docker?

A maioria das pessoas usa o Ubuntu, que é o sistema operacional recomendado.

Gerenciamos algumas implantações locais no CentOS 7 (por solicitação do cliente) sem nenhum problema.

Partes relevantes da função do Ansible:

- name: adicionar repositório do Docker (CentOS)
  get_url:
    url: "https://download.docker.com/linux/centos/docker-ce.repo"
    dest: '/etc/yum.repos.d/docker-ce.repo'
    owner: root
    group: root
    mode: 0644
  when: ansible_distribution == 'CentOS'

- name: instalar o Docker
  package:
    name: "{{ item }}"
    state: present
  with_items:
  - docker-ce
  - docker-ce-cli
  - containerd.io

- name: garantir que o Docker esteja iniciado e habilitado na inicialização
  service:
    name: docker
    state: started
    enabled: yes

Nossa infraestrutura inteira roda em Debian. Não há RHEL em lugar nenhum.