日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker基础入门总结

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker基础入门总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是Docker

?  官方文檔描述:“Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.”

  一句話概括容器:容器就是將軟件打包成標準化單元,以用于開發、交付和部署。

  • Docker使用Google公司推出的Go語言進行開發實現,基于Linux內核的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬于操作系統層面的虛擬化技術。 由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。Docke最初實現是基于LXC。
  • 容器鏡像是輕量的、可執行的獨立軟件包 ,包含軟件運行所需的所有內容:代碼、運行時環境、系統工具、系統庫和設置。

  • 容器化軟件適用于基于Linux和Windows的應用,在任何環境中都能夠始終如一地運行。

  • 容器賦予了軟件獨立性,使其免受外在環境差異(例如,開發和預演環境的差異)的影響,從而有助于減少團隊間在相同基礎設施上運行不同軟件時的沖突。

  再來看看容器較為通俗的解釋:
  如果需要通俗的描述容器的話,我覺得容器就是一個存放東西的地方,就像書包可以裝各種文具、衣柜可以放各種衣服、鞋架可以放各種鞋子一樣。我們現在所說的容器存放的東西可能更偏向于應用比如網站、程序甚至是系統環境。

              

二、為什么要用Docker

  • Docker的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現“這段代碼在我機器上沒問題啊”這類問題;——一致的運行環境

  • 可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。——更快速的啟動時間

  • 避免公用的服務器,資源會容易受到其他用戶的影響。——隔離性

  • 善于處理集中爆發的服務器使用壓力;——彈性伸縮,快速擴展

  • 可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環境的變化導致應用無法正常運行的情況。——遷移方便

  • 使用Docker可以通過定制應用鏡像來實現持續集成、持續交付、部署。——持續交付和部署

三、Docker容器與虛擬機的區別

?  簡單來說: 容器和虛擬機具有相似的資源隔離和分配優勢,但功能有所不同,因為容器虛擬化的是操作系統,而不是硬件,因此容器更容易移植,效率也更高。

  傳統虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更為輕便。

  兩者對比圖

        

  容器與虛擬機 (VM) 總結

          

  • 容器是一個應用層抽象,用于將代碼和依賴資源打包在一起。 多個容器可以在同一臺機器上運行,共享操作系統內核,但各自作為獨立的進程在用戶空間中運行 。與虛擬機相比, 容器占用的空間較少(容器鏡像大小通常只有幾十兆),瞬間就能完成啟動 。

  • 虛擬機(VM)是一個物理硬件層抽象,用于將一臺服務器變成多臺服務器。 管理程序允許多個VM在一臺機器上運行。每個VM都包含一整套操作系統、一個或多個應用、必要的二進制文件和庫資源,因此占用大量空間。而且VM啟動也十分緩慢 。?

  通過Docker官網,我們知道了這么多Docker的優勢,但是大家也沒有必要完全否定虛擬機技術,因為兩者有不同的使用場景。虛擬機更擅長于徹底隔離整個運行環境。例如,云服務提供商通常采用虛擬機技術隔離不同的用戶。而Docker通常用于隔離不同的應用 ,例如前端,后端以及數據庫。就我目前項目而言,對于兩者無所謂誰會取代誰,而是兩者可以和諧共存。
  容器與虛擬機(VM)兩者共存:

          

三、Docker的基本概念

  Docker 中包括三個基本的概念:

  • Image(鏡像)
  • Container(容器)
  • Repository(倉庫)

            

  ?Image(鏡像)

  鏡像是 Docker 運行容器的前提,倉庫是存放鏡像的場所,可見鏡像更是 Docker 的核心。
  那么鏡像到底是什么呢?Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。
  鏡像不包含任何動態數據,其內容在構建之后也不會被改變。鏡像(Image)就是一堆只讀層(read-only layer)的統一視角,也許這個定義有些難以理解,下面的這張圖能夠幫助讀者理解鏡像的定義:?
              

  從左邊我們看到了多個只讀層,它們重疊在一起。除了最下面一層,其他層都會有一個指針指向下一層。這些層是 Docker 內部的實現細節,并且能夠在主機的文件系統上訪問到。
統一文件系統(Union File System)技術能夠將不同的層整合成一個文件系統,為這些層提供了一個統一的視角。這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統。我們可以在圖片的右邊看到這個視角的形式。

  鏡像有多種生成方法:

  • 從無到有開始創建鏡像

  • 下載并使用別人創建好的現成的鏡像

  • 在現有鏡像上創建新的鏡像

