1、Docker概述與安裝

相關資源網站:
● docker官網:http://www.docker.com
● Docker Hub倉庫官網: https://hub.docker.com/
注意,如果只是想看Docker的安裝,可以直接往下拉跳轉到Docker架構與安裝章節下的Docker具體安裝步驟,一步步帶你安裝自己的Docker;

Docker簡介概述

Docker對我來說是一種全新技術,既然是全新的技術那么我就不禁要問了,Docker它到底是什么東西?它是基于什么場景下出現的,解決了什么問題呢?

Docker技術入門理解

首先什么是Docker?
Docker 是使用 Google 公司推出的 Go 語言 進行開發實現,基于 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬于操作系統層面的虛擬化技術。由于隔離的進程獨立于宿主和其它的隔離的進程,因此也稱其為容器。最初實現是基于 LXC,從 0.7 版本以后開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和 containerd。Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔離等等,極大的簡化了容器的創建和維護,使得 Docker 虛擬技術比虛擬機技術更為輕便、快捷。
以上是我在網上搜刮出來的定義,很生硬,但可以簡單地將Docker理解為一種類似于Linux虛擬機的虛擬化技術;
那么為什么會出現Docker這種虛擬化技術呢?它解決了什么問題?
我們來看一下下面這個場景:
假如說在你入職一個公司后,在公司參與開發了公司的一個項目,你使用的電腦中具有特定配置的開發環境,也就是說跟公司的其他開發人員的環境配置各有不同;你正在開發的應用肯定是依賴于你當前的環境配置以及某些配置文件,除此之外,公司也有一套標準化的測試和生產環境、以及自身的配置和一系列的支持文件的;你是不是遇到過自己在本地跑項目的時候是沒有問題的,一推到線上或者代碼給到運維跑的時候就出現了奇奇怪怪的Bug各種令人頭疼;
這個時候一番扯皮推卸責任的免不了的;那么問題來了,你要如何確保你開發的應用能夠在這些環境中運行和通過質量檢測?并且在部署過程中不出現令人頭疼的版本、配置問題,也無需重新編寫代碼和進行故障修復呢?
這就是Docker所解決的問題,它對此給出了一個標準化的解決方案,即系統平滑移植,容器虛擬化技術。
在沒有Docker之前,開發人員將系統源代碼提交給運維之后,運維就需要拿著這份源代碼進行項目部署,但是在進行部署的時候就有可能會遇到一些問題,比如說環境不一致的問題,就像上面說的,開發環境跟運維環境不一致,這就需要運維人員根據開發人員給的版本清單,一步一步的進行手動安裝環境,異常麻煩;而且更致命的是,若果開發的項目是分布式集群項目,每個集群中的每臺機器都要安裝一下環境,要是此時有任何一臺機器在安裝過程中出現了差錯,都有可能導致項目部署失敗;
還有就是若果說開發的系統需要進行機器擴容,增加某個集群的機器,這對運維來說也是一個難題;

上面一系列下來可以看出,環境的配置過程相當麻煩,換一臺機器,就要重來一次,費力費時;而引入了Docker之后,假如說現在項目在開發環境下是完全百分百可以運行的,不管是源碼、配置、環境、版本等都沒有問題,這個時候Docker就可以將這一整套東西打包成一個鏡像文件,你可以將這個鏡像文件發送到任何平臺環境,運行這個鏡像文件時會開啟一個容器,不管你是在什么環境下運行都與你在開發時的環境一模一樣,相當于在開發環境中運行這個項目,達到應用平臺無縫銜接;

