1.容器技術與docker環境部署

一:docker概述

因為 Docker 輕便、快速的特性,可以使應用達到快速迭代的目的。每次小的變更,馬上就可以看到效果,而不用將若干個小變更積攢到一定程度再變更。每次變更一小部分其實是一種非常安全的方式,在開發環境中能夠快速提高工作效率。
Docker容器能夠幫助開發人員、系統管理員、質量管理和版本控制工程師在一個生產環節中一起協同工作。制定一套容器標準能夠使系統管理員更改容器的時候,程序員不需要關心容器的變化,而更專注自己的應用程序代碼。從而隔離開了開發和管理,簡化了開發和部署的成本。

1.什么是Docker

如果要方便的創建運行在云平臺上的應用,必須要脫離底層的硬件,同時還需要任何時間地點可獲取這些資源,這正是 Docker 所能提供的。Docker 的容器技術可以在一臺主機上輕松為任何應用創建一個輕量級的、可移植的、自給自足的容器。通過這種容器打包應用程序,意味著簡化了重新部署、調試這些瑣碎的重復工作,極大的提高了工作效率。
docker 是目前較為主流的容器技術。容器技術是一種輕量級的虛擬化技術,它可以讓應用程序及其依賴項打包在一個獨立的單元中運行,從而實現應用的隔離、可移植性和資源的高效利用。以下從概念、原理、與傳統虛擬化技術的對比、優勢、應用場景等方面詳細介紹容器技術。
容器就像是一個獨立的“盒子”,這個“盒子”里裝著運行某個應用所需要的所有東西,包括代碼、運行時環境、系統工具、系統庫等。不同的容器之間相互隔離,每個容器都有自己獨立的文件系統、進程空間、網絡接口等,就好像它們是在不同的機器上運行一樣,但實際上它們是共享宿主機的操作系統內核。


2:Docker 的優勢


Docker 容器運行速度很快,啟動和停止可以在秒級實現,比傳統虛擬機要快很多;Docker 核心解決的問題是利用容器來實現類似虛擬機的功能,從而利用更加節省的硬件資源提供給用戶更多的計算資源因此,Docker 容器除了運行其中的應用之外,基本不消耗額外的系統資源,在保證應用性能的同時,又減小了系統開銷,使得一臺主機上同時運行數千個Docker 容器成為可能。
傳統虛擬化技術(如 Vware、VirtualBox 等)是通過虛擬機管理程序(Hypervisor)在物理服務器上創建多個虛擬機(V),每個虛擬機都包含完整的操作系統。而容器技術是在操作系統層面進行虛擬化,多個容器共享宿主機的操作系統內核。
容器技術和傳統虛擬化的主要區別在于:
資源占用:傳統虛擬機需要為每個虛擬機分配獨立的操作系統,這會占用大量的系統資源》而容器共享宿主機的內核,只包含應用及其依賴項,資源占用相對較少,啟動速度也更快

隔離性:虛擬機提供了更高程度的隔離,因為每個虛擬機都有自己獨立的操作系統;容器的隔離性相對較弱,但對于大多數應用場景來說已經足夠,并且可以通過合理的配置和管理來增強隔離性。
性能:由于虛擬機存在額外的虛擬化層,會帶來一定的性能開銷;容器直接運行在宿主機的內核上,性能損耗較小,更接近原生應用的性能
Docker 操作方便,可以通過 Dockerfile 配置文件支持靈活的自動化創建和部署。表1將 Docker容器技術與傳統虛擬機的特性進行了比較。

特性docker容器虛擬機
啟動速度秒級分鐘級
計算能力損耗幾乎無損耗50%左右
性能接近原生弱于
系統支持量(單機)上千個幾十個
隔離性資源限制完全隔離

