docker 容器状态 restarting_20分钟极简入门Docker
有錯誤請指出~
什么是Docker
首先來介紹一下什么是Docker,Docker是早于2013年發布的開源項目,它借助操作系統的虛擬化技術來實現應用間的資源隔離,從而應用能更加快速方便地打包和部署在任何地方。根據官網描述,Docker是一個借助容器進行開發,部署和運行應用的工具,通俗來說,Docker容器好比一個集裝箱一樣,里面存放了應用所需要的文件和依賴,這種把應用標準化的過程被叫做為“容器化”。
Docker適合做什么
對于開發人員來說,容器技術為應用的部署提供了沙盒環境,開發者可以在獨立的容器運行和管理應用程序進程,Docker提供的抽象層使得開發人員之間可以保持開發環境相對的一致,因此Docker適合用于應用隔離,搭建沙箱環境,此外,由于Docker容器的輕量化,它也被適用于進行持續集成和持續部署。
Container VS VM
人們經常用虛擬機和容器來做比較,那么它們兩之間有什么區別呢?其實它們最核心的區別在于虛擬化資源的層面不一樣,虛擬機是在硬件層之上實現虛擬化的,而容器則直接在操作系統之上實現虛擬化,從圖中可以看出,每個虛擬機都需要在一個Guest OS之上,而容器則可以都處在同一個宿主機之上。
因為容器沒有虛擬機造成的額外損耗,所以與虛擬機對比,容器不僅運行效率更高,而且部署速度也更快。
Docker Engine
Docker Engine是用于運行和編排容器的基礎設施工具,我們平時說到的Docker大多數指的是Docker Engine,也就是在命令行和Docker進行交互的時候打交道的后臺進程。
這是Docker Engine目前的架構,Docker客戶端通過REST API與Docker Daemon來進行交互,Daemon把命令下發給containerd,containerd負責容器的生命周期管理以及鏡像管理等,而runc負責創建容器。
Docker首次發布時,Docker Engine由兩個核心組件構成:LXC和Docker Daemon。Docker Daemon是單一的二進制文件,包含諸如 Docker客戶端、Docker API、容器運行時、鏡像構建等。LXC提供了對Namespace(資源隔離)和CGroup(資源限制)等基礎工具的操作能力,它們是基于Linux內核的容器虛擬化技術。
安裝Docker
安裝好Docker后,可以執行兩條命令查看Docker環境以及版本信息:
- docker version
- docker info
Docker鏡像
如果說Docker容器本質上是一個運行的進程以及它需要的一些依賴,而Docker鏡像則是定義容器的一個"模版",容器則是鏡像運行的一個實例。鏡像是一個打包好的文件,里面包含了應用程序運行所需的所有庫、配置和依賴。
Docker鏡像結構
所有的Docker鏡像都起始于一個基礎鏡像層,當進行修改或增加新的內容時,就會在當前鏡像層之上,創建新的鏡像層。以Dockerfile為例,每一行指令都產生一個新層。
鏡像由一個或多個只讀的鏡像層構建而成,每個鏡像層擁有獨立的哈希值,Docker在拉取或推送鏡像時,會判斷哪幾層在本地或遠端已存在,避免不必要的操作。
Docker鏡像命令
我們可以通過下面這些命令進行一些Docker鏡像相關的基本操作。
Docker容器
容器是鏡像的一個運行的實例,用戶可以從單個鏡像上啟動一個或多個容器。
Docker容器的生命周期
容器在創建時進入Created狀態,運行后進入Running狀態,接著會進入到Pause狀態或Exited狀態,對已經退出的容器執行重啟操作會使容器進入Restarting狀態,隨后轉為Running狀態。
Docker容器操作
創建一個Docker容器https://www.zhihu.com/video/1166455714251264000Dockerfile
Dockerfile是一個用以構建鏡像的文本文件,它包括了一系列的執行用來表示當前應用的描述、依賴以及該如何運行這個應用,Docker Engine通過解析Dockerfile里的指令,來構建一個Docker鏡像。
執行docker build命令會從頂層開始解析Dockerfile中的指令并逐行執行。而對每一條指令,Docker都會檢查緩存中是否已經有與該指令對應的鏡像層。
編寫一個Dockerfilehttps://www.zhihu.com/video/1166455944463732736多階段構建
當Dockerfile中包含多個FROM語句時,觸發多階段構建。使用多階段構建可以文件從另一個階段復制到另一個階段,生成的鏡像將會是最后一個階段構建的結果。
這個功能在某些情況下會十分有用,比如我們在編譯應用時需要用到許多依賴,但想要保持鏡像盡可能地小,這時候就可以通過多階段構建來將編譯環境和運行環境分離,在最終生成的鏡像中只保留編譯好的可執行文件。
Dockerfile多階段構建https://www.zhihu.com/video/1166456122667143168應用容器化
這時候歸納一下應用容器化的過程:
Docker Registry
Docker Registry是鏡像存儲和分發的倉庫,以完成鏡像的搜索、拉取和推送等操作。
推送一個鏡像:
- docker push ubuntu(http://docker.io)
- docker push myregistrydomain:port/foo/bar(myregistrydomain:port)
拉取一個鏡像:
- docker pull ubuntu(http://docker.io)
- docker pull myregistrydomain:port/foo/bar(myregistrydomain:port)
Docker數據管理
下面介紹一下Docker是怎么管理和存儲數據的,Docker提供了3種方法將數據從宿主機掛載到容器:volumes,bind mounts和tmpfs mounts。其中volume適合在不同的容器中共享數據和數據遷移,bind mount適合宿主機與容器之間共享配置和代碼,tmpfs適合不需要持久化數據的場景。
Docker網絡
Docker基于CNM實現了網絡模型,CNM模型由三個部分組成:Sandbox,Endpoint,Network。
Docker內置了以下幾種網絡驅動,其中bridge橋接網絡是Docker默認的網絡驅動,在這種模式下,連接到同一個網橋的容器會使用同一個DNS解析服務,容器間可以使用這個解析服務來相互通信,而overlay是swarm模式下默認的網絡驅動。
Docker DNShttps://www.zhihu.com/video/1166460676783669248Docker Machine
Docker Machine是一個用來在虛擬機安裝Docker Engine的工具,以及通過命令行來管理和登錄這些主機。
Docker Compose
Docker Compose是一個定義和運行多容器應用的工具,通過編寫Compose文件來定義和配置應用,只需要用docker-compose一條命令就可以一次把所有定義好的服務啟動起來。
Docker Compose部署應用https://www.zhihu.com/video/1166457477158903808Docker Swarm
Docker Swarm是Docker原生的集群管理和調度工具,它把多個Docker主機抽象成單個虛擬的系統,開發者方便地可以通過Docker Swarm在多個主機上來調度和部署Docker容器。
在Swarm中有幾個概念,Node代表著Swarm集群中的一個Docker主機,其中每個主機可以是Manager或者Worker兩個角色,他們分別代表管理節點和工作節點。Task可以理解為一個Docker容器以及其運行的命令,Service是一組Task的集合與定義,即運行在Node上的服務。
Docker Swarm提供了多種調度策略,來按需選擇將容器分配到不同的節點上。
使用Swarm部署應用https://www.zhihu.com/video/1166463996525010944好了,希望看到這后你對Docker可以有一個了解。
總結
以上是生活随笔為你收集整理的docker 容器状态 restarting_20分钟极简入门Docker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于jsp的网上商城_[源码和文档分享]
- 下一篇: python条件控制语句要注意什么_关于