為什么要選擇Docker呢?用虛擬機技術不是也能達到類似效果嗎?
首先Docker 容器的本質可以理解為通過容器虛擬技術,利用宿主機的硬件資源來虛擬出的一臺主機,就像虛擬機一樣,可以將應用及其運行環境部署在這臺虛擬出的“主機”(容器)上運行。但容器與傳統的虛擬機技術(VMware、VirtualBox等運行的虛擬機技術)又有著本質的不同。
在這里插入圖片描述
傳統的虛擬機技術
傳統的虛擬技術是在物理機的操作系統之上安裝一個虛擬機管理程序,例如 VMware、 VirtualBox 等,在虛擬機管理程序的管理下,使用者可以在同一個物理服務器上創建多個虛擬機,每個虛擬機需要安裝自己獨立的操作系統,而應用就是安裝在虛擬機的操作系統之上的程序,應用程序通過調用各種命令或庫函數來使用其需要的各種系統資源。
在這種情況下對于完全相同的兩個應用,若它們需要運行在兩個虛擬機中,就需要兩套完全相同的虛擬機操作系統與 bins/libs,如上圖左側所示,存在大量的資源占用冗余,形成資源浪費。
Docker容器虛擬化技術
因為Docker 容器運行在 Docker 引擎之上,是在宿主機服務器的操作系統層面實現的虛擬化,可以直接復用本地物理主機的操作系統;所有 Docker 容器都共享同一個 Docker 引擎,所以不需要像傳統虛擬機一樣需要另外的虛擬硬件及虛擬操作系統, 而是共享的宿主機的硬件與操作系統,但它們的運行環境又是相互隔離、互不干擾的。并且所有 Docker 容器對于系統硬件資源的使用都是由 Docker 引擎統一進行管理,所以對系統資源的占用很少,其僅包含 運行時必須的一些資源,利用率很高。無論是應用執行速度、內存損耗或者文件存儲速度, 都要比傳統虛擬機技術更高效。

小結Docker解決的問題

1、 提供統一的運行環境
在生產環境中,很多時候的開發、測試及上線環境都是不一樣的,從而導致項目(war 或 jar)在不同階段出現很多其它階段所不存在的奇怪的問題。 Docker 容器除了可以提供相同的應用外,還提供了該應用的統一運行環境,確保在任 何宿主機 HOST 上都可以跑出相同的結果。即 Docker = jar/war + 環境。
2、 便捷的應用遷移
由于 Docker 確保了統一的運行環境,使得應用的遷移更加便捷。無論是物理機、虛擬 機、公有云、私有云,Docker 鏡像的運行結果都是相同的。用戶可以很方便地將一個平臺 上運行的應用,遷移到另一個平臺上,而無需擔心運行環境的變化導致應用無法正常運行。
3、 超快的啟動時間
傳統的虛擬機技術啟動應用一般需要數分鐘:首先需要啟動虛擬機,然后再加載虛擬機 操作系統,最后還需要再手工啟動應用。而 Docker 容器應用,由于直接運行于宿主機系統 中,無需啟動操作系統,因此可以做到秒級、甚至毫秒級的啟動。
4、 更輕松的維護和擴展
Docker 公司及各個開源項目團隊一起維護了一大批高質量的官方鏡像,既可以直接在 生產環境使用,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。
Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應 用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單。

Docker架構與安裝

閱讀docker官方的Guides文檔可以發現,Docker系統整體上主要包含客戶端Client、宿主機DOCKER_HOST(服務端)和倉庫Register三大部分。我們日常使用各種 docker 命令,其實就是在使用Client 客戶端工具 給 Docker 引擎(服務端守護進程Docker daemon) 提交請求進行交互,如下圖所示。
在這里插入圖片描述

1、Client 客戶端

Docker 是一個客戶端-服務器(C/S)架構程序。Docker 客戶端只需要向 Docker 服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作并返回結果。
Client 能夠幫助我們使用命令行與 Docker 服務端進行交互,包括本地服務端和遠程服務端:
通過-H參數可以指定客戶端連接的服務端:docker -H host

2、Registry 倉庫

鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
Docker 用 Registry 來保存用戶構建的鏡像。Registry 分為公共和私有兩種。一個 Docker Registry 中可以包含多個 倉庫(Repository);每個倉庫可以包含多個 標簽(Tag);每個標簽對應一個鏡像。Docker 公司運營公共的 Registry 叫做 Docker Hub。用戶可以在 Docker Hub 注冊賬號,分享并保存自己的鏡像。

