日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

几张图帮你理解 docker 基本原理及快速入门

發(fā)布時(shí)間:2025/4/5 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 几张图帮你理解 docker 基本原理及快速入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://hainiubl.com/topics/13

什么是docker

Docker 是一個(gè)開(kāi)源項(xiàng)目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目。它基于 Google 公司推出的 Go 語(yǔ)言實(shí)現(xiàn)。 項(xiàng)目后來(lái)加入了 Linux 基金會(huì),遵從了 Apache 2.0 協(xié)議,項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。

Docker 自開(kāi)源后受到廣泛的關(guān)注和討論,以至于 dotCloud 公司后來(lái)都改名為 Docker Inc。Redhat 已經(jīng)在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產(chǎn)品中廣泛應(yīng)用。

Docker 項(xiàng)目的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎(chǔ)是 Linux 容器(LXC)等技術(shù)。在 LXC 的基礎(chǔ)上 Docker 進(jìn)行了進(jìn)一步的封裝,讓用戶(hù)不需要去關(guān)心容器的管理,使得操作更為簡(jiǎn)便。用戶(hù)操作 Docker 的容器就像操作一個(gè)快速輕量級(jí)的虛擬機(jī)一樣簡(jiǎn)單。

下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見(jiàn)容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實(shí)現(xiàn)。

為什么用docker

作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢(shì)。

Docker 在如下幾個(gè)方面具有較大的優(yōu)勢(shì):

  • 更快速的交付和部署

Docker在整個(gè)開(kāi)發(fā)周期都可以完美的輔助你實(shí)現(xiàn)快速交付。Docker允許開(kāi)發(fā)者在裝有應(yīng)用和服務(wù)本地容器做開(kāi)發(fā)。可以直接集成到可持續(xù)開(kāi)發(fā)流程中。

例如:開(kāi)發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來(lái)構(gòu)建一套開(kāi)發(fā)容器,開(kāi)發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來(lái)部署代碼。 Docker 可以快速創(chuàng)建容器,快速迭代應(yīng)用程序,并讓整個(gè)過(guò)程全程可見(jiàn),使團(tuán)隊(duì)中的其他成員更容易理解應(yīng)用程序是如何創(chuàng)建和工作的。 Docker 容器很輕很快!容器的啟動(dòng)時(shí)間是秒級(jí)的,大量地節(jié)約開(kāi)發(fā)、測(cè)試、部署的時(shí)間。

  • 高效的部署和擴(kuò)容

Docker 容器幾乎可以在任意的平臺(tái)上運(yùn)行,包括物理機(jī)、虛擬機(jī)、公有云、私有云、個(gè)人電腦、服務(wù)器等。 這種兼容性可以讓用戶(hù)把一個(gè)應(yīng)用程序從一個(gè)平臺(tái)直接遷移到另外一個(gè)。

Docker的兼容性和輕量特性可以很輕松的實(shí)現(xiàn)負(fù)載的動(dòng)態(tài)管理。你可以快速擴(kuò)容或方便的下線(xiàn)的你的應(yīng)用和服務(wù),這種速度趨近實(shí)時(shí)。

  • 更高的資源利用率

Docker 對(duì)系統(tǒng)資源的利用率很高,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè) Docker 容器。容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時(shí)系統(tǒng)的開(kāi)銷(xiāo)盡量小。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個(gè)不同的應(yīng)用就要起 10 個(gè)虛擬機(jī),而Docker 只需要啟動(dòng) 10 個(gè)隔離的應(yīng)用即可。

  • 更簡(jiǎn)單的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發(fā)和更新,從而實(shí)現(xiàn)自動(dòng)化并且高效的管理。

Docker引擎

docker引擎是一個(gè)c/s結(jié)構(gòu)的應(yīng)用,主要組件見(jiàn)下圖:

  • Server是一個(gè)常駐進(jìn)程
  • REST API 實(shí)現(xiàn)了client和server間的交互協(xié)議
  • CLI 實(shí)現(xiàn)容器和鏡像的管理,為用戶(hù)提供統(tǒng)一的操作界面

Docker構(gòu)架

Docker使用C/S架構(gòu),Client 通過(guò)接口與Server進(jìn)程通信實(shí)現(xiàn)容器的構(gòu)建,運(yùn)行和發(fā)布。client和server可以運(yùn)行在同一臺(tái)集群,也可以通過(guò)跨主機(jī)實(shí)現(xiàn)遠(yuǎn)程通信。

核心概念

  • 鏡像(image)

