Docker Pet 這個(gè)概念其實(shí)是來(lái)源于 Docker 容器技術(shù)的應(yīng)用,它與 Docker Swarm、Kubernetes 都屬于 Docker 生態(tài)圈的產(chǎn)品。Docker Pet 最早是由 Docker 公司的員工 Ben Firshman 和 Adrian Mouat 提出的。所謂“Pet”也就是指那些被視為有生命力的業(yè)務(wù)服務(wù)程序,例如數(shù)據(jù)庫(kù)服務(wù)、緩存服務(wù)等,它們都是生產(chǎn)環(huán)境中不可或缺的組成部分。
與“Pet”相對(duì)的就是“Cattle”(“牛群”),它們是那些對(duì)于公司的核心業(yè)務(wù)影響較小的服務(wù),例如 Web 服務(wù)器、API 服務(wù)器等。
通常情況下,開(kāi)發(fā)人員在創(chuàng)建一個(gè)新項(xiàng)目時(shí)會(huì)盡可能地輕便、小型化來(lái)確保它的快速驗(yàn)證;這對(duì)于開(kāi)發(fā)測(cè)試環(huán)境來(lái)說(shuō),是非常有利的。但是這種輕量化的設(shè)計(jì)往往無(wú)法滿足生產(chǎn)環(huán)境下的服務(wù)要求。當(dāng)部署到生產(chǎn)環(huán)境后,如果這些服務(wù)不能保持穩(wěn)定,并存在著業(yè)務(wù)故障,那么這就是一個(gè)很大的問(wèn)題。在生產(chǎn)環(huán)境中,這些業(yè)務(wù)服務(wù)被人們視為具有生命力的業(yè)務(wù)程序,必須被細(xì)心呵護(hù)。
針對(duì)這種局面,Docker 公司提出了 Docker Pet 的概念,以解決這個(gè)問(wèn)題。在 Docker Pet 中,每個(gè)容器實(shí)例都必須使用唯一的名稱和 ID。Docker Pet 中每一個(gè)容器都是獨(dú)一無(wú)二、不可復(fù)制的,且它有自己的內(nèi)部存儲(chǔ)持久化數(shù)據(jù),例如數(shù)據(jù)庫(kù)服務(wù)會(huì)有自己的數(shù)據(jù)文件存儲(chǔ)。
相比于輕量化的 Cattle 系統(tǒng),Pet 系統(tǒng)在生產(chǎn)環(huán)境下更為合適,而且由于 Pet 系統(tǒng)中每個(gè)容器都是絕對(duì)唯一的,所以對(duì)于容器實(shí)例的管理、監(jiān)控、故障追蹤也更加容易。
# Dockerfile for a MySQL server pet FROM mysql ENV MYSQL_ALLOW_EMPTY_PASSWORD=yes COPY pet/my.cnf /etc/mysql/conf.d/my.cnf CMD ["mysqld"]