Docker是什麼?
Docker 是一個開源的應用容器引擎,你可以將其理解為一個輕量級的虛擬機,開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上。
用來幹什麼的?
它可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化。
一張思維導圖奉上:
為什麼要使用Docker,Docker的好處是什麼?
可以認為Docker是一個通用安裝程序。簡單來說,利用Docker容器,可以將任何一個或者多個程序封裝起來,並提供標準的管理接口。因為使用了容器,所以可以很方便的把生產環境和開發環境分開,互不影響,這樣,開發人員負責維護內容,並使用Docker進行封裝,系統管理人員利用Docker的標準接口進行部署和管理。
下面是網上總結的一些Docker的使用場景:
1. 簡化配置
2. 代碼流水線(Code Pipeline)管理
3. 提高開發效率
4. 隔離應用
5. 整合服務器
6. 調試能力
7. 多租戶環境
8. 快速部署
那它在什麼場合比較適用呢?
它的優點:
Docker基礎
什麼是虛擬化
在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部份是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料存儲。
在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件 對資源充分利用
虛擬化技術種類很多,例如:軟件虛擬化、硬件虛擬化、內存虛擬化、網絡虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機等等。
容器與虛擬機比較
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,而傳統方式則是在硬件層面實現。
[外鏈圖片轉存失敗(img-ib18DKWV-1568969383017)(image/1-1.png)]
與傳統的虛擬機相比,Docker優勢體現為啟動速度快、佔用體積小。
Docker 組件
Docker服務器與客戶端
Docker是一個客戶端-服務器(C/S)架構程序。Docker客戶端只需要向Docker服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作並返回結果。Docker提供了一個命令行工具Docker以及一整套RESTful API。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。
[外鏈圖片轉存失敗(img-eSLdeHvE-1568969383017)(image/1-2.png)]
Docker鏡像與容器
鏡像是構建Docker的基石。用戶基於鏡像來運行自己的容器。鏡像也是Docker生命週期中的“構建”部分。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。例如:
添加一個文件;
執行一個命令;
打開一個窗口。
也可以將鏡像當作容器的“源代碼”。鏡像體積很小,非常“便攜”,易於分享、存儲和更新。
Docker可以幫助你構建和部署容器,你只需要把自己的應用程序或者服務打包放進容器即可。容器是基於鏡像啟動起來的,容器中可以運行一個或多個進程。我們可以認為,鏡像是Docker生命週期中的構建或者打包階段,而容器則是啟動或者執行階段。 容器基於鏡像啟動,一旦容器啟動完成後,我們就可以登錄到容器中安裝自己需要的軟件或者服務。
所以Docker容器就是:
一個鏡像格式;
一些列標準操作;
一個執行環境。
Docker借鑑了標準集裝箱的概念。標準集裝箱將貨物運往世界各地,Docker將這個模型運用到自己的設計中,唯一不同的是:集裝箱運輸貨物,而Docker運輸軟件。
和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底裝了什麼,它不管是web服務器,還是數據庫,或者是應用程序服務器什麼的。所有的容器都按照相同的方式將內容“裝載”進去。
Docker也不關心你要把容器運到何方:我們可以在自己的筆記本中構建容器,上傳到Registry,然後下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且儘量通用。
Registry(註冊中心)
Docker用Registry來保存用戶構建的鏡像。Registry分為公共和私有兩種。Docker公司運營公共的Registry叫做Docker Hub。用戶可以在Docker Hub註冊賬號,分享並保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。
https://hub.docker.com/
Docker安裝與啟動
Docker官方建議在Ubuntu中安裝,因為Docker是基於Ubuntu發佈的,而且一般Docker出現的問題Ubuntu是最先更新或者打補丁的。在很多版本的CentOS中是不支持更新最新的一些補丁包的。
由於我們學習的環境都使用的是CentOS,因此這裡我們將Docker安裝到CentOS上。注意:這裡建議安裝在CentOS7.x以上的版本,在CentOS6.x的版本中,安裝前需要安裝其他很多的環境而且Docker很多補丁不支持更新。
請直接掛載課程配套的Centos7.x鏡像
(1)yum 包更新到最新
設置ustc的鏡像
ustc是老牌的linux鏡像服務提供者了,還在遙遠的ubuntu 5.04版本的時候就在用。ustc的docker鏡像加速器速度很快。ustc docker mirror的優勢之一就是不需要註冊,是真正的公共服務。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
、
Docker的啟動與停止
systemctl命令是系統服務管理器指令
啟動docke
常用命令
docker ps :查看當前進程
docker ps -a :查看所有
docker start CONTAINER ID :啟動進程
docker images :查看docker的repository
docker run -di --name=elasticsearch -p 9300:9300 -p 9200:9200 elasticsearch:5.6.8
docker 實戰一個系列手冊
創建一個帶 ssh 服務的基礎鏡像(修訂版)
創建一個帶 apache 服務的鏡像
創建一個帶 nginx 服務的鏡像
創建一個帶 tomcat 服務的鏡像
創建一個帶 weblogic 服務的鏡像
創建一個帶 CMS系列( Wordpress, Drupal, Typo3) 的鏡像
創建一個帶 CRM: SugarCRM 的鏡像
創建一個帶 ERP: OpenERP 的鏡像
創建一個帶 Mail: Mutt-gmail 服務的鏡像
創建一個帶 Wiki: MediaWiki 服務的鏡像
創建一個帶 項目管理: Redmine 服務的鏡像
利用 docker 快速搭建 Android/iOS App 後端
利用 docker 快速搭建自己的網站 demo
Docker 核心概念
docker 鏡像(Images)
- 一個只讀模板,可以用來創建容器,一個鏡像可以創建多個容器
- Docker 提供了一個很簡單的機制來創建和更新現有的鏡像,甚至可以直接從其他人那裡獲取做好的鏡像直接使用
- 可以理解為 Java 中的類
docker 容器(Container)
- 容器是從鏡像創建的運行實例,也就是鏡像啟動後的一個實例稱為容器,是獨立運行的一個或一組應用。
- docker 利用容器來運行應用,他可以被啟動、開始、停止、刪除,每個容器都是相互隔離的、保證安全的平臺。
- 可以把容器看做是一個簡易版的 Linux(包括 root 用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
- 可以理解為 Java 中通過類創建的實例。
3.3 docker 倉庫(Resoisitory)
- 倉庫是集中存放鏡像文件的場所,類似 git 代碼倉庫等。
- 倉庫(Respository)和倉庫註冊服務器(Registry)是有區別的。倉庫註冊服務器一般存放多個倉庫,每個倉庫又有多個鏡像,每個鏡像又有不同的標籤(tag)。
- 倉庫分為公開倉庫(public)和私有倉庫(private)兩種形式。
- 最大的公開倉庫是 Docker Hub,國內的公開倉庫有阿里雲等。
- 可以在本地網絡創建一個私有倉庫。
- 當創建好自己的鏡像後,可以通過 push 命令把它上傳到公開或私有倉庫。
- 倉庫的概念類似 Git,倉庫註冊服務器可以理解為 GitHub 這種託管服務。
3.4 docker 主機(Host)
- 一個物理或虛擬的機器用來執行 Docker 守護進程和容器。
3.5 docker客戶端(Client)
- 客戶端通過命令行或其他工具使用 Docker。
API 與 Docker 的守護進程進行通信
四、Docker 安裝及啟停
4.1 查看 centos 版本(以 centos7.4 為例)
Docker 要求 CentOS 系統的內核版本高於 3.10。Dockerfile、Docker鏡像和Docker容器的關係私信資料MF獲取相關資料
Dockerfile 是軟件的原材料,Docker 鏡像是軟件的交付品,而 Docker 容器則可以認為是軟件的運行態。從應用軟件的角度來看,Dockerfile、Docker 鏡像與 Docker 容器分別代表軟件的三個不同階段,Dockerfile 面向開發,Docker 鏡像成為交付標準,Docker 容器則涉及部署與運維,三者缺一不可,合力充當 Docker 體系的基石。
簡單來講,Dockerfile構建出Docker鏡像,通過Docker鏡像運行Docker容器。
我們可以從Docker容器的角度,來反推三者的關係。首先可以來看下圖:
閱讀更多 編程資料庫 的文章