容器技術的優勢主要體現在以下幾個方面:
隔離性:不同的容器之間相互隔離,一個容器的故障或異常不會影響其他容器的運行,提高
了應用的穩定性和安全性。
可移植性:容器將應用及其依賴項打包成一個獨立的單元,使得應用可以在不同的環境中(如開發環境、測試環境、生產環境)無縫遷移和運行,避免了“在我的機器上能運行,但在你的機器上不行” 的問題。
資源高效利用:容器共享宿主機的操作系統內核,不需要為每個應用運行獨立的操作系統,大大減少了資源的浪費,提高了服務器的利用率。
快速部署和擴展:容器的啟動速度非常快,通常只需要幾秒鐘,而且可以根據需要快速創建和銷毀容器,方便進行應用的快速部署和彈性擴展。

Docker之所以擁有眾多優勢,與操作系統虛擬化自身的特點是分不開的。傳統虛擬機需要有額外的虛擬機管理程序和虛擬機操作系統層,而 Docker 容器則是直接在操作系統層面之上實現的虛擬化。圖 2是 Docker 與傳統虛擬機架構。

3:docker的應用場景

開發環境管理:開發人員可以使用容器來創建一致的開發環境,確保團隊成員之間的環境一致性,提高開發效率。
持續集成和持續部署(CI/CD):在CI/CD流程中,容器可以幫助實現應用的快速打包、測試和部署,實現自動化的軟件開發流程。
微服務架構:容器技術非常適合微服務架構,每個微服務可以打包成一個獨立的容器,獨立開發、測試和部署,提高系統的可伸縮性和容錯性。
云計算:云服務提供商可以利用容器技術為用戶提供更高效、靈活的計算資源,用戶可以根據自己的需求快速創建和管理容器化的應用。


4:Docker 核心概念


(1)鏡像


鏡像、容器、倉庫是 Docker 的三大核心概念。其中 Docker 的鏡像是創建容器的基礎,類似虛擬機的快照,可以理解為一個面向 Docker 容器引擎的只讀模板。例如:一個鏡像可以是一個完整的 cent05 操作系統環境,稱為一個 centos 鏡像;也可以是一個安裝了 MySQL 的應用程序,稱之為一個 MySQL鏡像等等。
Docker 提供了簡單的機制來創建和更新現有的鏡像,用戶也可以從網上下載已經創建好的鏡像直接使用。


(2)容器


Docker 的容器是從鏡像創建的運行實例,它可以被啟動、停止和刪除。所創建的每一個容器都是相互隔離、互不可見,以保證安全性的平臺。可以將容器看作是一個簡易版的 Linux 環境,Docker 利用容器來運行和隔離應用。


(3)倉庫


Docker 倉庫是用來集中保存鏡像的地方,當創建了自己的鏡像之后,可以使用 push 命令將它上傳到公有倉庫(Public)或者私有倉庫(Private)。當下次要在另外一臺機器上使用這個鏡像時,只需從倉庫獲取。
倉庫注冊服務器(Registry)是存放倉庫的地方,其中包含了多個倉庫。每個倉庫集中存放某一類鏡像,并且使用不同的標簽(tag)來區分它們。目前最大的公共倉庫是 docker Hub,存放了數量龐大的鏡像供用戶下載使用。

二:docker安裝

Docker 支持在主流的操作系統平臺上進行使用,包括 windows 系統、Linux 系統、以及 Macos 系統等。目前最新的 RHEL、Centos 以及 ubuntu 系統官方軟件源中都已經默認自帶了 Docker 包,可直接安裝使用,也可以用 Docker 自己的 YUM 源進行配置。
Centos 系統下安裝 Docker 可以有兩種方式:一種是使用 CURL 獲得 Docker 的安裝腳本進行安裝,另一種是使用 YUM 倉庫來安裝 Docker。注意:目前 Docker 只能支持 64 位系統。

1.本安裝方式使用阿里的軟件倉庫

(1)關閉系統防火墻

systemctl stop firewalld

setenforce 0

(2)下載docker的repo文件

cd /etc/yum.repos.d/

