Docker 是否通常足够稳健,可用于生产部署?

嘿,

这是一个题外问题。

我们正在打包和分发一个 Web 应用程序,觉得有必要将 deb/rpm 部署方式改为容器化部署,以便控制依赖版本(例如在较旧的系统上运行更新的 Python 版本)。

我研究过 LXC/LXD,对于那种将状态存储在容器内的传统应用开发方式来说,听起来很有吸引力。但我们还需要部署到 RHEL/CentOS 系统,而这两个平台上 LXC 和 LXD 的包状态看起来都很糟糕。而且,LXD 和 LXC 在 RHEL 生态中似乎都没有未来。

多年来,由于 Docker 存在各种设计或安全问题,以及我们需要适应无状态容器的范式转变(这对我们这些老派开发者来说是个挑战),我一直对 Docker 有所保留。

那么,Docker 现在是否已成为一个可靠的平台,适用于对应用正常运行时间至关重要的中小型及大型生产环境部署?

另外,使用 Docker 进行应用打包和分发有哪些最佳实践?

由于 Discourse 完全基于 Docker 部署,且我确信它拥有大规模部署案例,因此这里似乎是提出这个问题的最佳场所。

谢谢

我们在数十个数据中心运行着数百台服务器,涵盖裸机和云环境,Discourse 应用的每个部分都运行在 Docker 容器中。

Docker 确实有不少 bug,但对我们而言,其优势远大于问题。

只有一点:

我不太确定您具体指的是什么,但像数据库数据这样的长期状态,通常保存在映射到宿主机的卷中。

已知 Discourse 容器在 Ubuntu 和 RHEL 发行版(Ubuntu 18.04/16.04 和 CentOS 7/8)的主机上都能正常运行吗?

这是否是 Docker 的预期行为?

大多数人使用 Ubuntu,它是推荐的操作系统。

我们根据客户要求管理了几处 CentOS 7 的本地部署,运行没有任何问题。

Ansible 角色的相关部分:

- name: 添加 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: 安装 Docker
  package:
    name: "{{ item }}"
    state: present
  with_items:
  - docker-ce
  - docker-ce-cli
  - containerd.io

- name: 确保 Docker 已启动并在开机时启用
  service:
    name: docker
    state: started
    enabled: yes

我们所有的基础设施都运行在 Debian 上,没有任何 RHEL 环境。