一、寫在前面
今天帶大家在面向對象的視角下,了解鏡像,容器和倉庫到底是什麼關系,相信大家讀完本文一定會有更深刻的了解。
注:面向對象語言有很多,本文基于Java語言進行描述
二、鏡像【類】 容器【對象】
首先建立一個類,用來模拟 Docker 中的一個鏡像 tomcat8,其中暴露了一個擷取版本号和啟動的方法
/**
* 模拟 Docker 中的鏡像 Image
* 假設這個類就是一個tomcat8的鏡像
*/
public class Tomcat8 {
// 版本号 8.0
private String version = "8.0";
// 擷取版本号
public String getVersion() {
return version;
}
// 啟動方法
public void run(){
System.out.println("Tomcat8 running...");
}
}
建立了一個tomcat8,相當于docker run tomcat8 擷取容器,它是獨立的,互不影響的,于是我可以基于類模闆再建立一個 tomcat8,這樣就獲得了兩個獨立隔離的 tomcat8 服務
public class test {
public static void main(String[] args) {
// 相當于Docker中運作了一次鏡像,獲得了一個容器 container
// 它是獨立的,不互相影響的
Tomcat8 t1 = new Tomcat8();
// 又運作了一次鏡像,又獲得了一個容器 container
Tomcat8 t2 = new Tomcat8();
System.out.println(t1.getVersion());
System.out.println(t2.getVersion());
t1.run();
t2.run();
}
}
看看結果,完全沒問題
8.0
8.0
Tomcat8 running...
Tomcat8 running...
三、總結鏡像和容器關系
Docker鏡像檔案類似于Javaa類模闆,容器執行個體類似于Java中new出來的執行個體對象
Docker利用容器獨立運作一個或一組應用,應用或服務跑再容器裡,容器類似一個虛拟化的運作環境,可以把容器看作是一個簡易版的Linux環境(包含了root使用者權限,程序空間,使用者空間和網絡等)
容器是用鏡像建立的運作執行個體,就像面向對象的類模闆執行個體化對象一樣,容器為鏡像提供了一個隔離的運作環境,它可以被啟動、複制、停止、删除,每個容器都互相隔離,保證運作安全。
四、倉庫(repository)
倉庫(repository)是集中存放鏡像檔案的
Maven倉庫,存放管理各種 jar 包
github倉庫,存放各種git項目
Docker公司也提供了叫 docker hub的倉庫,存放各種鏡像模闆
分為 共有倉庫 和 私有倉庫 兩種,官方的倉庫位址如下:https://hub.docker.com
比如想要擷取 mysql 鏡像,隻需要一行指令就可以擷取了
docker pull mysql
五、全文總結
Docker是一個容器運作載體,或者叫它容器運作的管理者。
開發者将開發的應用和配置依賴打包好,形成一個可傳遞的運作環境,這份環境呢,就是Image鏡像檔案,通過這個鏡像檔案就能生成Docker容器執行個體,這個過程可以了解為 Java 通過 new 類模闆建立對象。