Docker 是一個開源專案,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘專案。它基於 Google公司推出的 Go 語言實作。 專案後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,原始碼在 GitHub 上進行維護。
Docker 自開源後受到廣泛的關注和討論,以至於 dotCloud 公司後來都改名為 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支援 Docker;Google 也在其 PaaS 產品中廣泛應用。
Docker 專案的目標是實作輕量級的作業系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。
在 LXC 的基礎上 Docker 進行了進一步的封裝,讓使用者不需要去關心容器的管理,使得操作更為簡便。
使用者操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在作業系統層面上實作虛擬化,直接
使用本地主機的作業系統,而傳統方式則是在硬體層面實作。
對比傳統虛擬機總結
特性 | 容器 | 虛擬機 |
啟動 | 秒級 | 分鐘級 |
硬碟容量 | 一般為MB | 一般為GB |
效能 | 接近原生 | 比較慢 |
系統支援量 | 單機支援上千的容器 | 一般幾十個 |
Docker 包括三個基本概念
映像檔(Image)
一個映像檔可以包含一個完整的 ubuntu 作業系統環境,裡面僅安裝了 Apache 或使用者需要的其它應用程式。
容器(Container)
容器是從映像檔建立的執行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。
*註:映像檔是唯讀的,容器在啟動的時候建立一層可寫層作為最上層。
倉庫(Repository)
倉庫是集中存放映像檔檔案的場所。有時候會把倉庫和倉庫註冊伺服器(Registry)混為一談,並不嚴格區分。實際上,倉庫註冊伺服器上往往存放著多個倉庫,每個倉庫中又包含了多個映像檔,每個映像檔有不同的標籤(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的映像檔供使用者下載。 大陸的公開倉庫包括 DockerPool 等,可以提供大陸使用者更穩定快速的存取。
*註:Docker 倉庫的概念跟 Git 類似,註冊伺服器可以理解為 GitHub 這樣的託管服務
Docker 安裝
Ubuntu 系列安裝 Docker
透過系統內建套件安裝
$ sudo apt-get update
$ sudo apt-get install -y docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
安裝之後啟動 Docker 服務。
$ sudo service docker start
取得映像檔
可以使用 docker pull 命令從倉庫取得所需要的映像檔。
$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete
完成後,即可隨時使用該映像檔了,例如建立一個容器,讓其中執行 bash。
$ sudo docker run -t -i ubuntu:12.04 /bin/bash
root@fe7fc4bd8fc9:/#
留言列表