目錄
一、Docker簡介
1、Docker是什麼:
Docker 是一個開源的應用容器引擎,基於
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 本身是一個容器執行載體或稱之為管理引擎。我們把應用程式和配置依賴打包好形成一個可交付的執行環境,這個打包好的執行環境就是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已經安裝成功了