3、Docker 引擎(服務器端)

服務端會啟動一個守護進程 Docker Daemon ,通過 socket 或者 RESTful API 監聽來自客戶端的請求,并且處理這些請求,實現對鏡像和容器的操作。 守護進程可以 管理 Docker 對象(例如鏡像、容器、網絡和卷);還可以與其他守護進程通信以管理 Docker 服 務。

Docker的安裝介紹

Docker 可以安裝在 Windows、Linux、Mac 等系統中,我們經常說的安裝Docker其實主要就是安裝Docker引擎,只是為了簡單直接說安裝Docker而已;在安裝 Docker 之前需要先了解 Docker 官方對其版本的分類。Docker 的版本分為大版本 與小版本。
Docker 從大版本來說,分為三類:Moby、社區版 Docker-CE(Community Edition)和企業版 Docker-EE(Enterprise Edition)。
從 v1.13.1 之后,Docker 的發布計劃發生了變更,每個大版本下都出現了兩個小版 本 Edge 月版與 Stable 季版。不過,現在的官網中一般只能看到 Stable 版本。
由于生產環境下,服務器使用 Linux 的居多,所以下面就以 Docker 在 CentOS7 中的安裝為例來學習 Docker 的安裝;
注意,雖然Docker可以安裝在 Windows、Linux、Mac 等系統中,但Docker并非是一個通用的容器工具,它需要依賴于已存在并運行的 Linux內核環境。Docker的實質上是在已經運行的Linux下制造了一個隔離的文件環境,因此它執行的效率幾乎等同于所部署的Linux主機。因此,Docker必須部署在Linux內核的系統上,如果其他系統想部署Docker就必須安裝一個虛擬Linux環境;
在這里插入圖片描述
即在Windows上部署Docker的方法都是先安裝一個虛擬機,并在安裝Linux系統的的虛擬機中運行Docker。注意,目前,CentOS 僅發行版本中的內核支持 Docker。Docker 運行在CentOS 7 (64-bit)上,要求系統為64位、Linux系統內核版本為 3.8以上,這里選用Centos7.x 。
在這里插入圖片描述
官網 https://docs.docker.com/engine/install/centos/中可以看到具體安裝方式與安裝步驟。

Docker的具體安裝步驟
前面啰嗦了一大堆,現在開始正式安裝Docker,這里我們選擇安裝的是19.03.14版本,當然你不指定版本就是最新版本;
1、首先第一步配置yum工具,
● sudo yum install -y yum-utils
2、卸載系統之前的 docker

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

3、安裝 Docker 運行所需的依賴軟件包
● sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4、配置docker的yum源為阿里云倉庫,告訴Linux從阿里云的鏡像地址獲取 Docker 相關軟件包和更新;

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

5、選擇安裝docker的版本
● 默認安裝最新版:# sudo yum install -y docker-ce docker-ce-cli containerd.io
● 安裝19.03.14版本:sudo yum install -y docker-ce-19.03.14 docker-ce-cli-19.03.14 containerd.io-1.4.6

6、docker安裝好之后,需要給docker配置一下加速鏡像源,默認的鏡像源是Docker官網的,下載鏡像的時候可能速度不是很快,這個鏡像地址可以到自己的阿里云中獲取,當然也可以隨便找一個別人的:
控制臺—>鏡像容器服務---->鏡像中心:鏡像加速服務下獲取
注意,這里額外添加了docker的生產環境核心配置cgroup

# 創建一個docker的配置文件
sudo mkdir -p /etc/docker
# 添加阿里云的加速鏡像源,即registry-mirrors后面的地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
# 重啟
sudo systemctl daemon-reload
sudo systemctl restart docker#啟動 docker & 設置 docker 開機自啟
sudo systemctl enable docker

到這里Docker就安裝完成了,可以輸入docker -v 驗證一下;
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/168171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168171.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168171.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