瀏覽器:阿里云鏡像站:容器——docker-ce/linux/centos/docker-ce.repo?? 將文件保存至桌面,再拉取到yum.repos.d目錄下

(3)替換倉庫地址

sed -i 's/$releasever/8/g' docker-ce.repo

sed -i 's/$basearch/x86_64/g' docker-ce.repo

(4)更新索引文件并安裝docker

dnf clean all

dnf makecache

dnf – y install docker-ce

(5)添加國內鏡像站

cd /etc/docker/

vi daemon.json

{

“exec-opts”: [“native.cgroupdriver=systemd”],

“registry-mirrors”: [

"https://docker.m.daocloud.io",

"https://docker.imgdb.de",

"https://docker-0.unsee.tech",

"https://docker.hlmirror.com",

]

}

(6)開啟docker服務

systemctl daemon-reload

systemctl start docker

systemctl enable docker

docker version

(7)優化內核參數

vi /etc/sysctl.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-iptables=1?????????? //添加

net.bridge.bridge-nf-call-ip6tables=1

sysctl -p

三.docker鏡像操作

1.獲取鏡像


1. 拉取鏡像(pull)

? 命令:docker pull [倉庫名]/[鏡像名]:[標簽]

? 參數:

? 倉庫名:鏡像倉庫地址(如 Docker Hub 的 library 或私有倉庫)。

? 鏡像名:鏡像名稱(如 nginx、python)。

? 標簽:鏡像版本(如 latest、3.9),默認拉取 latest。

2. 查看本地鏡像(images)

? 命令:docker images

? 參數:

? -q:僅顯示鏡像 ID。

? --filter:按條件篩選(如 dangling=true 查看無標簽鏡像)。

3. 創建鏡像(build)

? 命令:docker build -t [鏡像名:標簽] [Dockerfile路徑]

? 參數:

? -t:指定鏡像名稱和標簽。

? --build-arg:傳遞構建時變量(如 --build-arg HTTP_PROXY=xxx)。

? -f:指定 Dockerfile 路徑(默認當前目錄)。

4. 推送鏡像(push)

? 命令:docker push [倉庫名]/[鏡像名]:[標簽]

? 參數:同拉取鏡像,需先登錄倉庫(docker login)。

5. 刪除鏡像(rmi)

? 命令:docker rmi [鏡像ID/名稱:標簽]

? 參數:

? -f:強制刪除(即使有容器依賴)。

? 批量刪除:docker rmi $(docker images -q -f dangling=true)(刪除無依賴鏡像)。

四.容器(Container)操作

1. 運行容器(run)

? 命令:docker run [參數] [鏡像名:標簽] [命令]

? 核心參數:

? -d:后臺運行(守護進程模式)。

? -p:端口映射(如 -p 8080:80,主機端口:容器端口)。

? -v:掛載目錄(如 -v /主機路徑:/容器路徑)。

? -e:設置環境變量(如 -e MYSQL_ROOT_PASSWORD=123)。

? --name:指定容器名稱。

? --rm:容器退出后自動刪除。

? --network:指定網絡模式(如 bridge、host)。

2. 查看容器(ps)

? 命令:docker ps [參數]

? 參數:

? -a:顯示所有容器(包括已停止的)。

? -q:僅顯示容器 ID。

? -l:顯示最近創建的容器。

3. 啟動/停止容器(start/stop)

? 命令:

? 啟動:docker start [容器ID/名稱]

? 停止:docker stop [容器ID/名稱]

? 參數:

? stop 默等待 10 秒,-t 可指定超時時間(如 -t 30)。

4. 進入容器(exec/attach)

? 命令:

? docker exec -it [容器ID/名稱] /bin/bash(推薦,不中斷容器進程)

? docker attach [容器ID/名稱](直接連接 stdin/out,中斷可能停止容器)

? 參數:

? -i:保持標準輸入打開。

? -t:分配偽終端。

5. 刪除容器(rm)

? 命令:docker rm [容器ID/名稱]

? 參數:

? -f:強制刪除(即使正在運行)。

