Docker入門——理解Docker的核心概念

来源:https://www.cnblogs.com/larrydpk/archive/2020/06/30/13211467.html
-Advertisement-
Play Games

1 前言 相信不少人聽過這麼一句話: 人類的本質是復讀機。 在軟體開發領域也一樣,我們總是想尋找更好地方式複製優秀的邏輯或系統。最核心的方法是抽取通用邏輯和組件,把差異化的東西介面化或配置化,達到復用的效果。如Java的Build Once, Run Everywhere,還有Spring的強大的抽 ...


1 前言

相信不少人聽過這麼一句話:

人類的本質是復讀機。

在軟體開發領域也一樣,我們總是想尋找更好地方式複製優秀的邏輯或系統。最核心的方法是抽取通用邏輯和組件,把差異化的東西介面化或配置化,達到復用的效果。如JavaBuild Once, Run Everywhere,還有Spring的強大的抽象能力。這是應用層面的復用,Docker則在系統層面作文章,讓我們可以快速複製一個系統(如CentOS)或一個服務(如Kafka)。

2 Docker的便利與優勢

利用Docker,我們可以很快的使用別人已經建立好的鏡像來發佈一個完整的系統或某個組件。它至少提供了以下便利:

  • 提供一致的運行環境。從同一個鏡像文件創建容器,應用運行環境相同,保持開發環境、測試環境和生產環境的一致。這能減少許多因環境差異和配置差異帶來的問題。測試提了Bug,開發再也不能第一時間回:是你環境沒配好吧?是你不會用吧?
  • 彈性的系統。因Docker可快速啟動/停止,使系統能根據請求量/數據量動態的改變運行的服務數量,以提供伸縮可變的系統服務。
  • 微服務開發。容器可以非常輕量級,而且可快速動態啟停,非常適用於微服務架構。一臺物理機器也能運行多個容器,不一定需要物理集群。

複製一個系統,我們可以通過增加一臺物理機,或者通過虛擬機技術運行多個系統,現在有了Docker,還可以通過它來啟動一個系統。與其它方式相比,Docker有以下優勢:

  • 啟動速度快,秒級的啟動速度;

  • 性能好,近似物理機的性能,不會有過多資源損失和性能浪費;

  • 體量小,鏡像可以做得更小(MB級),不像虛擬機的幾GB;

  • 跨平臺,能在Linux/Unix/Mac/Windows系統下運行;

  • 利於CI/CD,有成熟的技術實踐;

  • 社區活躍,有大公司背書,應用廣泛,鏡像資源豐富。

3 Docker核心概念

3.1 鏡像Image

說起鏡像,不由想起當年拿著U盤搗鼓各種系統的日子。那時會找各種系統的iso文件,下載速度還特別慢,幾GB的文件呢。那些iso文件,就是鏡像文件。但這些鏡像文件是相對於物理機系統或虛擬機技術而言的,而不是Docker的鏡像文件。

對於Docker而言,鏡像會被統一管理,在本地有特定的地方存放鏡像,不同的系統位置不一樣。一般而言,是無須自己管理鏡像文件的,Docker會有效地管理和組織。列出所有鏡像命令如下:

docker images
或docker image ls

Docker由鏡像啟動容器,就像通過iso文件安裝啟動系統一樣。鏡像是通用的,因此也是可以共用的。一般我們可以通過復用別人做好的優秀鏡像來提高開發效率。我們只需要在別人鏡像的基礎上做定製開發即可。例如我們可拉取一個帶JDKLinux鏡像,然後把自己的Java應用添加上去,形成自己新的鏡像。

為了提高復用率與速度,我們將鏡像分層,如下圖所示:

如鏡像B是基於鏡像A打包而成的,則鏡像B比鏡像A多一層。鏡像B包含了鏡像A的所有層級。這樣做的好處是,不用管理一個大的鏡像,而管理層級變化。假如本機已經下載了鏡像E,則本機已經有(A, B, C, E),當需要拉取F的時候,不再需要拉取(A, B)了。這利用了Docker的緩存技術,另外,在構建新鏡像時,同樣也使用了緩存。

