容器 Docker 虛擬機器,別再傻傻分不清

2022-01-10 13:59:56 字數 3688 閱讀 8903

摘要:容器技術起源於linux,是一種核心虛擬化技術,提供輕量級的虛擬化,以便隔離程序和資源。儘管容器技術已經出現很久,卻是隨著docker的出現而變得廣為人知。
容器技術起源於linux,是一種核心虛擬化技術,提供輕量級的虛擬化,以便隔離程序和資源。儘管容器技術已經出現很久,卻是隨著docker的出現而變得廣為人知。docker是第乙個使容器能在不同機器之間移植的系統。它不僅簡化了打包應用的流程,也簡化了打包應用的庫和依賴,甚至整個作業系統的檔案系統能被打包成乙個簡單的可移植的包,這個包可以被用來在任何其他執行docker的機器上使用。

容器和虛擬機器具有相似的資源隔離和分配方式,容器虛擬化了作業系統而不是硬體,更加便攜和高效。

圖1 容器 vs 虛擬機器

相比於使用虛擬機器,容器有如下優點:

由於容器不需要進行硬體虛擬以及執行完整作業系統等額外開銷,容器對系統資源的利用率更高。無論是應用執行速度、記憶體損耗或者檔案儲存速度,都要比傳統虛擬機器技術更高效。因此,相比虛擬機器技術,乙個相同配置的主機,往往可以執行更多數量的應用。

傳統的虛擬機器技術啟動應用服務往往需要數分鐘,而docker容器應用,由於直接執行於宿主核心,無需啟動完整的作業系統,因此可以做到秒級、甚至毫秒級的啟動時間,大大節約了開發、測試、部署的時間。

開發過程中乙個常見的問題是環境一致性問題。由於開發環境、測試環境、生產環境不一致,導致有些問題並未在開發過程中被發現。而docker的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性。

由於docker確保了執行環境的一致性,使得應用的遷移更加容易。docker可以在很多平台上執行,無論是物理機、虛擬機器,其執行結果是一致的。因此可以很輕易的將在乙個平台上執行的應用,遷移到另乙個平台上,而不用擔心執行環境的變化導致應用無法正常執行的情況。

docker使用的分層儲存以及映象的技術,使得應用重複部分的復用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。此外,docker團隊同各個開源專案團隊一起維護了大批高質量的官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本。

docker容器有如下三個主要概念:

典型的使用流程如圖2所示:

圖2 docker容器典型使用流程

(1)首先開發者在開發環境機器上開發應用並製作映象。

docker執行命令,構建映象並儲存在機器上。

(2)開發者傳送上傳映象命令。

docker收到命令後,將本地映象上傳到映象倉庫。

(3)開發者向生產環境機器傳送執行映象命令。

生產環境機器收到命令後,docker會從映象倉庫拉取映象到機器上,然後基於映象執行容器。

下面使用docker將基於nginx映象打包乙個容器映象,並基於容器映象執行應用,然後推送到容器映象倉庫。

安裝docker

docker幾乎支援在所有作業系統上安裝,使用者可以根據需要選擇要安裝的docker版本。

在linux作業系統下,可以使用如下命令快速安裝docker。

curl -fssl get.docker.com -o get-docker.sh

sh get-docker.sh

說明:centos 8.0作業系統使用上述指令碼安裝docker會出現問題,建議使用如下命令安裝較低版本docker。

wget -o /etc/yum.repos.d/docker-ce.repo 

sudo

sed -i 's+download.docker.com+

' /etc/yum.repos.d/docker-ce.repo

yum install docker-ce-18.06.3.ce -y

systemctl restart docker

docker打包映象

docker提供了一種便捷的描述應用打包的方式,叫做dockerfile,如下所示:

# 使用官方提供的nginx映象作為基礎映象

from nginx:alpine

# 執行一條命令修改nginx映象index.html的內容

run echo "hello world" > /usr/share/nginx/html/index.html

# 允許外界訪問容器的80埠

expose 80

執行docker build命令打包映象。

docker build -t hello .

其中-t表示給映象加乙個標籤,也就是給映象取名,這裡映象名為hello。. 表示在當前目錄下執行該打包命令。

# docker images

repository tag image id created size

hello latest d120ec16dcea 17 minutes ago 158mb

nginx alpine eeb27ee6b893 2 months ago 148mb

本地執行容器映象

有了映象後,您可以在本地執行docker run命令執行容器映象。

# docker run -p 8080:80 hello
docker run命令會啟動乙個容器,命令中-p是將本地機器的8080埠對映到容器的80埠,即本地機器的8080埠的流量會對映到容器的80埠,當您在本地機器訪問 

時,就會訪問到容器中,此時瀏覽器中返回的內容應該就是「hello world」。

把映象推送到映象倉庫

華為雲提供了容器映象服務swr,您也可以將映象上傳到swr,下面演示如何將映象推送到swr。詳細的方法請參見客戶端上傳映象,本文件後續的示例中將主要使用swr作為示例。

首先登入swr控制台,在左側選擇「我的映象」,然後單擊右側「客戶端上傳映象」,在彈出的視窗中單擊「生成臨時登入指令」,然後複製該指令在本地機器上執行,登入到swr映象倉庫。

上傳映象前需要給映象取乙個完整的名稱,如下所示:

# docker tag hello swr.cn-east-3.myhuaweicloud.com/container/hello:v1
這裡

是倉庫位址,每個華為雲區域的位址不同,v1則是hello映象分配的版本號。

然後執行docker push命令就可以將映象上傳到swr。

# docker pull swr.cn-east-3.myhuaweicloud.com/container/hello:v1
點選關注,第一時間了解華為雲新鮮技術~

docker容器和虛擬機器的區別

各種虛擬機器技術開啟了雲計算時代 而docker,作為下一代虛擬化技術,正在改變我們開發 測試 部署應用的方式。那虛擬機器與docker究竟有何不同呢?首先,大家需要明確一點,docker容器不是虛擬機器。2014年,當我第一次接觸docker的時候,我把它比做一種輕量級的虛擬機器。這樣做無可厚非,...

容器與虛擬機器

是否容器化是個問題,或者說容器vs虛擬機器是永恆的爭論 資源需求 安全架構優缺點 容器的優缺點 在mirantis,我們經常考慮如何將整個傳統的開發域上雲,我們首先考慮的不是如何去移動乙個開發域,而是考慮該開發域該不該上雲。在本文中,我們將討論在特定情況下上雲需要考慮的一些問題。目前將應用遷移到雲上...

容器和虛擬機器

說明 容器和虛擬機器都依賴於宿主機才能執行。宿主機可以是筆記本,是資料中心的物理伺服器,也可以是公有雲的某個例項。假設宿主機是一台需要執行 4 個業務應用的物理伺服器。在虛擬機器模型中,首先要開啟物理機並啟動 hypervisor 引導程式。一旦 hypervisor 啟動,就會占有機器上的全部物理...