? 批量刪除:docker rm $(docker ps -aq -f status=exited)(刪除已退出容器)。

6. 查看容器日志(logs)

? 命令:docker logs [容器ID/名稱]

? 參數:

? -f:實時跟蹤日志(類似 tail -f)。

? --tail:顯示最近 N 行日志(如 --tail 100)。

三、常用組合操作

? 創建并運行容器:
docker run -d --name nginx -p 80:80 nginx(后臺運行 Nginx,映射 80 端口)。

? 基于容器創建鏡像:
docker commit [容器ID] [新鏡像名:標簽](慎用,推薦通過 Dockerfile 構建)

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

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

相關文章

關于 RSA:RSA 加密算法過程

RSA 是一種非對稱加密算法,用“公鑰”加密,用“私鑰”解密,保證數據傳輸安全。 比喻理解:鎖和鑰匙 想象一下: 公鑰是“上鎖的鎖”,別人可以用它鎖住箱子(加密),但打不開…

SM3算法C語言實現(無第三方庫,帶測試)

一、SM3算法介紹 SM3算法是中國國家密碼管理局(OSCCA)于2010年發布的商用密碼散列函數標準,屬于我國自主設計的密碼算法體系之一 ,標準文檔下載地址為:SM3密碼雜湊算法 。SM3算法輸出長度為256位(32字節&a…

搜索二叉數(c++)

前言 在學習數據結構的時候我們學習過二叉樹,那啥是搜索二叉樹呢?我們知道單純的二叉樹沒有增刪查改的實際意義,因為沒有任何限制條件的二叉樹其實用處很局限。但是堆就不一樣了,他就是一個二叉樹加上了大小堆的限制條件&#xf…

vc MFC在opencv的Mat圖像上顯示中文:Mat轉位MFC的CImage,畫圖寫文字,再轉回Mat

vc MFC在opencv的Mat圖像上顯示中文:Mat轉位MFC的CImage,畫圖寫文字,再轉回Mat // Step 1 創建CImage獲取dc int iImgW matImgSized.cols; int iImgH matImgSized.rows; int iChannel matImgSized.channels(); bool bCon matImgSized.is…

Docker環境部署

目錄 一:Docker 概述 1.什么是 Docker 2:Docker 的優勢 3.Docker 的應用場景 4:Docker 核心概念 二:Docker 安裝 1:本安裝方式使用阿里的軟件倉庫 三:Docker 鏡像操作 1:獲取鏡像 2.查看鏡像信息 3.查看鏡像詳細信息 4.修改鏡像標簽(老名字新名字) 5:刪…

Axios 攔截器實現原理深度剖析:構建優雅的請求處理管道

在構建現代前端應用時,網絡請求處理是關鍵環節。作為最流行的HTTP客戶端庫之一,Axios通過其攔截器機制(Interceptors)提供了強大的請求/響應處理能力。本文將深入Axios源碼,揭示攔截器背后的精妙設計與實現原理。 一、…

寶塔安裝nginx-http-flv-module,音視頻直播,第二篇

1,先安裝環境安裝nginx 先卸載原有nigix nigix 大于等于 1.2.6 cd /www/server # 進入寶塔目錄 yum install git -y git clone https://gitee.com/winshining/nginx-http-flv-module.git 使用源碼安裝nigix 在 自定義模塊 區域點擊「添加」,填寫以下參…

低延遲4G專網:保障關鍵業務的實時通信

在工業互聯網、智慧園區、應急通信等對“實時性”要求極高的場景中,網絡延遲的高低,直接決定了業務運行的可靠性與安全性。IPLOOK依托多年核心網研發經驗,推出的低延遲4G專網解決方案,正是為此類關鍵業務打造的“通信專線”&#…

NLP語言發展路徑分享

自然語言處理初期發展歷程 早期:離散表示 one-hot(只表達“有/無”,語義完全丟失)→ n-gram(局部上下文,但高維稀疏)→ TF-IDF(考慮詞頻與權重,但不能表達詞關聯&#x…

如何將文件從安卓設備傳輸到電腦?

將文件從 Android 手機傳輸到 PC 是例行公事嗎?想讓文件傳輸更輕松嗎?幸運的是,您可以從本文中獲得 7 種方法,其中包含詳細的步驟,幫助您輕松了解如何將文件從 Android 傳輸到 PC,涵蓋了從無線工具到傳統 U…

【經驗分享】淺談京東商品SKU接口的技術實現原理

京東商品 SKU 接口的技術實現原理涉及數據建模、架構設計、接口協議、安全機制及性能優化等多個技術層面。以下從技術角度詳細拆解其實現邏輯: 一、SKU 數據模型與存儲架構 1. SKU 數據模型設計 核心字段定義: 基礎屬性:SKU ID、商品名稱、…

虛擬機配置node.js(前端環境搭建)

1.在windows下安裝node.js(以及npm) 修改npm鏡像為阿里云的 npm install --registryhttps://registry.npmmirror.com 2.在Linux下安裝node.js(Centos7 只支持16版本之前的) wget https://npmmirror.com/mirrors/node/v15.14.0/n…

多模態大語言模型arxiv論文略讀(129)

Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ?? 論文標題:Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations ?? 論文作者:M…

【Redis】Redis 關于 BigKey 的實踐規約

目錄 一、BigKey 的概念 1.1 普通 key 的設計規則 1.2 BigKey 的定義 1.3 BigKey 存在的問題 二、BigKey 的發現與解決方案 第一種方式:redis-cli --bigkeys 第二種方式:scan掃描 第三種方式:第三方工具 第四種方式:網絡…

Golang 與 C/C++ 交互實踐

在軟件開發的實際場景中,我們常常會遇到需要將不同語言的優勢結合起來的情況。Golang 憑借其高效的并發性能和簡潔的語法,在網絡編程和系統開發領域備受青睞;而 C/C 則以其強大的底層操作能力,在系統資源管理方面具有獨特優勢。那…

五子棋流量主小程序單模式多模式開源版

功能和特點: 核心游戲功能: 1515 標準棋盤 黑白棋交替落子 自動判斷勝負和平局 悔棋功能 計時功能 UI 設計: 木紋風格棋盤 立體感棋子(使用陰影和漸變) 響應式布局,適配不同屏幕尺寸 勝利彈窗動畫 交互體驗…

Python古代文物成分分析與鑒別研究:灰色關聯度、嶺回歸、K-means聚類、決策樹分析

原文鏈接:tecdat.cn/?p42718分析師:Gan Tian 在文化遺產保護領域,古代玻璃制品的成分分析一直是研究中西方文化交流的關鍵課題。作為數據科學家,我們在處理某博物館委托的古代玻璃文物保護咨詢項目時,發現傳統分析方法…

RabbitMQ消息隊列實戰指南

RabbitMQ 是什么? RabbitMQ是一個遵循AMQP協議的消息中間件,它從生產者接收消息并傳遞給消費者,在這個過程中,根據路由規則進行消息的路由、緩存和持久化。 AMQP,高級消息隊列協議,是應用層協議的一個開放…

用Java將PDF轉換成GIF

為什么要將 PDF 文件轉換為 GIF 圖片? PDF 是一種矢量圖像格式(因此可以根據指定的尺寸進行渲染),而 GIF 是一種有損的、固定尺寸的位圖文件,像素值固定。因此,將 PDF 轉換為 GIF 文件時,我們需…

Redis之分布式鎖(2)

上一篇文章我們介紹了什么是分布式鎖和分布式鎖的一些基本概念。這篇文章我們來講解一下基于數據庫如何實現分布式鎖。 基于數據庫實現分布式鎖 基于數據庫實現分布式鎖可以分為兩種方式,分別是基于數據庫表和基于數據庫排他鎖。 基于數據庫表 要實現分布式鎖&…