Docker は本番環境のデプロイに一般的に十分な堅牢さを持っていますか?

こんにちは、

これはオフトピックの質問になります。

Web アプリケーションのパッケージ化と配布を行っており、依存関係のバージョン管理(古いディストリビューションでの新しい Python バージョンの導入など)を制御するため、deb/rpm によるデプロイからコンテナ方式への移行を検討しています。

LXC/LXD を調べましたが、状態をコンテナ内部に保持する従来のアプリケーション開発手法には魅力的に思えます。しかし、RHEL/CentOS へのデプロイも必要であり、LXC と LXD のパッケージの状態は非常に不安定です。また、RHEL の世界において LXD も LXC も将来性があるようには見えません。

長年にわたる設計上の問題やセキュリティ上の懸念、そしてステートレスなコンテナというパラダイムシフト(これは私たちのような古参の開発者が受け入れなければならないものです)を理由に、これまで Docker への抵抗感がありました。

現在、Docker はアプリの稼働時間が極めて重要な小規模から大規模な本番環境において、信頼できるプラットフォームと言えるのでしょうか?

また、Docker を用いたアプリのパッケージ化と配布に関するベストプラクティスは何でしょうか?

Discourse は Docker のみでデプロイされており、大規模な導入事例もあると聞いていますので、この質問をするには最適な場所だと考えました。

よろしくお願いいたします。

数十のデータセンターにわたって数百台のサーバーを裸の金属サーバーとクラウドの両方で運用しており、Discourse アプリのすべての部分は Docker コンテナ上で実行されています。

Docker にはそれなりのバグもありますが、私たちにとってはメリットの方が問題を上回っています。

ただ一点だけ:

これについて具体的に何を意味しているのかはわかりませんが、データベースデータのような長期的な状態は通常、ホストにマッピングされるボリュームに保持されます。

Discourseコンテナは、UbuntuおよびRHELディストリビューション(Ubuntu 18.04/16.04、CentOS 7/8)をホストとして使用する場合、問題なく動作することが知られていますか?

これはDockerにおいて想定される動作ですか?

大多数のユーザーは Ubuntu を使用しており、これが推奨される OS です。

顧客の要望により、オンプレミス環境での CentOS 7 へのデプロイを数件管理していますが、問題なく運用できています。

Ansible ロールの関連部分:

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

- name: ensure docker is started and enabled at boot
  service:
    name: docker
    state: started
    enabled: yes

当社のインフラストラクチャ全体は Debian で稼働しています。RHEL はどこでも使用していません。