Docker 鏡像(Image)就是一個(gè)只讀的模板。例如:一個(gè)鏡像可以包含一個(gè)完整的操作系統(tǒng)環(huán)境,里面僅安裝了 Apache 或用戶(hù)需要的其它應(yīng)用程序。鏡像可以用來(lái)創(chuàng)建 Docker 容器,一個(gè)鏡像可以創(chuàng)建很多容器。Docker 提供了一個(gè)很簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶(hù)甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來(lái)直接使用。

鏡像(Image)就是一堆只讀層(read-only layer)的統(tǒng)一視角,也許這個(gè)定義有些難以理解,看看下面這張圖:

右邊我們看到了多個(gè)只讀層,它們重疊在一起。除了最下面一層,其它層都會(huì)有一個(gè)指針指向下一層。這些層是Docker內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),并且能夠在docker宿主機(jī)的文件系統(tǒng)上訪(fǎng)問(wèn)到。統(tǒng)一文件系統(tǒng)(Union File System)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了一個(gè)統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶(hù)的角度看來(lái),只存在一個(gè)文件系統(tǒng)。

  • 倉(cāng)庫(kù)(repository)

倉(cāng)庫(kù)(Repository)是集中存放鏡像文件的場(chǎng)所。有時(shí)候會(huì)把倉(cāng)庫(kù)和倉(cāng)庫(kù)注冊(cè)服務(wù)器(Registry)混為一談,并不嚴(yán)格區(qū)分。實(shí)際上,倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。

倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。最大的公開(kāi)倉(cāng)庫(kù)是 Docker Hub,存放了數(shù)量龐大的鏡像供用戶(hù)下載。國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括 時(shí)速云 、網(wǎng)易云 等,可以提供大陸用戶(hù)更穩(wěn)定快速的訪(fǎng)問(wèn)。當(dāng)然,用戶(hù)也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)私有倉(cāng)庫(kù)。

當(dāng)用戶(hù)創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉(cāng)庫(kù),這樣下次在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí)候,只需要從倉(cāng)庫(kù)上 pull 下來(lái)就可以了。

Docker 倉(cāng)庫(kù)的概念跟 Git 類(lèi)似,注冊(cè)服務(wù)器可以理解為 GitHub 這樣的托管服務(wù)。

  • 容器(container)

Docker 利用容器(Container)來(lái)運(yùn)行應(yīng)用。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。可以把容器看做是一個(gè)簡(jiǎn)易版的 Linux 環(huán)境(包括root用戶(hù)權(quán)限、進(jìn)程空間、用戶(hù)空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。

容器的定義和鏡像幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫(xiě)的。

一個(gè)運(yùn)行態(tài)容器被定義為一個(gè)可讀寫(xiě)的統(tǒng)一文件系統(tǒng)加上隔離的進(jìn)程空間和包含其中的進(jìn)程。下面這張圖片展示了一個(gè)運(yùn)行中的容器。

正是文件系統(tǒng)隔離技術(shù)使得Docker成為了一個(gè)非常有潛力的虛擬化技術(shù)。一個(gè)容器中的進(jìn)程可能會(huì)對(duì)文件進(jìn)行修改、刪除、創(chuàng)建,這些改變都將作用于可讀寫(xiě)層。

Docker安裝部署

docker安裝非常簡(jiǎn)單,支持各種平臺(tái),請(qǐng)到官網(wǎng)自行安裝下載docker下載

Docker常用命令

獲取鏡像

docker pull

從倉(cāng)庫(kù)獲取所需要的鏡像。

使用示例:

docker pull centos:centos6

實(shí)際上相當(dāng)于 docker pull registry.hub.docker.com/centos:centos6
命令,即從注冊(cè)服務(wù)器 registry.hub.docker.com 中的 centos 倉(cāng)庫(kù)來(lái)下載標(biāo)記為 centos6 的鏡像。
有時(shí)候官方倉(cāng)庫(kù)注冊(cè)服務(wù)器下載較慢,可以從其他倉(cāng)庫(kù)下載。 從其它倉(cāng)庫(kù)下載時(shí)需要指定完整的倉(cāng)庫(kù)注冊(cè)服務(wù)器地址。

查看鏡像列表#

docker images

列出了所有頂層(top-level)鏡像。實(shí)際上,在這里我們沒(méi)有辦法區(qū)分一個(gè)鏡像和一個(gè)只讀層,所以我們
提出了top-level鏡像。只有創(chuàng)建容器時(shí)使用的鏡像或者是直接pull下來(lái)的鏡像能被稱(chēng)為頂層(top-level)
鏡像,并且每一個(gè)頂層鏡像下面都隱藏了多個(gè)鏡像層。

使用示例:

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos centos6 6a77ab6655b9 8 weeks ago 194.6 MB ubuntu latest 2fa927b5cdd3 9 weeks ago 122 MB

在列出信息中,可以看到幾個(gè)字段信息

  • 來(lái)自于哪個(gè)倉(cāng)庫(kù),比如 ubuntu
  • 鏡像的標(biāo)記,比如 14.04
  • 它的 ID 號(hào)(唯一)
  • 創(chuàng)建時(shí)間
  • 鏡像大小

利用 Dockerfile 來(lái)創(chuàng)建鏡像

docker build

使用 docker commit 來(lái)擴(kuò)展一個(gè)鏡像比較簡(jiǎn)單,但是不方便在一個(gè)團(tuán)隊(duì)中分享。我們可以使用
docker build 來(lái)創(chuàng)建一個(gè)新的鏡像。為此,首先需要?jiǎng)?chuàng)建一個(gè) Dockerfile,包含一些如何創(chuàng)建鏡像的
指令。新建一個(gè)目錄和一個(gè) Dockerfile。

mkdir hainiu cd hainiu touch Dockerfile

Dockerfile 中每一條指令都創(chuàng)建鏡像的一層,例如:

FROM centos:centos6 MAINTAINER sandywei <sandy@hainiu.tech> # move all configuration files into container RUN yum install -y httpd EXPOSE 80 CMD ["sh","-c","service httpd start;bash"]

Dockerfile 基本的語(yǔ)法是

  • 使用#來(lái)注釋
  • FROM 指令告訴 Docker 使用哪個(gè)鏡像作為基礎(chǔ)
  • 接著是維護(hù)者的信息
  • RUN開(kāi)頭的指令會(huì)在創(chuàng)建中運(yùn)行,比如安裝一個(gè)軟件包,在這里使用yum來(lái)安裝了一些軟件

更詳細(xì)的語(yǔ)法說(shuō)明請(qǐng)參考?Dockerfile

編寫(xiě)完成 Dockerfile 后可以使用 docker build 來(lái)生成鏡像。

$ docker build -t hainiu/httpd:1.0 . Sending build context to Docker daemon 2.048 kB Step 1 : FROM centos:centos6 ---> 6a77ab6655b9 Step 2 : MAINTAINER sandywei <sandy@hainiu.tech> ---> Running in 1b26493518a7 ---> 8877ee5f7432 Removing intermediate container 1b26493518a7 Step 3 : RUN yum install -y httpd ---> Running in fe5b6f1ef888 ..... Step 5 : CMD sh -c service httpd start ---> Running in b2b94c1601c2 ---> 5f9aa91b0c9e Removing intermediate container b2b94c1601c2 Successfully built 5f9aa91b0c9e

其中 -t 標(biāo)記來(lái)添加 tag,指定新的鏡像的用戶(hù)信息。 “.” 是 Dockerfile 所在的路徑(當(dāng)前目錄),
也可以替換為一個(gè)具體的 Dockerfile 的路徑。注意一個(gè)鏡像不能超過(guò) 127 層。

用docker images 查看鏡像列表

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hainiu/httpd 1.0 5f9aa91b0c9e 3 minutes ago 292.4 MB centos centos6 6a77ab6655b9 8 weeks ago 194.6 MB ubuntu latest 2fa927b5cdd3 9 weeks ago 122 MB

細(xì)心的朋友可以看到最后一層的ID(5f9aa91b0c9e)和 image id 是一樣的

上傳鏡像

docker push

用戶(hù)可以通過(guò) docker push 命令,把自己創(chuàng)建的鏡像上傳到倉(cāng)庫(kù)中來(lái)共享。例如,用戶(hù)在 Docker Hub 上完成注冊(cè)后,可以推送自己的鏡像到倉(cāng)庫(kù)中。

運(yùn)行實(shí)例:

$ docker push hainiu/httpd:1.0

創(chuàng)建容器

docker create <image-id>

docker create 命令為指定的鏡像(image)添加了一個(gè)可讀寫(xiě)層,構(gòu)成了一個(gè)新的容器。注意,這個(gè)容器并沒(méi)有運(yùn)行。

docker create 命令提供了許多參數(shù)選項(xiàng)可以指定名字,硬件資源,網(wǎng)絡(luò)配置等等。

運(yùn)行示例:

創(chuàng)建一個(gè)centos的容器,可以使用倉(cāng)庫(kù)+標(biāo)簽的名字確定image,也可以使用image-id指定image。返回容器id

#查看本地images列表 $ docker images#用倉(cāng)庫(kù)+標(biāo)簽 $ docker create -it --name centos6_container centos:centos6#使用image-id $ docker create -it --name centos6_container 6a77ab6655b9 bash b3cd0b47fe3db0115037c5e9cf776914bd46944d1ac63c0b753a9df6944c7a67 #可以使用 docker ps查看一件存在的容器列表,不加參數(shù)默認(rèn)只顯示當(dāng)前運(yùn)行的容器 $ docker ps -a

可以使用 -v 參數(shù)將本地目錄掛載到容器中。

$ docker create -it --name centos6_container -v /src/webapp:/opt/webapp centos:centos6

這個(gè)功能在進(jìn)行測(cè)試的時(shí)候十分方便,比如用戶(hù)可以放置一些程序到本地目錄中,來(lái)查看容器是否正常工作。本地目錄的路徑必須是絕對(duì)路徑,如果目錄不存在 Docker 會(huì)自動(dòng)為你創(chuàng)建它。

啟動(dòng)容器

docker start <container-id>

Docker start命令為容器文件系統(tǒng)創(chuàng)建了一個(gè)進(jìn)程隔離空間。注意,每一個(gè)容器只能夠有一個(gè)進(jìn)程隔離空間。

運(yùn)行實(shí)例:

#通過(guò)名字啟動(dòng) $ docker start -i centos6_container#通過(guò)容器ID啟動(dòng) $ docker start -i b3cd0b47fe3d

進(jìn)入容器

docker exec <container-id>

在當(dāng)前容器中執(zhí)行新命令,如果增加 -it參數(shù)運(yùn)行bash 就和登錄到容器效果一樣的。

docker exec -it centos6_container bash

停止容器#

docker stop <container-id>

刪除容器#

docker rm <container-id>

運(yùn)行容器

docker run <image-id>

docker run就是docker create和docker start兩個(gè)命令的組合,支持參數(shù)也是一致的,如果指定容器
名字是,容器已經(jīng)存在會(huì)報(bào)錯(cuò),可以增加 --rm 參數(shù)實(shí)現(xiàn)容器退出時(shí)自動(dòng)刪除。

運(yùn)行示例:

docker create -it --rm --name centos6_container centos:centos6

查看容器列表

docker ps

docker ps 命令會(huì)列出所有運(yùn)行中的容器。這隱藏了非運(yùn)行態(tài)容器的存在,如果想要找出這些容器,增加 -a 參數(shù)。

刪除鏡像

docker rmi <image-id>

刪除構(gòu)成鏡像的一個(gè)只讀層。你只能夠使用docker rmi來(lái)移除最頂層(top level layer)
(也可以說(shuō)是鏡像),你也可以使用-f參數(shù)來(lái)強(qiáng)制刪除中間的只讀層。

commit容器#

docker commit <container-id>

將容器的可讀寫(xiě)層轉(zhuǎn)換為一個(gè)只讀層,這樣就把一個(gè)容器轉(zhuǎn)換成了不可變的鏡像。

鏡像保存#

docker save <image-id>

創(chuàng)建一個(gè)鏡像的壓縮文件,這個(gè)文件能夠在另外一個(gè)主機(jī)的Docker上使用。和export命令不同,這個(gè)命令
為每一個(gè)層都保存了它們的元數(shù)據(jù)。這個(gè)命令只能對(duì)鏡像生效。

使用示例:

#保存centos鏡像到centos_images.tar 文件 $ docker save -o centos_images.tar centos:centos6 #或者直接重定向 $ docker save -o centos_images.tar centos:centos6 > centos_images.tar

容器導(dǎo)出

docker export <container-id>

創(chuàng)建一個(gè)tar文件,并且移除了元數(shù)據(jù)和不必要的層,將多個(gè)層整合成了一個(gè)層,只保存了當(dāng)前統(tǒng)一視角看到
的內(nèi)容。expoxt后的容器再import到Docker中,只有一個(gè)容器當(dāng)前狀態(tài)的鏡像;而save后的鏡像則不同,
它能夠看到這個(gè)鏡像的歷史鏡像。

inspect

docker inspect <container-id> or <image-id>

docker inspect命令會(huì)提取出容器或者鏡像最頂層的元數(shù)據(jù)

轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9578409.html

總結(jié)

以上是生活随笔為你收集整理的几张图帮你理解 docker 基本原理及快速入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。