1. 程式人生 > >Docker入門之-1簡介與安裝

Docker入門之-1簡介與安裝

一、簡介

a、為什麼出現docker?

      一款產品從開發到上線,從作業系統,到執行環境,再到應用配置。作為開發+運維之間的協作我們需要關心很多東西,這也是很多網際網路公司都不得不面對的問題,特別是各種版本的迭代之後,不同版本環境的相容,對運維人員都是考驗
Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案。
環境配置如此麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。
 
      之前在伺服器配置一個應用的執行環境,要安裝各種軟體,就拿尚矽谷電商專案的環境來說吧,Java/Tomcat/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。假如我們是在 Windows 上安裝的這些環境,到了 Linux 又得重新裝。況且就算不跨作業系統,換另一臺同樣作業系統的伺服器,要移植應用也是非常麻煩的。
 
      傳統上認為,軟體編碼開發/測試結束後,所產出的成果即是程式或是能夠編譯執行的二進位制位元組碼等(java為例)。而為了讓這些程式可以順利執行,開發團隊也得準備完整的部署檔案,讓維運團隊得以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置檔案+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker映象的設計,使得Docker得以打破過去「程式即應用」的觀念。透過映象(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運作。

b、docker理念:

Docker是基於Go語言實現的雲開源專案。
Docker的主要目標是“Build,Ship and Run Any App,Anywhere”,也就是通過對應用元件的封裝、分發、部署、執行等生命週期的管理,使使用者的APP(可以是一個WEB應用或資料庫應用等等)及其執行環境能夠做到“一次封裝,到處執行”。

Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用執行在 Docker 容器上面,而 Docker 容器在任何作業系統上都是一致的,這就實現了跨平臺、跨伺服器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好,大大簡化了操作。總之,就是一句話:解決了執行環境和配置問題軟體容器,方便做持續整合並有助於整體釋出的容器虛擬化技術。

c、虛擬技術和容器虛擬化技術

      虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。
它可以在一種作業系統裡面執行另一種作業系統,比如在Windows 系統裡面執行Linux 系統。應用程式對此毫無感知,因為虛擬機器看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機器就是一個普通檔案,不需要了就刪掉,對其他部分毫無影響。這類虛擬機器完美的運行了另一套系統,能夠使應用程式,作業系統和硬體三者之間的邏輯不變。  但是其缺點有:資源佔用多 、冗餘步驟多 、啟動慢

      由於前面虛擬機器存在這些缺點,Linux 發展出了另一種虛擬化技術:Linux 容器(Linux Containers,縮寫為 LXC)。
Linux 容器不是模擬一個完整的作業系統,而是對程序進行隔離。有了容器,就可以將軟體執行所需的所有資源打包到一個隔離的容器中。容器與虛擬機器不同,不需要捆綁一整套作業系統,只需要軟體工作所需的庫資源和設定。系統因此而變得高效輕量並保證部署在任何環境中的軟體都能始終如一地執行。
*傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用程序;
*而容器內的應用程序直接運行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機器更為輕便。
* 每個容器之間互相隔離,每個容器有自己的檔案系統 ,容器之間程序不會相互影響,能區分計算資源。

二、安裝

前提條件:

Docker支援以下的CentOS版本:CentOS 7 (64-bit)系統核心版本為 3.10 以上。、CentOS 6.5 (64-bit) 系統核心版本為 2.6.32-431或更高的版本

docker的基本組成:

 

倉庫:倉庫(Repository)是集中存放映象檔案的場所。
倉庫(Repository)和倉庫註冊伺服器(Registry)是有區別的。倉庫註冊伺服器上往往存放著多個倉庫,每個倉庫中又包含了多個映象,每個映象有不同的標籤(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 Docker Hub(https://hub.docker.com/),
存放了數量龐大的映象供使用者下載。國內的公開倉庫包括阿里雲 、網易雲 等

映象:Docker 映象(Image)就是一個只讀的模板。映象可以用來建立 Docker 容器,一個映象可以建立很多容器。

容器: Docker 利用容器(Container)獨立執行的一個或一組應用。容器是用映象建立的執行例項。
它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
可以把容器看做是一個簡易版的 Linux 環境(包括root使用者許可權、程序空間、使用者空間和網路空間等)和執行在其中的應用程式。容器的定義和映象幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。

正確理解倉庫、映象和容器的概念:

Docker 本身是一個容器執行載體或稱之為管理引擎。我們把應用程式和配置依賴打包好形成一個可交付的執行環境,這個打包好的執行環境就似乎 image映象檔案。只有通過這個映象檔案才能生成 Docker 容器。image 檔案可以看作是容器的模板。Docker 根據 image 檔案生成容器的例項。同一個 image 檔案,可以生成多個同時執行的容器例項。
*  image 檔案生成的容器例項,本身也是一個檔案,稱為映象檔案。
*  一個容器執行一種服務,當我們需要的時候,就可以通過docker客戶端建立一個對應的執行例項,也就是我們的容器
* 至於倉儲,就是放了一堆映象的地方,我們可以把映象釋出到倉儲中,需要的時候從倉儲中拉下來就可以了。

安裝步驟:

a、CentOS6.8安裝Docker:

1、yum install -y epel-release

2、yum install -y docker-io

3、安裝後的配置檔案:/etc/sysconfig/docker

4、啟動Docker後臺服務:service docker start

5、docker version驗證

1、確定版本是否為7以上:

cat /etc/redhat-release

2、安裝gcc相關:

yum -y install gcc  

yum -y install gcc-c++

3、如果之前有安裝舊的則寫在,比如按照6.8的版本安裝了

yum -y remove docker docker-common docker-selinux docker-engine

4、安裝需要的軟體包

yum install -y yum-utils device-mapper-persistent-data lvm2

5、設定stable映象倉庫

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、更新軟體包索引

yum makecache fast

7、安裝Docker CE

yum -y install docker-ce

8、啟動Docker

systemctl start docker

9、配置映象加速

mkdir -p /etc/docker

vim  /etc/docker/daemon.json (裡面新增阿里雲賬戶提供個個人倉庫,格式類似:{
  "registry-mirrors": ["https://{自已的編碼}.mirror.aliyuncs.com"]
})

systemctl daemon-reload

systemctl restart docker

10、解除安裝

systemctl stop docker 

yum -y remove docker-ce

rm -rf /var/lib/docker

ps:阿里雲映象加速倉庫獲取地址:https://dev.aliyun.com/search.html註冊阿里雲賬號登入阿里雲開發者頻發,獲取加速器地址,填到9中的配置檔案中,然後重啟service docker restart重啟後臺docker服務

底層原理:

Docker是怎麼工作的:Docker是一個Client-Server結構的系統,Docker守護程序執行在主機上, 然後通過Socket連線從客戶端訪問,守護程序從客戶端接受命令並管理執行在主機上的容器。 容器,是一個執行時環境,就是我們前面說到的集裝箱。

Docker為什麼比VM快:

(1)docker有著比虛擬機器更少的抽象層。由亍docker不需要Hypervisor實現硬體資源虛擬化,執行在docker容器上的程式直接使用的都是實際物理機的硬體資源。因此在CPU、記憶體利用率上docker將會在效率上有明顯優勢。
(2)docker利用的是宿主機的核心,而不需要Guest OS。因此,當新建一個容器時,docker不需要和虛擬機器一樣重新載入一個作業系統核心。仍而避免引尋、載入作業系統核心返個比較費時費資源的過程,當新建一個虛擬機器時,虛擬機器軟體需要載入Guest OS,返個新建過程是分鐘級別的。而docker由於直接利用宿主機的作業系統,則省略了返個過程,因此新建一個docker容器只需要幾秒鐘。