天天看點

面向對象視角下,了解Docker 鏡像容器和倉庫

面向對象視角下,了解Docker 鏡像容器和倉庫

一、寫在前面

今天帶大家在面向對象的視角下,了解鏡像,容器和倉庫到底是什麼關系,相信大家讀完本文一定會有更深刻的了解。

注:面向對象語言有很多,本文基于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 鏡像容器和倉庫

Docker利用容器獨立運作一個或一組應用,應用或服務跑再容器裡,容器類似一個虛拟化的運作環境,可以把容器看作是一個簡易版的Linux環境(包含了root使用者權限,程序空間,使用者空間和網絡等)

容器是用鏡像建立的運作執行個體,就像面向對象的類模闆執行個體化對象一樣,容器為鏡像提供了一個隔離的運作環境,它可以被啟動、複制、停止、删除,每個容器都互相隔離,保證運作安全。

面向對象視角下,了解Docker 鏡像容器和倉庫

四、倉庫(repository)

倉庫(repository)是集中存放鏡像檔案的

Maven倉庫,存放管理各種 jar 包

github倉庫,存放各種git項目

Docker公司也提供了叫 docker hub的倉庫,存放各種鏡像模闆

分為 共有倉庫 和 私有倉庫 兩種,官方的倉庫位址如下:​​https://hub.docker.com​​

面向對象視角下,了解Docker 鏡像容器和倉庫

比如想要擷取 mysql 鏡像,隻需要一行指令就可以擷取了

docker pull mysql      

五、全文總結

Docker是一個容器運作載體,或者叫它容器運作的管理者。

開發者将開發的應用和配置依賴打包好,形成一個可傳遞的運作環境,這份環境呢,就是Image鏡像檔案,通過這個鏡像檔案就能生成Docker容器執行個體,這個過程可以了解為 Java 通過 new 類模闆建立對象。