¿Es Docker generalmente lo suficientemente sólido para la implementación en producción?

Hola,

Esta es una pregunta fuera de tema.

Estamos empaquetando y distribuyendo una aplicación web y sentimos la necesidad de cambiar el despliegue de deb/rpm al enfoque de contenedores para controlar las versiones de las dependencias (como una versión más reciente de Python en distribuciones antiguas).

He investigado sobre LXC/LXD y suena tentador para el método antiguo de desarrollar aplicaciones con el estado almacenado dentro del contenedor. Pero también necesitamos desplegar en RHEL/CentOS y el estado de los paquetes tanto de LXC como de LXD parece deplorable. Además, no parece que ni LXD ni LXC tengan futuro en el mundo de RHEL.

Me he resistido a Docker debido a varios problemas de diseño o seguridad que ha tenido a lo largo de los años, pero también debido al cambio de paradigma hacia los contenedores sin estado que nosotros, los de la vieja escuela, necesitamos adoptar.

¿Es Docker ahora una plataforma fiable para despliegues en producción pequeños y grandes donde la disponibilidad de la aplicación es realmente importante?

¿Y cuáles serían algunas de las mejores prácticas para empaquetar y distribuir aplicaciones con Docker?

Dado que Discourse se despliega exclusivamente en Docker y estoy seguro de que tiene despliegues a gran escala, parece el mejor lugar para hacer esta pregunta.

Gracias

Ejecutamos cientos de servidores en decenas de centros de datos, tanto en hardware dedicado como en la nube, y cada parte de la aplicación Discourse se ejecuta en contenedores Docker.

Docker tiene su justa parte de errores, pero para nosotros los beneficios superan los problemas.

Solo una cosa:

No sé exactamente a qué te refieres con esto, pero el estado a largo plazo, como los datos de una base de datos, generalmente se mantiene en volúmenes que se mapean al host.

¿Se sabe que los contenedores de Discourse funcionan sin problemas tanto en hosts con Ubuntu como con distribuciones RHEL (Ubuntu 18.04/16.04 y CentOS 7/8)?

¿Es esto lo esperado de Docker?

La mayoría de las personas utiliza Ubuntu; es el sistema operativo recomendado.

Gestionamos algunas implementaciones locales en CentOS 7 (por solicitud del cliente) sin ningún problema.

Partes relevantes del rol de Ansible:

- name: agregar el repositorio de 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 Docker
  package:
    name: "{{ item }}"
    state: present
  with_items:
  - docker-ce
  - docker-ce-cli
  - containerd.io

- name: asegurar que Docker se inicie y esté habilitado al arrancar
  service:
    name: docker
    state: started
    enabled: yes

Ejecutamos toda nuestra infraestructura en Debian. No hay RHEL en ningún lugar.