docker的介紹
簡介
- Docker是一個開源的應用容器引擎,基於Go語言,並遵從Apache協議開源。
- Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化。
- 容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。
應用場景
- web應用的自動化打包和發佈
- 自動化測試和持續集成、發佈
- 在服務型環境中部署和調整數據庫或其他後臺應用。
- 從頭編譯或者擴展現有的平臺環境
docker的優點
- 簡化程序:Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,便可以實現虛擬化,Docker的最大優勢,過去需要用數天乃至數週的任務,在Docker容器的處理下,只需要數秒就能完成。
- 避免選擇恐懼症:如果你有選擇恐懼症,Docker幫你打包你的糾結。比如Docker鏡像;Docker鏡像中包含了運行環境和配置,所以Docker可以簡化部署多種應用實例工作。比如web應用、後臺應用、數據庫應用、大數據應用、比如hadoop集羣、消息隊列等等都可以打包成一個鏡像部署。
- 節省開支:一方面,雲計算時代到來,使開發者不必爲了追求效果而配置高額的硬件,Docker改變了高性能必然高架格的思維定式。Docker與雲的結合,讓雲空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。
docker系統架構
- Docker使用客戶端-服務端(cs)架構模式,使用遠程API來管理和創建Docker容器,Docker容器通過Docker鏡像來創建。
- 容器與鏡像的關係類似於面向對象編程中的對象與類
- 相關概念
標題 | 說明 |
---|---|
鏡像(images) | Docker鏡像是用於創建Docker容器的模板 |
容器(Container) | 容器是獨立運行的一個或一組應用 |
客戶端(Client) | Docker客戶端通過命令行或者其他工具使用Docker API與Docker守護進程通信 |
主機(Host) | 一個物理或者虛擬的機器用於執行Docker守護進程和容器 |
倉庫(Regisrty) | Docker倉庫用來保存鏡像,可以理解爲代碼控制中的代碼倉庫。DockerHub提供了龐大的鏡像集合供使用。 |
Docker Machine | Docker Machine 是一個簡化Docker安裝的命令工具,通過一個簡單的命令行即可在響應的平臺上安裝Docker |
相關概念
數據卷(數據持久化)
- 數據卷是一個可以提供一個或多個容器使用的特殊目錄。
- 可以達到以下目的:
- 繞過“拷貝寫”系統,以達到本地磁盤IO的性能,(比如運行一個容器,在容器中對數據卷修改內容,會直接改變宿主機上的數據卷中的內容,所以是本地磁盤IO性能,而不是先在容器中寫一份,最後還要將容器中的修改的內容拷貝出來進行同步)
- 繞過“拷貝寫”系統,有些文件不需要在docker commit 打包鏡像文件,
- 在多個容器間共享目錄
- 在宿主和容器間共享一個文件。
- 數據卷可以提供很多有用的特性:
- 數據卷可以在容器之間共享和重用,容器間傳遞數據將變得高效與方便。
- 對數據卷內容數據的修改會立馬生效,無論是容器內操作還是本地操作
- 對數據卷的更新不會影響鏡像,解耦開應用和數據
- 卷會一直存在,知道沒有容器使用,可以安全地卸載它。
端口映射與容器互聯
端口映射實現容器訪問
當容器中運行一些網絡應用,要讓外部訪問這些應用時,可以通過-p參數來指定端口映射。
互聯機制實現便捷互訪
容器的互聯是一種讓多個容器中的應用進行快速交互的方式。它會在源和接收容器之間創建連接關係,接收容器可以通過容器名快速訪問到容器,而不用指定具體的IP地址。
–name
-
容器互聯
使用 --link 參數可以讓容器之間安全地進行交互
docker run -d --name db mysql
docker run -d -p --name web --link db:db webapp
此時,db容器和web容器建立互聯關係。
–link參數的格式爲–link name:alias,其中name是要鏈接的容器的名稱,alias是別名
Docker相當於在兩個互聯網的容器之間創建了一個虛擬機通道,而且不用映射他們的端口到宿主主機上。
Docker-compose
- Docker Componse是一種用於通過使用單個命令創建和啓動Docker應用程序的工具。我們可以使用它來配置應用程序的服務。
- 它是開發,測試和升級環境的利器。
- 它提供以下命令來管理應用程序的整個生命週期:
- 啓動,停止和重建服務
- 查看運行服務的狀態
- 流式運行服務的日誌輸出
- 在服務上運行一次性命令
- 要實現docker compose,需要包括以下步驟
- 將應用程序環境變量放在Docker文件中以公開訪問。
- 在docker-compose.yml 文件中提供配置服務名稱,以便他們可以在隔離的環境中一起運行。
- 運行docker-compose ,compose將啓動並運行整個應用程序。