?  我們可以將鏡像的內容和創建步驟描述在一個文本文件中,這個文件被稱作 Dockerfile ,通過執行 docker build命令可以構建出 Docker 鏡像。


  Container(容器)
  容器(Container)的定義和鏡像(Image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。?

              

  由于容器的定義并沒有提及是否要運行容器,所以實際上,容器 = 鏡像 + 讀寫層。


  Repository(倉庫)
  Docker 倉庫是集中存放鏡像文件的場所。鏡像構建完成后,可以很容易的在當前宿主上運行。
  但是, 如果需要在其他服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry(倉庫注冊服務器)就是這樣的服務。
  有時候會把倉庫(Repository)和倉庫注冊服務器(Registry)混為一談,并不嚴格區分。
  Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務。
  實際上,一個 Docker Registry 中可以包含多個倉庫(Repository),每個倉庫可以包含多個標簽(Tag),每個標簽對應著一個鏡像。
  所以說,鏡像倉庫是 Docker 用來集中存放鏡像文件的地方,類似于我們之前常用的代碼倉庫。
  通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本 。
  我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 Latest 作為默認標簽。
  倉庫又可以分為兩種形式:

  • Public(公有倉庫)
  • Private(私有倉庫)

  Docker Registry 公有倉庫是開放給用戶使用、允許用戶管理鏡像的 Registry 服務。
  一般這類公開服務允許用戶免費上傳、下載公開的鏡像,并可能提供收費服務供用戶管理私有鏡像。
  除了使用公開服務外,用戶還可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 鏡像,可以直接使用做為私有 Registry 服務。
  當用戶創建了自己的鏡像之后就可以使用 Push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 Pull 下來就可以了。
  以上我們主要把 Docker 的一些常見概念如 Image,Container,Repository 做了詳細的闡述,也從傳統虛擬化方式的角度闡述了 Docker 的優勢。

四、Docker的架構

  我們從下圖可以直觀地看到 Docker 的架構:?
            

  Docker 使用 C/S 結構,即客戶端/服務器體系結構。Docker 客戶端與 Docker 服務器進行交互,Docker服務端負責構建、運行和分發 Docker 鏡像。
  Docker 客戶端和服務端可以運行在一臺機器上,也可以通過 RESTful 、 Stock 或網絡接口與遠程 Docker 服務端進行通信。?
          

  這張圖展示了 Docker 客戶端、服務端和 Docker 倉庫(即 Docker Hub 和 Docker Cloud ),默認情況下 Docker 會在 Docker 中央倉庫尋找鏡像文件。
  這種利用倉庫管理鏡像的設計理念類似于 Git ,當然這個倉庫是可以通過修改配置來指定的,甚至我們可以創建我們自己的私有倉庫。

五、Docker常用命令

  我們可以通過 docker -h 去查看命令的詳細的幫助文檔。在這里會講一些日常我們可能會用的比較多的一些命令。?
              

例如,我們需要拉取一個 Docker 鏡像,我們可以用如下命令:

docker pull image_name

image_name 為鏡像的名稱,而如果我們想從 Docker Hub 上去下載某個鏡像,我們可以使用以下命令:

docker pull centos:latest

cento:lastest 是鏡像的名稱,Docker Daemon 發現本地沒有我們需要的鏡像,會自動去 Docker Hub 上去下載鏡像,下載完成后,該鏡像被默認保存到 /var/lib/docker 目錄下。
接著我們如果想查看主機下存在多少鏡像,我們可以用如下命令:

docker images

我們要想知道當前有哪些容器在運行,我們可以用如下命令:

docker ps -a

-a 是查看當前所有的容器,包括未運行的。我們該如何去對一個容器進行啟動,重啟和停止呢?
我們可以用如下命令:

docker start container_name/container_iddocker restart container_name/container_iddocker stop container_name/container_id

這個時候我們如果想進入到這個容器中,我們可以使用 attach 命令:

docker attach container_name/container_id

那如果我們想運行這個容器中的鏡像的話,并且調用鏡像里面的 bash ,我們可以使用如下命令:

docker run -t -i container_name/container_id /bin/bash

那如果這個時候,我們想刪除指定鏡像的話,由于 Image 被某個 Container 引用(拿來運行),如果不將這個引用的 Container 銷毀(刪除),那 Image 肯定是不能被刪除。
我們首先得先去停止這個容器:

docker psdocker stop container_name/container_id

然后我們用如下命令去刪除這個容器:

docker rm container_name/container_id

然后這個時候我們再去刪除這個鏡像:

docker rmi image_name

常用的 Docker 相關的命令就講到這里為止了,我們在后續的文章中還會反復地提到這些命令。

?

參考文獻:

https://docs.docker.com/engine/docker-overview/

https://mp.weixin.qq.com/s/9--UJYVJXVr92RCX36R6Vg

?

                                --- END ---

轉載于:https://www.cnblogs.com/LangXian/p/10635639.html

總結

以上是生活随笔為你收集整理的Docker基础入门总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。