centos6.5 安裝docker
防僞碼:吃的苦中苦,方爲人上人!
前言:在當今的主流社會中,docker和openstatick是一大主流方向,下面爲大家講解理論知識和實際操作現實中的docker!
理論知識:
相信大家都知道docker是什麼?那在這裏就不多說了!
Docker 基於 Go 語言開發,代碼託管在Github上,並遵循Apache 2.0 開源協議。
docker的專業叫法是應用容器(Application Container)。
爲什麼要使用docker?
1 、快速交付應用程序
2 、更容易部署和擴展
3 、效率更高
4 、快速部署也意味着更簡單的管理
Docker 的常用案例包括:
1. 自動打包和部署應用
2.創建輕量、私有的 PaaS 環境
3.自動化測試和持續集成/部署
4.部署並擴展 Web 應用、數據庫和後端服務器
在docker中倉庫和註冊服務器的關係是什麼??讓我們用圖片來解釋!
要理解 Docker 內部構建,需要理解以下三種部件:
Docker 鏡像 - Docker p_w_picpaths
Docker 倉庫 - Docker registeries
Docker 容器 - Docker containers
Docker 鏡像
Docker 鏡像是 Docker 容器運行時的只讀模板,鏡像可以用來創建 Docker 容器。每一個鏡像由一系列的層 (layers) 組成。Docker 使用UnionFS(聯合文件系統)來將這些層聯合到單獨的鏡像中。UnionFS允許獨立文件系統中的文件和文件夾(稱之爲分支)被透明覆蓋,形成一個單獨連貫的文件系統。正因爲有了這些層的存在,Docker 是如此的輕量。當你改變了一個 Docker 鏡像,比如升級到某個程序到新的版本,一個新的層會被創建。因此,不用替換整個原先的鏡像或者重新建立(在使用虛擬機的時候你可能會這麼做),只是一個新的層被添加或升級了。現在你不用重新發布整個鏡像,只需要升級,層使得分發 Docker 鏡像變得簡單和快速。每個docker都有很多層次構成,docker使用 union file systems 將這些不同的層結合到一個p_w_picpath 中去。
Docker 倉庫
Docker 倉庫用來保存鏡像,可以理解爲代碼控制中的代碼倉庫。同樣的,Docker 倉庫也有公有和私有的概念。公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的鏡像集合供使用。這些鏡像可以是自己創建,或者在別人的鏡像基礎上創建。
倉庫是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務器(Registry)混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)。
倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括 Docker Pool等,可以提供大陸用戶更穩定快速的訪問。
當然,用戶也可以在本地網絡內創建一個私有倉庫。
當用戶創建了自己的鏡像之後就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上pull下來就可以了。
*注:Docker 倉庫的概念跟Git類似,註冊服務器可以理解爲 GitHub 這樣的託管服務。
Docker 容器
Docker 利用容器來運行應用,一個Docker容器包含了所有的某個應用運行所需要的環境。每一個 Docker 容器都是從 Docker 鏡像創建的。Docker 容器可以運行、開始、停止、移動和刪除。每一個 Docker 容器都是獨立和安全的應用平臺。
容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
*注:鏡像是隻讀的,容器在啓動的時候創建一層可寫層作爲最上層。
Docker從0.9版本開始使用libcontainer替代lxc,libcontainer和linux系統的交互。
Docker 底層技術
docker底層的 2 個核心技術分別是 Namespaces 和 Control groups
Namespaces用來隔離各個容器
1)pid namespace
不同用戶的進程就是通過pid namespace 隔離開的,且不同 namespace 中可以有相同pid。所有的LXC進程在docker中的父進程爲docker進程,每個lxc進程具有不同的 namespace 。
2) pid namespace
有了pid namespace, 每個 namespace 中的pid能夠相互隔離,但是網絡端口還是共享 host 的端口。網絡隔離是通過 net namespace 實現的,每個 net namespace 有獨立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每個 container 的網絡就能隔離開來。docker默認採用veth的方式將 container 中的虛擬網卡同 host 上的一個docker bridge: docker0 連接在一起。
3) ipc namespace
container 中進程交互還是採用linux常見的進程間交互方法 (interprocess communication - IPC),包括常見的信號量、消息隊列和共享內存。container 的進程間交互實際上還是host 上具有相同pid namespace 中的進程間交互。
4) mnt namespace
類似chroot,將一個進程放到一個特定的目錄執行。mnt namespace 允許不同 namespace 的進程看到的文件結構不同,這樣每個 namespace 中的進程所看到的文件目錄就被隔離開了。在container裏頭,看到的文件系統,就是一個完整的linux系統,有/etc、/lib 等,通過chroot實現。
5) uts namespace
UTS("UNIX Time-sharing System") namespace 允許每個 container 擁有獨立的 hostname 和 domain name, 使其在網絡上可以被視作一個獨立的節點而非 Host 上的一個進程。
6) user namespace
每個 container 可以有不同的 user 和 group id, 也就是說可以在 container 內部用 container 內部的用戶執行程序而非 Host 上的用戶。
有了以上 6 種 namespace 從進程、網絡、IPC、文件系統、UTS和用戶角度的隔離,一個 container 就可以對外展現出一個獨立計算機的能力,並且不同 container 從 OS 層面實現了隔離。然而不同 namespace 之間資源還是相互競爭的,仍然需要類似ulimit來管理每個 container 所能使用的資源 - -cgroup。
cgroups(Control groups)實現了對資源的配額和度量。
理論知識介紹到這裏了,下面我們來操作如何在centos6.5上安裝Docker:
docker官網:https://docs.docker.com
centos系列安裝Docker,Docker支持Centos6及以後的版本。
在RedHat/Centos環境下安裝Docker,要求linux kernel至少3.8以上,且64位的系統中,由於RedHat和Centos的內核爲2.6,因此我們需要先升級內核。
升級內核(記住一定要升級,要不然會出現很多莫名奇怪的問題,建議用yum安裝)
1、yum安裝帶aufs模塊的3.10內核
2、修改grub的主配置文件/etc/grub.conf,設置default=0,表示第一個title下的內容爲默認啓動的kernel(一般新安裝的內核在第一個位置),重啓系統,這時候你的內核就成功升級了。
升級完成後,那我們查看一下內核版本:
查看是否支持aufs:
對於,Centos6.5,可以使用EPEL 庫安裝docker:
下面我就可以啓動docker服務了:
以上就上用Centos安裝docker,安裝完成了,下次爲大家分享Centos7和Ubuntu、windows如何安裝docker!
謝謝!