輕量容器引擎Docker安裝及其架構

来源:https://www.cnblogs.com/jiagooushi/archive/2022/08/22/16612962.html
-Advertisement-
Play Games

Docker安裝 卸載舊版本 較舊的 Docker 版本稱為 docker 或 docker-engine 。如果已安裝這些程式,請卸載它們以及相關的依賴項。 yum remove docker \ docker-client \ docker-client-latest \ docker-comm ...


Docker安裝

卸載舊版本

較舊的 Docker 版本稱為 docker 或 docker-engine 。如果已安裝這些程式,請卸載它們以及相關的依賴項。

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安裝Docker依賴環境

在新主機上首次安裝 Docker Engine-Community 之前,需要設置 Docker 倉庫,之後,您可以從倉庫安裝和更新 Docker。

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

設置 Docker 安裝地址

在新主機上首次安裝 Docker Engine-Community 之前,需要設置 Docker 倉庫,之後,您可以從倉庫安裝和更新 Docker,使用以下命令來設置穩定的倉庫(阿裡雲)

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝 Docker Engine-Community

安裝最新版本的 Docker Engine-Community 和 containerd

sudo yum install -y docker-ce docker-ce-cli containerd.io

如果提示您接受 GPG 密鑰,請選是。

Docker 安裝完預設未啟動,並且已經創建好 docker 用戶組,但該用戶組下沒有用戶。

Docker 鏡像加速

阿裡雲鏡像獲取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陸後,左側菜單選中鏡像加速器就可以看到你的專屬地址了:

file

配置daemon.json

您可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

啟動 Docker

systemctl start docker
驗證docker服務

通過運行 hello-world 映像來驗證是否正確安裝了 Docker Engine-Community 。

docker run hello-world

運行該代碼後首先會從倉庫拉取hello-world鏡像,然後運行該鏡像,運行後會輸出一個Hello from Docker!

file

開啟Docker自動補全

使用docker時無法自動補全鏡像名和其他參數,這樣使用效率大大降低,下麵是解決方法

bash-complete
yum install -y bash-completion
刷新文件
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion
測試

輸入docker p後docker會將可選項列出來

docker p

file

Docker架構

Docker總體架構為c/s架構,模塊之間松耦合,包含了Client, Daemon, Registry, Graph, Driver, Libcontainer以及Docker Container

file

Docker的組件

  • Docker Client 是用戶界面,它支持用戶與Docker Daemon之間通信
  • Docker Daemon Docker最核心的後臺進程,運行於主機上,處理服務請求
  • Docker Index是中央registry,支持擁有公有與私有訪問許可權的Docker容器鏡像的備份
  • Docker Containers負責應用程式的運行,包括操作系統、用戶添加的文件以及元數據
  • Docker Images是一個只讀模板,用來運行Docker容器
  • DockerFile是文件指令集,用來說明如何自動創建Docker鏡像

Docker 基本概念

Docker 包括三個基本概念:

鏡像

Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程式、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名捲、環境變數、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

分層存儲

​ 鏡像只是一個虛擬的概念,其實際體現並非由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。

Union FS

​ 聯合文件系統是(Union FS)是linux的存儲技術,也是Docker鏡像的存儲方式, 它是分層的文件系統,將不同目錄拉到同一個虛擬目錄下,下圖展示了Docker用Union FS 搭建的分層鏡像:(比如最下層是操作系統的引導,上一層是Linux操作系統,再上一層是Tomcat,jdk,再上一層是應用代碼)

這些層是只讀的,載入完後這些文件會被看成是同一個目錄,相當於只有一個文件系統。

file

​ 我們可以通過docker info查看鏡像的一些信息,可以看到存儲驅動用的並不是Union FS 而是overlay2,overlay也是一個聯合文件系統,所以上述主要介紹聯合文件系統的概念,至於這些存儲驅動的演變過程和優缺點,

file

鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。(比如,刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅在當前層標記為該文件已刪除。在最終容器運行的時候,雖然不會看到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在構建鏡像的時候,需要額外小心,每一層儘量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。)

容器

鏡像(Image)和容器(Container)的關係,就像是面向對象程式設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root文件系統、自己的網路配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境里,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。也因為這種隔離的特性,很多人初學 Docker 時常常會混淆容器和虛擬機。

