Docker è generalmente abbastanza solido per il deployment in produzione?

Ehi,

Questa è una domanda fuori tema.

Stiamo impacchettando e distribuendo un’applicazione web e sentiamo la necessità di passare dal deployment in formato deb/rpm a quello basato sui container, per poter controllare le versioni delle dipendenze (ad esempio, una versione più recente di Python su distribuzioni più vecchie).

Ho dato un’occhiata a LXC/LXD e l’idea di sviluppare applicazioni nel vecchio stile, con lo stato memorizzato all’interno del container, sembra allettante. Tuttavia, dobbiamo anche effettuare il deployment su RHEL/CentOS e lo stato dei pacchetti sia per LXC che per LXD appare preoccupante. Inoltre, non sembra che né LXD né LXC abbiano un futuro nell’ecosistema RHEL.

Ho in qualche modo resistito all’adozione di Docker a causa di vari problemi di progettazione o sicurezza emersi nel corso degli anni, ma anche per il cambio di paradigma verso container senza stato (stateless), che noi “vecchi stampo” dobbiamo accettare.

Oggi Docker è una piattaforma affidabile per deployment in produzione, sia piccoli che grandi, dove l’uptime dell’applicazione è davvero cruciale?

E quali sarebbero le migliori pratiche per impacchettare e distribuire applicazioni con Docker?

Visto che Discourse viene distribuito esclusivamente tramite Docker e sono certo che abbia deployment di grandi dimensioni, sembra il posto migliore per porre questa domanda.

Grazie

Gestiamo centinaia di server in decine di data center, sia in bare metal che nel cloud, e ogni componente dell’applicazione Discourse viene eseguito in container Docker.

Docker ha senz’altro i suoi problemi, ma per noi i vantaggi superano gli inconvenienti.

Solo una precisazione:

Non sono sicuro di cosa intendiate esattamente, ma lo stato a lungo termine, come i dati di un database, viene solitamente conservato in volumi mappati sull’host.

È noto che i container Discourse funzionino senza problemi sia su host con Ubuntu sia con distribuzioni RHEL (Ubuntu 18.04/16.04 e CentOS 7/8)?

Ciò è previsto da Docker?

La maggior parte delle persone utilizza Ubuntu, che è il sistema operativo consigliato.

Gestiamo alcune distribuzioni on-premise su CentOS 7 (su richiesta del cliente) senza alcun problema.

Parti rilevanti del ruolo Ansible:

- name: aggiungi repository 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: installa Docker
  package:
    name: "{{ item }}"
    state: present
  with_items:
  - docker-ce
  - docker-ce-cli
  - containerd.io

- name: assicurati che Docker sia avviato e abilitato all'avvio
  service:
    name: docker
    state: started
    enabled: yes

Gestiamo tutta la nostra infrastruttura su Debian. Nessun RHEL in giro.