有關容器的what、why、how的問題
what---什麼是容器?
容器是一種輕量級、可移植、自包含的軟體打包技術,為應用提供封裝和隔離,建立並測試好的容器無需任何修改就能夠在生產系統的虛擬機器、伺服器或者公有云主機上執行。
容器比虛擬機器的優勢在於:
- 體積上比虛擬機器小很多—-所有的容器共享同一個HostOS;
- 容器比虛擬機器部署和啟動速度更快、開銷更小、更容易遷移。
why---為什麼需要容器?
超強的可移植能力
容器的優勢:
(1)對於開發人員:容器意味著環境隔離和可重複性。開發者只需要為應用建立一次執行環境,然後打包成容器便可以在其他機器上執行。容器環境與所在的host環境是隔離的;
(2)對於運維人員:只需要配置好標準的runtime環境,伺服器上就可以執行任何容器。
容器消除了開發、測試、生產環境的不一致性。
How---容器是怎麼工作的?
Docker架構圖
Docker核心元件包括:
- Docker客戶端:Client
- Docker服務端:Docker daemon
- Docker映象:Image
- Registry
- Docker容器:Container
Docker採用的是C/S架構。客戶端向伺服器傳送請求,伺服器負責構建、執行和分發容器。客戶端和伺服器可以執行在同一個Host上,當然客戶端也可以通過API與伺服器通訊。
1.常用的Docker客戶端是CLI docker命令。docker支援很多操作(子命令)
2.Docker daemon是伺服器元件,以Linux後臺服務的方式執行。負責建立、執行、監控容器,構建、儲存映象。預設情況下,Docker daemon只能響應來自本地Host的客戶端請求,如果要允許遠端客戶端請求,需要在配置檔案中開啟tcp監聽,新增 -H tcp://0.0.0.0,允許來自任意IP得客戶端連線並重啟Docker daemon,客戶端在命令列執行:docker -H 服務端IP info
(info子命令用於檢視Docker伺服器的資訊)
3.Docker映象—-可以建立Docker容器的只讀模板,映象有多種生成方法,可以將映象的內容和建立步驟描述在一個文字檔案中Dockerfile,然後通過執行docker命令構建Docker映象。
4.Docker容器—-是Docker映象的執行例項
5.Registry—存放Docker映象的倉庫。預設的是DockerHub
也就是說,當Docker客戶端執行docker run -*(指定映象)命令時,Docker daemon會檢測本地有沒有對應的映象,沒有則從DockerHub下載該映象,並被儲存到本地,Docker daemon啟動容器。