標簽Tag是鏡像的重要概念,一般用於標記版本號,對於同一個鏡像源名,可以有多個標簽,如redis:5.0.8redis:latest5.0.8latest都是標簽名,預設使用latest

3.2 容器Container

有了鏡像後,就可以創建容器了。啟動一個容器,就像啟動一個進程一樣快速,可以通過docker run命令啟動,如下:

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

容器提供了軟體硬體環境,會消耗物理機資源,同時它還具有狀態,相互隔離。可以從一個鏡像啟動多個不同的容器,如從Ubuntu鏡像啟動多個Ubuntu系統。可以通過命令docker ps查看當前運行的容器,已經停止的容器不會顯示出來。當容器停止時,容器文件並不會消失,可以通過docker ps -a查看所有容器。

可以簡單理解鏡像與容器的關係:

鏡像是容器的模板,是沒運行沒狀態的文件,啟動容器需要鏡像。容器是運行著的、帶狀態的相互隔離的服務。可以由一個鏡像啟動多個容器,也可以從一個容器創建一個鏡像,但這並不說明兩者是可逆的相互轉換。

3.3 倉庫Repository

倉庫很容易理解,就是存放鏡像的地方。既然鏡像是通用的,可以共用,那就需要一個共用的地方,倉庫承擔著這樣一個責任。這跟mavennpm等是同樣的道理。最大、最常用的倉庫當然是官方倉庫Docker Hub,但國內訪問速度也相當感人,可以通過使用國內倉庫解決這個問題,如使用阿裡的倉庫。這跟GitHubmaven也是何其相似。

我們可以從倉庫拉取別人的鏡像,也可以把自己構建的鏡像推送到倉庫上。

4 總結

本次主要講解一下Docker的概念,實踐與命令以後再一一道來。

歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!

歡迎關註微信公眾號<南瓜慢說>,將持續為你更新...

多讀書,多分享;多寫作,多整理。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先上預覽地址 http://106.12.212.110:8077/#/ 1.創建項目 使用vue init webpack temperaure 創建一個vue項目 然後安裝axios zrender 命令分別是 npm install axios -S npm install zrender安裝 ...
  • 在最近的一周,我維護的業務系統出現了很多壞毛病,一周七天crash掉了4次,每次都需要都是因為一點很小的問題,觸發了蝴蝶效應,導致整個系統全盤崩潰,於是產生除了敘述本篇的想法,當然這並不是為了掩蓋我在Coding上的一些細節處理和職責疏忽,只是為了從根本的細節上去分析這些問題。 (一、)為什麼會產生 ...
  • 需求:1、點擊新增一欄商品信息,表單驗證區分 2、輸入SKU編碼,帶出當前行的產品名稱,品牌及單位 解決: ...
  • 本文將以UI設計師轉型做web前端作為案例,詳細解讀學web前端該學習哪些專業知識!當然也適用於所有想轉型web前端的親們! 如何學習web前端知識轉型? 不少UI設計師想要學習web前端知識,一方面是喜歡那些華麗的網頁特效,另一方面則是想成為全棧式UI設計師。 1、HTML/CSS學習 第一階段, ...
  • 使用插件: vue-i18n 1. 安裝: npm install vue-i18n 2. 目錄結構 // i18n.js import Vue from 'vue' import VueI18n from 'vue-i18n' import messages from './lang' Vue.u ...
  • 預設表單提示是英文的,我們可以安裝語言包構建多語言環境。 根據版本選擇命令 For Laravel 7.x : run composer require caouecs/laravel-lang:~6.0 For Laravel 6.x : run composer require caouecs/ ...
  • 1.代碼生成器: [正反雙向](單表、主表、明細表、樹形表,快速開發利器)freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本、處理類、service等完整模塊2.多數據源:(支持同時連接無數個資料庫,可以不同的模塊連接不同數的據庫)支持N個數據源3.阿裡資料庫連 ...
  • 基於Nexus搭建私服 1. 工作流程 2. 倉庫類型 hosted 私服倉庫 proxy倉庫 遠程倉庫 group倉庫 組倉庫,裡面可以設置組合多個倉庫。按順序獲取jar。 3. 預設倉庫 安裝好了Nexus後,會內置幾個maven的預設倉庫。可自定義倉庫。 maven-central proxy ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...