Docker從入門到放棄(1) Docker簡介與安裝

​

目錄

一、Docker簡介

1、Docker是什麼:

2、為什麼有docke的出現:

3、docker與傳統容器的區別:

4、docker基本組成

5、docker工作原理:

二、Docker安裝以及配置(基於Centos安裝)

1、確定你是CentOS7及以上版本

2、安裝相對應的依賴

3、設置倉庫鏡像

4、測試是否安裝成功


 

 

一、Docker簡介

​

1、Docker是什麼:

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器性能開銷極低。

Docker 從 17.03 版本之後分為 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),

Docker的主要目標是「Build,Ship and Run Any App,Anywhere」,也就是通過對應用組件的封裝、分發、部署、運行等生命周期的管理,使用戶的APP(可以是一個WEB應用或資料庫應用等等)及其運行環境能夠做到「一次鏡像,處處運行」。

​

Linux容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用打成鏡像,通過鏡像成為運行在Docker容器上面的實例,而 Docker容器在任何作業系統上都是一致的,這就實現了跨平台、跨伺服器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好,大大簡化了操作

小結:解決了運行環境和配置問題的軟體容器,方便做持續集成並有助於整體發布的容器虛擬化技術

2、為什麼有docke的出現:

答案就是使用容器。Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案-----系統平滑移植,容器虛擬化技術。

環境配置相當麻煩,換一台機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。開發人員利用 Docker 可以消除協作編碼時「在我的機器上可正常工作」的問題。

​

 

之前在伺服器配置一個應用的運行環境,要安裝各種軟體,就拿普通的電商項目來說。

Java/RabbitMQ/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平台。假如我們是在 Windows 上安裝的這些環境,到了 Linux 又得重新裝。況且就算不跨作業系統,換另一台同樣作業系統的伺服器,要移植應用也是非常麻煩的。 傳統上認為,軟體編碼開發/測試結束後,所產出的成果即是程式或是能夠編譯執行的二進位位元組碼等(java為例)。而為了讓這些程式可以順利執行,開發團隊也得準備完整的部署文件,讓維運團隊得以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置文件+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。Docker的出現使得Docker得以打破過去「程式即應用」的觀念。透過鏡像(images)將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平台間的無縫接軌運作。

3、docker與傳統容器的區別:

比較了 Docker 和傳統虛擬化方式的不同之處: *傳統虛擬機技術是虛擬出一套硬體後,在其上運行一個完整作業系統,在該系統上再運行所需應用進程; *容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核且也沒有進行硬體虛擬。因此容器要比傳統虛擬機更為輕便。

  • 每個容器之間互相隔離,每個容器有自己的文件系統 ,容器之間進程不會相互影響,能區分計算資源。

​

 

1)傳統虛擬機技術:

虛擬機(virtual machine)就是帶環境安裝的一種解決方案。 它可以在一種作業系統裡面運行另一種作業系統,比如在Windows10系統裡面運行Linux系統CentOS7。應用程式對此毫無感知,因為虛擬機看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機就是一個普通文件,不需要了就刪掉,對其他部分毫無影響。這類虛擬機完美的運行了另一套系統,能夠使應用程式,作業系統和硬體三者之間的邏輯不變。 Win10 VMWare Centos7 各種cpu、記憶體網路額配置+各種軟體 虛擬機實例

 ​

虛擬機的缺點: 1 資源佔用多 2 冗餘步驟多 3 啟動慢

2)容器虛擬化技術:

Linux容器(Linux Containers,縮寫為 LXC) Linux容器是與系統其他部分隔離開的一系列進程,從另一個鏡像運行,並由該鏡像提供支援進程所需的全部文件。容器提供的鏡像包含了應用的所有依賴項,因而在從開發到測試再到生產的整個過程中,它都具有可移植性和一致性。

Linux 容器不是模擬一個完整的作業系統而是對進程進行隔離。有了容器,就可以將軟體運行所需的所有資源打包到一個隔離的容器中。容器與虛擬機不同,不需要捆綁一整套作業系統,只需要軟體工作所需的庫資源和設置。系統因此而變得高效輕量並保證部署在任何環境中的軟體都能始終如一地運行。

​

 

4、docker基本組成

1)鏡像:

Docker 鏡像(Image)就是一個只讀的模板。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。 它也相當於是一個root文件系統。比如官方鏡像 centos:7 就包含了完整的一套 centos:7 最小系統的 root 文件系統。 相當於容器的「源程式碼」,docker鏡像文件類似於Java的類模板,而docker容器實例類似於java中new出來的實例對象。

2)容器:

1、從面向對象角度 Docker 利用容器(Container)獨立運行的一個或一組應用,應用程式或服務運行在容器裡面,容器就類似於一個虛擬化的運行環境,容器是用鏡像創建的運行實例。就像是Java中的類和實例對象一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器為鏡像提供了一個標準的和隔離的運行環境,它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台

2 、從鏡像容器角度 可以把容器看做是一個簡易版的 Linux 環境(包括root用戶許可權、進程空間、用戶空間和網路空間等)和運行在其中的應用程式。

3)倉庫:

倉庫(Repository)是集中存放鏡像文件的場所。

類似於 Maven倉庫,存放各種jar包的地方; github倉庫,存放各種git項目的地方; Docker公司提供的官方registry被稱為Docker Hub,存放各種鏡像模板的地方。

倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。 最大的公開倉庫是 Docker Hub(Docker Hub),

小結:

需要正確的理解倉庫/鏡像/容器這幾個概念:

Docker 本身是一個容器運行載體或稱之為管理引擎。我們把應用程式和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就是image鏡像文件。只有通過這個鏡像文件才能生成Docker容器實例(類似Java中new出來一個對象)。

image文件可以看作是容器的模板。Docker 根據 image 文件生成容器的實例。同一個 image 文件,可以生成多個同時運行的容器實例。

鏡像文件:

image 文件生成的容器實例,本身也是一個文件,稱為鏡像文件。

容器實例:

一個容器運行一種服務,當我們需要的時候,就可以通過docker客戶端創建一個對應的運行實例,也就是我們的容器

倉庫:

就是放一堆鏡像的地方,我們可以把鏡像發布到倉庫中,需要的時候再從倉庫中拉下來就可以了。

​

5、docker工作原理:

Docker是一個Client-Server結構的系統,Docker守護進程運行在主機上, 然後通過Socket連接從客戶端訪問,守護進程從客戶端接受命令並管理運行在主機上的容器。 容器,是一個運行時環境,就是我們前面說到的集裝箱。可以對比mysql演示對比講解

​

 

二、Docker安裝以及配置(基於Centos安裝)

1、確定你是CentOS7及以上版本

Linux輸入下面的指令檢查版本

cat /etc/redhat-release

​

2、安裝相對應的依賴

1)yum -y install gcc

 ​

 2)yum -y install gcc-c++

​

3、設置倉庫鏡像

官網配置的倉庫網址,你們懂得都懂到時候拉程式碼的時候可以懷疑人生,因此我們又要用鏡像網站

​

這裡我用的是阿里云:

1)找到容器鏡像服務

 ​

 2)選擇個人版的

​

3)根據操作文檔配置加速

​

 1、修改配置

​

 

2、systemctl daemon-reload

3、systemctl restart docker

 

4、測試是否安裝成功

1)先啟動docker

systemctl start docker

2)查看docker版本

docker version

​

 

3)測試鏡像地址是否配置成功

我這裡是輸入:docker run hello-world

​

 到這裡你的docker已經安裝成功了

​
Tags: