嘿,
这是一个题外问题。
我们正在打包和分发一个 Web 应用程序,觉得有必要将 deb/rpm 部署方式改为容器化部署,以便控制依赖版本(例如在较旧的系统上运行更新的 Python 版本)。
我研究过 LXC/LXD,对于那种将状态存储在容器内的传统应用开发方式来说,听起来很有吸引力。但我们还需要部署到 RHEL/CentOS 系统,而这两个平台上 LXC 和 LXD 的包状态看起来都很糟糕。而且,LXD 和 LXC 在 RHEL 生态中似乎都没有未来。
多年来,由于 Docker 存在各种设计或安全问题,以及我们需要适应无状态容器的范式转变(这对我们这些老派开发者来说是个挑战),我一直对 Docker 有所保留。
那么,Docker 现在是否已成为一个可靠的平台,适用于对应用正常运行时间至关重要的中小型及大型生产环境部署?
另外,使用 Docker 进行应用打包和分发有哪些最佳实践?
由于 Discourse 完全基于 Docker 部署,且我确信它拥有大规模部署案例,因此这里似乎是提出这个问题的最佳场所。
谢谢
Falco
(Falco)
2
我们在数十个数据中心运行着数百台服务器,涵盖裸机和云环境,Discourse 应用的每个部分都运行在 Docker 容器中。
Docker 确实有不少 bug,但对我们而言,其优势远大于问题。
只有一点:
我不太确定您具体指的是什么,但像数据库数据这样的长期状态,通常保存在映射到宿主机的卷中。
已知 Discourse 容器在 Ubuntu 和 RHEL 发行版(Ubuntu 18.04/16.04 和 CentOS 7/8)的主机上都能正常运行吗?
这是否是 Docker 的预期行为?
RGJ
(Richard - Communiteq)
4
大多数人使用 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
Falco
(Falco)
5
我们所有的基础设施都运行在 Debian 上,没有任何 RHEL 环境。