Docker Pet 这个概念其实是来源于 Docker 容器技术的应用,它与 Docker Swarm、Kubernetes 都属于 Docker 生态圈的产品。Docker Pet 最早是由 Docker 公司的员工 Ben Firshman 和 Adrian Mouat 提出的。所谓“Pet”也就是指那些被视为有生命力的业务服务程序,例如数据库服务、缓存服务等,它们都是生产环境中不可或缺的组成部分。
与“Pet”相对的就是“Cattle”(“牛群”),它们是那些对于公司的核心业务影响较小的服务,例如 Web 服务器、API 服务器等。
通常情况下,开发人员在创建一个新项目时会尽可能地轻便、小型化来确保它的快速验证;这对于开发测试环境来说,是非常有利的。但是这种轻量化的设计往往无法满足生产环境下的服务要求。当部署到生产环境后,如果这些服务不能保持稳定,并存在着业务故障,那么这就是一个很大的问题。在生产环境中,这些业务服务被人们视为具有生命力的业务程序,必须被细心呵护。
针对这种局面,Docker 公司提出了 Docker Pet 的概念,以解决这个问题。在 Docker Pet 中,每个容器实例都必须使用唯一的名称和 ID。Docker Pet 中每一个容器都是独一无二、不可复制的,且它有自己的内部存储持久化数据,例如数据库服务会有自己的数据文件存储。
相比于轻量化的 Cattle 系统,Pet 系统在生产环境下更为合适,而且由于 Pet 系统中每个容器都是绝对唯一的,所以对于容器实例的管理、监控、故障追踪也更加容易。
# Dockerfile for a MySQL server petFROM mysqlENV MYSQL_ALLOW_EMPTY_PASSWORD=yesCOPY pet/my.cnf /etc/mysql/conf.d/my.cnfCMD ["mysqld"]