1 Docker簡介
1)Docker産生的背景
一款産品從開發到上線,從作業系統,到運作環境,再到應用配置。作為開發+運維之間的協作我們需要關心很多東西,這也是很多網際網路公司都不得不面對的問題,特别是各種版本的疊代之後,不同版本環境的相容,對運維人員都是考驗
Docker之是以發展如此迅速,也是因為它對此給出了一個标準化的解決方案。
環境配置如此麻煩,換一台機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複制過來。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。
之前在伺服器配置一個應用的運作環境,要安裝各種軟體,就拿普通電商項目的環境來說吧,Java/Tomcat/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平台。假如我們是在 Windows 上安裝的這些環境,到了 Linux 又得重新裝。況且就算不跨作業系統,換另一台同樣作業系統的伺服器,要移植應用也是非常麻煩的。

傳統上認為,軟體編碼開發/測試結束後,所産出的成果即是程式或是能夠編譯執行的二進制位元組碼等(java為例)。而為了讓這些程式可以順利執行,開發團隊也得準備完整的部署檔案,讓維運團隊得以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置檔案+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker鏡像的設計,使得Docker得以打破過去「程式即應用」的觀念。透過鏡像(images)将作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平台間的無縫接軌運作。
2)何為Docker
Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從Apache2.0協定開源。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通過對應用元件的封裝、分發、部署、運作等生命周期的管理,使使用者的APP(可以是一個WEB應用或資料庫應用等等)及其運作環境能夠做到“一次封裝,到處運作”。
Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。将應用運作在 Docker 容器上面,而 Docker 容器在任何作業系統上都是一緻的,這就實作了跨平台、跨伺服器。隻需要一次配置好環境,換到别的機子上就可以一鍵部署好,大大簡化了操作
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作虛拟化。容器是完全使用沙箱機制,互相之間不會有任何接口,更重要的是容器性能開銷極低。
==Docker支援将軟體編譯成一個鏡像;然後在鏡像中各種軟體做好配置,将鏡像釋出出去,其他使用者可以直接使用這個鏡像。==運作中的這個鏡像稱為容器,容器啟動是非常快速的。類似windows裡面的ghost作業系統,安裝好後什麼都了;
Docker解決了運作環境和配置問題軟體容器,友善做持續內建并有助于整體釋出的容器虛拟化技術。
Docker的工作原理
Docker是一個Client-Server結構的系統,Docker守護程序運作在主機上, 然後通過Socket連接配接從用戶端通路,守護程序從用戶端接受指令并管理運作在主機上的容器。 容器,是一個運作時環境,就是我們前面說到的集裝箱。
3)虛拟機與Docker對比
虛拟機(virtual machine)就是帶環境安裝的一種解決方案。
它可以在一種作業系統裡面運作另一種作業系統,比如在Windows 系統裡面運作Linux 系統。應用程式對此毫無感覺,因為虛拟機看上去跟真實系統一模一樣,而對于底層系統來說,虛拟機就是一個普通檔案,不需要了就删掉,對其他部分毫無影響。這類虛拟機完美的運作了另一套系統,能夠使應用程式,作業系統和硬體三者之間的邏輯不變。
虛拟機的缺點:
1 資源占用多 2 備援步驟多 3 啟動慢
由于前面虛拟機存在這些缺點,Linux 發展出了另一種虛拟化技術:Linux 容器(Linux Containers,縮寫為 LXC)。
Linux 容器不是模拟一個完整的作業系統,而是對程序進行隔離。有了容器,就可以将軟體運作所需的所有資源打包到一個隔離的容器中。容器與虛拟機不同,不需要捆綁一整套作業系統,隻需要軟體工作所需的庫資源和設定。系統是以而變得高效輕量并保證部署在任何環境中的軟體都能始終如一地運作。
比較了 Docker 和傳統虛拟化方式的不同之處:
傳統虛拟機技術是虛拟出一套硬體後,在其上運作一個完整作業系統,在該系統上再運作所需應用程序;
而容器内的應用程序直接運作于宿主的核心,容器内沒有自己的核心,而且也沒有進行硬體虛拟。是以容器要比傳統虛拟機更為輕便。
每個容器之間互相隔離,每個容器有自己的檔案系統 ,容器之間程序不會互相影響,能區分計算資源
docker比虛拟機快的原因:
(1)docker有着比虛拟機更少的抽象層。由亍docker不需要Hypervisor實作硬體資源虛拟化,運作在docker容器上的程式直接使用的都是實際實體機的硬體資源。是以在CPU、記憶體使用率上docker将會在效率上有明顯優勢。
(2)docker利用的是主控端的核心,而不需要Guest OS。是以,當建立一個容器時,docker不需要和虛拟機一樣重新加載一個作業系統核心。仍而避免引尋、加載作業系統核心返個比較費時費資源的過程,當建立一個虛拟機時,虛拟機軟體需要加載Guest OS,返個建立過程是分鐘級别的。而docker由于直接利用主控端的作業系統,則省略了返個過程,是以建立一個docker容器隻需要幾秒鐘。
4)Docker給開發/運維帶來的利益
a)更快速的應用傳遞和部署
傳統的應用開發完成後,需要提供一堆安裝程式和配置說明文檔,安裝部署後需根據配置文檔進行繁雜的配置才能正常運作。Docker化之後隻需要傳遞少量容器鏡像檔案,在正式生産環境加載鏡像并運作即可,應用安裝配置在鏡像裡已經内置好,大大節省部署配置和測試驗證時間。
b) 更便捷的更新和擴縮容
随着微服務架構和Docker的發展,大量的應用會通過微服務方式架構,應用的開發建構将變成搭樂高積木一樣,每個Docker容器将變成一塊“積木”,應用的更新将變得非常容易。當現有的容器不足以支撐業務處理時,可通過鏡像運作新的容器進行快速擴容,使應用系統的擴容從原先的天級變成分鐘級甚至秒級。
c) 更簡單的系統運維
應用容器化運作後,生産環境運作的應用可與開發、測試環境的應用高度一緻,容器會将應用程式相關的環境和狀态完全封裝起來,不會因為底層基礎架構和作業系統的不一緻性給應用帶來影響,産生新的BUG。當出現程式異常時,也可以通過測試環境的相同容器進行快速定位和修複。
d ) 更高效的計算資源利用
Docker是核心級虛拟化,其不像傳統的虛拟化技術一樣需要額外的Hypervisor支援,是以在一台實體機上可以運作很多個容器執行個體,可大大提升實體伺服器的CPU和記憶體的使用率。
5 ) Docker業界使用
新浪
美團
Docker Hub官網: https://hub.docker.com/
docker官網:http://www.docker.com
docker中文網站:https://www.docker-cn.com/
2 Docker安裝
注意Docker支援以下的CentOS版本:
CentOS 7 (64-bit)
CentOS 6.5 (64-bit) 或更高的版本
前提條件
目前,CentOS 僅發行版本中的核心支援 Docker。
Docker 運作在 CentOS 7 上,要求系統為64位、系統核心版本為 3.10 以上。
Docker 運作在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統為64位、系統核心版本為 2.6.32-431 或者更高版本。
檢視自己的核心
uname指令用于列印目前系統相關資訊(核心版本号、硬體架構、主機名稱和作業系統類型等)。
檢視已安裝的CentOS版本資訊(CentOS6.8有,CentOS7無該指令)
a ) 檢視centos版本; uname -r
3.10.0-327.e17.x86_64 Docker 要求 CentOS 系統的核心版本高于 3.10
b ) 更新軟體包及核心; yum update
c ) 安裝docker yum install docker
d ) 啟動docker systemctl start docker
e ) 将docker服務設為開機啟動 systemctl enable docker
容器運作異常可參考這篇部落格
https://blog.csdn.net/liqun_super/article/details/88304094