​ 前面講過鏡像使用的是分層存儲,容器也是如此。每一個容器運行時,是以鏡像為基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個為容器運行時讀寫而準備的存儲層為容器存儲層

​ 容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存於容器存儲層的信息都會隨容器刪除而丟失。

倉庫

鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它伺服器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。

​ 通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用於對應該軟體的各個版本。我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟體哪個版本的鏡像。如果不給出標簽,將以latest作為預設標簽。(以 Ubuntu 鏡像為例,ubuntu是倉庫的名字,其內包含有不同的版本標簽,如,14.04,16.04。我們可以通過ubuntu:14.04,或者ubuntu:16.04來具體指定所需哪個版本的鏡像。如果忽略了標簽,比如ubuntu,那將視為ubuntu:latest。)

​ 倉庫名經常以三段式路徑形式出現,比如heima.com/nginx-proxy:tag,前者往往意味著 Docker Registry 多用戶環境下的用戶名,後者則往往是對應的軟體名。但這並非絕對,取決於所使用的具體 Docker Registry 的軟體或服務。

本文由傳智教育博學谷 - 狂野架構師教研團隊發佈
如果本文對您有幫助,歡迎關註和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力
轉載請註明出處!


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

-Advertisement-
Play Games
更多相關文章
  • 編碼問題,誰不想避其鋒芒; 一、業務背景 在搜索引擎的功能上,曾經遇到過這樣一個問題,資料庫中某個公司名稱中存在特殊編碼,儘管數據已經正常同步到索引中,但是系統中關鍵詞始終也無法匹配到該公司; 然後在庫中模糊匹配,將公司名稱複製到搜索框中,這樣就可以正常命中索引,那麼問題也就很清楚了,這種數據"隱身 ...
  • Python小游戲——外星人入侵(保姆級教程) 第一章:武裝飛船 06:讓飛船移動 下麵來讓玩家能夠左右移動飛船。我們將編寫代碼,在用戶按左或右箭頭鍵時做出響應。我們將首先專註於向右移動,再使用同樣的原理來控制向左移動。通過這樣做,你將學會如何控制屏幕圖像的移動。 ...
  • 哈嘍,大家好,今天咱們試試只用20行代碼來實現批量獲取網抑雲文件保存本地,炒雞簡單! 悄悄的告訴你,其實不到20行代碼~ 你需要準備 本次使用的環境是Python3.8,編輯器是pycharm 模塊使用的是requests、re、os 三個,其中requests是第三方模塊,需要手動安裝一下,re、 ...
  • 鋼鐵知識庫,一個學習python爬蟲、數據分析的知識庫。人生苦短,快用python。 上一章我們講解針對結構化的html、xml數據,使用Xpath實現網頁內容爬取。本章我們再來聊另一個高效的神器:Beautiful Soup4。相比於傳統正則表達方式去解析網頁源代碼,這個就簡單得多,實踐是檢驗真理 ...
  • “談談常用的分散式ID設計方案”! 一個工作了7年的同學,被問到了這樣一個問題。 問題並不難,但是在實際面試的時候,如果只是回答1,2,3 很難通過面試,因為作為一個高級程式員,還需要有自己的理解和思考。 大家好,我是Mic,一個工作了14年的Java程式員。 這個問題的高手回答,我整理到了15W字 ...
  • 二、流程式控制制 1、用戶交互Scanner java.util.Scanner是Java5的新特性,我們可以通過Scanner類來獲取用戶輸入。 基本語法: Scanner s = new Scanner(System.in); 通過Scanner類的net()與nextLine()方法獲取輸入的字元 ...
  • 1、insert 標簽 1.1 獲取SqlSessionFactory 對象的通用方法 方便後面分測試; //獲取SqlSessionFactory 對象的通用方法 public SqlSessionFactory getSqlSessionFactory() throws IOException ...
  • Base 64 不屬於密碼技術,僅是編碼方式。但由於在 Java、JavaScript、區塊鏈等出現的頻率較高,故在本系列文章中首先分享 Base 64 編碼技術。前面部分主要介紹 Base 64 理論性的內容,如果只看在 Java(SpringBoot)或 JS(Vue)中的實現,可以直接跳到最後... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...