82基于matlab GUI的圖像處理

基于matlab GUI的圖像處理&#xff0c;功能包括圖像一般處理&#xff08;灰度圖像、二值圖&#xff09;&#xff1b;圖像幾何變換&#xff08;旋轉可輸入旋轉角度、平移、鏡像&#xff09;、圖像邊緣檢測&#xff08;拉普拉斯算子、sobel算子、wallis算子、roberts算子&#xf…

【Rust日報】2023-11-22 Floneum -- 基于 Rust 的一款用于 AI 工作流程的圖形編輯器

Floneum -- 基于 Rust 的一款用于 AI 工作流程的圖形編輯器 Floneum 是一款用于 AI 工作流程的圖形編輯器&#xff0c;專注于社區制作的插件、本地 AI 和安全性。 Floneum 有哪些特性&#xff1a; 可視化界面&#xff1a;您無需任何編程知識即可使用Floneum。可視化圖形編輯器可…

oled的使用 動態的變量 51

源碼均在IIC手寫程序中 外部中斷實現變量加一 #include "reg52.h" #include "main.h" #include <intrins.h> #include "OLED.h" #include "bmp.h" #include "Delay.h" sbit LED1 P1^0; sbit LED2 P1^1; sbit LED3…

【LeetCode每日一題】525. 連續數組

題目&#xff1a; 給定一個二進制數組 nums , 找到含有相同數量的 0 和 1 的最長連續子數組&#xff0c;并返回該子數組的長度。 媽的 連題目都沒有讀懂&#xff01;本來看成是找到兩個連續子數組&#xff0c;兩個連續子數組的 0 1 個數分別相同&#xff0c;我說怎么看著如此…

Python報錯:AttributeError(類屬性、實例屬性)

Python報錯&#xff1a;AttributeError&#xff08;類屬性、實例屬性&#xff09; Python報錯&#xff1a;AttributeError 這個錯誤就是說python找不到對應的對象的屬性&#xff0c;百度后才發現竟然是初始化類的時候函數名寫錯了 __init__應該有2條下劃線&#xff0c;如果只有…

構建未來:云計算 生成式 AI 誕生科技新局面

目錄 引言生成式 AI&#xff1a;開發者新伙伴云計算與生成式 AI 的無縫融合亞馬遜云與生成式 AI 結合的展望/總結我用亞馬遜云科技生成式 AI 產品打造了什么&#xff0c;解決了什么問題未來科技發展趨勢&#xff1a;開發者的機遇與挑戰結合實踐看未來結語開源項目 引言 2023年…

SpectralGPT: Spectral Foundation Model 論文翻譯1

遙感領域的通用大模型 2023.11.13在CVPR發表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 摘要 ? 基礎模型最近引起了人們的極大關注&#xff0c;因為它有可能以一種自我監督的方式徹底改變視覺表征學習領域。雖然大多數基礎模型…

VSCode 連接遠程服務器問題及解決辦法

端口號不一樣&#xff0c;需要在配置文件中添加Port Host 27.223.26.46HostName 27.223.*.*User userForwardAgent yesPort 14111輸入密碼后可以連接 在vscode界面&#xff0c;終端&#xff0c;生成公鑰&私鑰 ssh-keygen可以看到有id_rsa和id_rsa.pub兩個文件生成&#…

curl 命令的一些基本用法,

curl 是一個用于在命令行中進行網絡請求的工具。以下是一些 curl 命令的常見用法&#xff1a; 從 URL 下載文件并保存為本地文件&#xff1a; curl -O URL例如&#xff1a; curl -O https://example.com/file.zip這將會將 file.zip 下載到當前目錄。 將文件下載到指定位置&…

Nginx如何配置負載均衡

nginx的負載均衡有4種模式&#xff1a; 1)、輪詢&#xff08;默認&#xff09; 每個請求按時間順序逐一分配到不同的后端服務器&#xff0c;如果后端服務器down掉&#xff0c;能自動剔除。 2)、weight 指定輪詢幾率&#xff0c;weight和訪問比率成正比&#xff0c;用于后端服務…

