1,548 瀏覽數

Container & Docker

關於 Virtualization 虛擬化類別請參考 http://benjr.tw/3383

Container

Container 採用與 KVM 一樣的做法 (Linux 核心加入 KVM 再讓這 Linux 核心當作 VMM ,在 KVM 下的 Guest OS 對於 Linux 核心而言都只是一個 Process 行程). LXC 採用類似的方式在原作業系統中透過資源共享的方式,建立出一個獨立空間 (虛擬環境,有自己的 file system, process 與 block I/O ,network 空間) 給另外一個作業系統來使用,這邊不再稱它為虛擬機器 Virtual Machine 而是叫做 Container.

  1. Chroot & Schroot – http://benjr.tw/95942
  2. LXC (Linux Containers) 基礎介紹 – http://benjr.tw/95955
  3. LXC (Linux Containers) 的使用 – http://benjr.tw/93708
  4. LXC 的網路架構 – http://benjr.tw/96074

Docker

我們先來了解一下關於 Docker 基本的三個觀念. 容器 (Container) , 映像檔 (Image) , 倉庫 (Repository) .

  • 容器 (Container)
    在原作業系統中透過資源共享的方式,建立出一個獨立空間 (虛擬環境,有自己的 file system, process 與 block I/O ,network 空間) 給另外一個作業系統來使用,聽起來很像是虛擬機器 Virtual Machine 但方式不一樣,名稱也不太一樣,這樣的方式叫做 Container.
  • 映像檔 (Image)
    Container 是一個容器,我們需要將作業環境放到這一個容器,最快的方式就是透過網路下載別人已經做好的作業環境 (唯讀映像檔) 來使用,當然也是可以自己建立.因為這是一個唯讀的映像檔,所以容器啟動的時候還會提供資料可以寫入的一層地方.
  • 倉庫 (Repository)
    倉庫是用來存放映像檔的地方,預設會到 Docker Hub https://hub.docker.com 這個倉庫來找.
  1. Linux Docker 基礎介紹 – http://benjr.tw/95998
  2. Docker 的網路架構 – http://benjr.tw/96629
  3. 使用 Docker 的技術來架設 web server (Nginx) – http://benjr.tw/96590

那 Docker 是什麼? Docker 與 Container 的關聯是? 如下圖所示.
docker01

使用 Docker 用來管理 Container 可以讓 Container 的環境更為完善.

CoreOS

Container/Docker 是輕量級的虛擬化技術,而 CoreOS 是針對 Container/Docker 基於 Linux 內核所開發出來的輕量級作業系統,他提供了 Docker 所需要的基礎功能並可在叢集環境下運作.

  1. 安裝 CoreOS 無設定檔 http://benjr.tw/95959
  2. CoreOS 設定檔 http://benjr.tw/96511
  3. 關於 Hostname 設定檔的使用 – http://benjr.tw/96518
  4. 關於 ssh_authorized_keys 設定檔的使用 – http://benjr.tw/96318
  5. 關於 units 設定與使用方式 – http://benjr.tw/96332
  6. 關於 Network 設定與使用方式 – http://benjr.tw/96370

CoreOS 主要的服務

  1. ETCD2 (Service Discovery)
    etcd 是一種分散式的 key/value 儲存方式 (至少要有三個 node ,會把資料複製三份到個別的 node 作儲存,以確保資料的可靠度),不同於傳統的關聯式資料庫系統 (傳統的關聯式資料庫基本上就是一堆 tables),etc2 採用的是 key / value Stores 儲存,資料就只有 key / value Stores 採用 雜湊表 (Hash table) 是根據鍵 (Key) 來查詢 (noSQL 的方式) 存儲的資料結構.

  2. Container , Docker
    Container 與 Docker 設定與使用方式 – http://benjr.tw/96566
  3. Fleet (Cluster Management)
    Container 他是輕量級的虛擬化軟體,透過資源共享的方式,可以快速建立出一個獨立空間 (虛擬環境,有自己的 file system, process 與 block I/O ,network 空間) 給另外一個作業系統來使用,透過 Docker 的基本三元素. 容器 (Container) , 映像檔 (Image) , 倉庫 (Repository) .讓我們更方便管理 Container 的環境,但是要能做到 方便大量,分散式的 部署與管理,這時候就要透過 Fleet 來協助.

    關於 fleet 設定與使用方式 – http://benjr.tw/96502

  4. Flannel
    Container 網路要對外時需要設定 port-mapping 或是將網路設定成不同的模式,這時可以使用 flannel (SDN : Software Define Network) 來讓不同的 Host (CoreOS) 的 Container 之間透過虛擬網路來溝通.

    關於 Flannel 設定與使用方式 – http://benjr.tw/96562

發表迴響