C#,《小白學程序》第五課:隊列(Queue)其一,排隊的技術與算法

日常生活中常見的排隊&#xff0c;軟件怎么體現呢&#xff1f; 排隊的基本原則是&#xff1a;先到先得&#xff0c;先到先吃&#xff0c;先進先出 1 文本格式 /// <summary> /// 《小白學程序》第五課&#xff1a;隊列&#xff08;Queue&#xff09; /// 日常生活中常見…

antDesignPro a-table樣式二次封裝

antDesignPro是跟element-ui類似的一個樣式框架&#xff0c;其本身就是一個完整的后臺系統&#xff0c;風格樣式都很統一。我使用的是antd pro vue&#xff0c;版本是1.7.8。公司要求使用這個框架&#xff0c;但是UI又有自己的一套設計。這就導致我需要對部分組件進行一定的個性…

nodejs微信小程序+python+PHP-青云商場管理系統的設計與實現-安卓-計算機畢業設計

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

mysql 性能參數調優詳解

1 優化連接池 連接池運行機制 MySQL連接器中的連接池&#xff0c;用以提高數據庫密集型應用程序的性能和可擴展性&#xff0c;默認啟用。MySQL連接器負責管理連接池中的多個連接&#xff0c;自動創建、打開、關閉和破壞連接&#xff0c;多個連接的創建&#xff0c;可滿足多客戶…

C++算法 —— 貪心(4)

文章目錄 1、分發餅干2、最優除法3、跳躍游戲Ⅱ4、跳躍游戲Ⅰ5、加油站6、單調遞增的數字7、壞了的計算器 1、分發餅干 455. 分發餅干 其實看完這個題會發現&#xff0c;如果給定的兩個數組不排序的話會非常難受&#xff0c;所以無論怎樣&#xff0c;先排序。接下來需要比較兩…

項目管理套路:看這一篇絕對夠用??

寫論文必不可少的&#xff0c;就是創建代碼并進行實驗。好的項目管理可以讓實驗進行得更加順利。本篇博客以一次項目實踐為例&#xff0c;介紹項目管理的方法&#xff0c;以及可能遇到的問題&#xff0c;并提供一些可行的解決方案。 目錄 項目管理工具開始第一步版本管理十分關…

GB/T 32223-2015 建筑門窗五金件檢測

建筑門窗五金件包括操縱部件&#xff08;傳動機構用執手、旋轉執手、雙面執手、單點鎖閉器&#xff09;、承載部件&#xff08;合頁&#xff0c;鉸鏈、滑撐、滑輪&#xff09;、傳動啟閉部件&#xff08;傳動鎖閉器、多點鎖閉器、插銷&#xff09;、輔助部件&#xff08;撐擋、…

【JavaWeb】TomcatJavaWebHTTP

Tomcat&JavaWeb&HTTP 文章目錄 Tomcat&JavaWeb&HTTP一、Tomcat1.1 版本選擇及安裝1.2 目錄1.3 WEB項目部署的方式 二、IDEA中Java Web開發部署流程三、HTTP協議3.1 發展歷程3.2 HTTP協議的會話方式3.3 請求報文3.4 響應報文 一、Tomcat Tomcat是Apache 軟件基…

php xml數據轉數組兩種方式

目錄 方法一、可以使用simplexml_load_string()函數將XML數據轉換為數組。 方法二、使用PHP內置的DOMDocument類來將XML數據轉換為數組的方法 方法一、可以使用simplexml_load_string()函數將XML數據轉換為數組。 $xmlData <root><name>John Doe</name>&l…

NX二次開發UF_CSYS_create_matrix 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_matrix Defined in: uf_csys.h int UF_CSYS_create_matrix(const double matrix_values [ 9 ] , tag_t * matrix_id ) overview 概述 Creates a 3 x 3 matrix. 創建…