Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解
Docker 鏡像、容器、倉(cāng)庫(kù)的概念
Docker鏡像
Docker鏡像(Image)類似于虛擬機(jī)的鏡像,可以將他理解為一個(gè)面向Docker引擎的只讀模板,包含了文件系統(tǒng)。
例如:一個(gè)鏡像可以完全包含了Ubuntu操作系統(tǒng)環(huán)境,可以把它稱作一個(gè)Ubuntu鏡像。鏡像也可以安裝了Apache應(yīng)用程序(或其他軟件),可以把它稱為一個(gè)Apache鏡像。
鏡像是創(chuàng)建Docker容器的基礎(chǔ),通過(guò)版本管理和增量的文件系統(tǒng),Docker提供了一套十分簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建和更新現(xiàn)有的鏡像。用戶可以從網(wǎng)上下載一個(gè)已經(jīng)做好的應(yīng)用鏡像,并通過(guò)命令直接使用??傊?,應(yīng)用運(yùn)行是需要環(huán)境的,而鏡像就是來(lái)提供這種環(huán)境。
Docker容器
Docker容器(Container)類似于一個(gè)輕量級(jí)的沙箱子(因?yàn)镈ocker是基于Linux內(nèi)核的虛擬技術(shù),所以消耗資源十分少),Docker利用容器來(lái)運(yùn)行和隔離應(yīng)用。
容器是從鏡像創(chuàng)建的應(yīng)用運(yùn)行實(shí)例,可以將其啟動(dòng)、開(kāi)始、停止、刪除,而這些容器都是相互隔離、互不可見(jiàn)的。
可以吧每個(gè)容器看作一個(gè)簡(jiǎn)易版的Linux系統(tǒng)環(huán)境(包括了root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間),以及與運(yùn)行在其中的應(yīng)用程序打包而成的應(yīng)用盒子。
鏡像自身是只讀的。容器從鏡像啟動(dòng)的時(shí)候,Docker會(huì)在鏡像的最上層創(chuàng)建一個(gè)可寫(xiě)層,鏡像本身將保持不變。就像用ISO裝系統(tǒng)之后,ISO并沒(méi)有什么變化一樣。
Docker倉(cāng)庫(kù)
Docker倉(cāng)庫(kù)(Repository)類似與代碼倉(cāng)庫(kù),是Docker集中存放鏡像文件的場(chǎng)所。
有時(shí)候會(huì)看到有資料將Docker倉(cāng)庫(kù)和注冊(cè)服務(wù)器(Registry)混為一談,并不嚴(yán)格區(qū)分。實(shí)際上,注冊(cè)服務(wù)器是存放倉(cāng)庫(kù)的地方,其上往往存放著多個(gè)倉(cāng)庫(kù)。每個(gè)倉(cāng)庫(kù)集中存放某一類鏡像,往往包括多個(gè)鏡像文件,通過(guò)不同的標(biāo)簽(tag)來(lái)進(jìn)行區(qū)分。例如存放Ubuntu操作系統(tǒng)鏡像的倉(cāng)庫(kù),稱為Ubuntu倉(cāng)庫(kù),其中可能包括14.04,12.04等不同版本的鏡像。
根據(jù)存儲(chǔ)的鏡像公開(kāi)分享與否,Docker倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。
目前,最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括Docker Pool等,可以提供穩(wěn)定的國(guó)內(nèi)訪問(wèn)。如果用戶不希望公開(kāi)分享自己的鏡像文件,Docker也支持用戶在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)只能自己訪問(wèn)的私有倉(cāng)庫(kù)。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push將它上傳到指定的公有或則私有倉(cāng)庫(kù)。這樣用戶下次在另一臺(tái)機(jī)器上使用該鏡像時(shí),只需將其從倉(cāng)庫(kù)pull下來(lái)就可以了。
下面一篇文章介紹了有關(guān)上述概念的基本命令
Docker關(guān)于鏡像、容器、倉(cāng)庫(kù)的基本命令
鏡像
1.獲取鏡像
$ docker pull dl.dockerpool.com:5000/ubuntu:14.04
dl.dockerpool.com為注冊(cè)服務(wù)器,5000為端口號(hào),ubuntu為倉(cāng)庫(kù)名稱,14.04是鏡像也是版本號(hào)
2.查看鏡像信息
列出本地主機(jī)已有的所有鏡像
$ docker images
更改變遷信息
$ docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest
000為鏡像ID,顯示這個(gè)鏡像的詳細(xì)信息
$ docker inspect 000
3.搜尋鏡像
$ docker search mysql (輸出信息包括鏡像名字、描述、星級(jí)、是否為官方創(chuàng)建、是否自動(dòng)創(chuàng)建)
4.刪除鏡像
$ docker rmi dl.dockerpool.com:5000/ubuntu:latest
注:當(dāng)有該鏡像創(chuàng)建的容器存在時(shí),鏡像文件默認(rèn)是無(wú)法刪除的,所以刪除鏡像前最好是刪除所有依賴該鏡像的容器,請(qǐng)不要用強(qiáng)制刪除。
5.創(chuàng)建鏡像
有三種方法:
基于已有鏡像的容器創(chuàng)建
$ docker commit -m “add new image”-a "" 000(容器ID) test(新建image name)
基于本地模板導(dǎo)入
$ cat ubuntu-14.04-x86_64-minimal.tar.gz | Docker import - ubuntu:14.04
基于dockerfile創(chuàng)建
6.存出鏡像
$ docker save -o ubuntu_14.04.tar ubuntu:14.04
7.載入鏡像
$ docker load --input ubuntu_14.04.tar
或者
docker load < ubuntu_14.04.tar
8.上傳鏡像
$ docker push user/test:latest
user用戶需要在dockerHub網(wǎng)站注冊(cè)
容器
容器是鏡像的一個(gè)運(yùn)行實(shí)例,但它帶有額外的可寫(xiě)層
1.創(chuàng)建容器
$ docker create -it ubuntu:12.04
2.創(chuàng)建并啟動(dòng)容器
$ docker run -it ubuntu:12.04 /bin/bash
3.守護(hù)態(tài)運(yùn)行
$ docker run -d ubuntu:12.04
4.查看容器信息
$ docker ps [-a -q]
查看終止?fàn)顟B(tài)
5.獲取容器的輸出信息
$ docker logs cet
cet是容器ID前三個(gè)字符
6.終止容器
$ docker stop cet
7.啟動(dòng)容器
$ docker start cet
8.重啟容器
$ docker restart cet
9.進(jìn)入容器
attach命令
$ docker attach nostalgic(nostalgic是docker的name)
缺點(diǎn):所有窗口同步顯示
exec命令
- docker exec -it 243... /bin/bash (243...為docker ID)
nsenter命令
1.找PID
$ PID=$(docker-pid 243..)
2.通過(guò)PID鏈接容器
$ nsenter --target $PID --mount --uts --ipc --net --pid
10.刪除容器
$ docker rm [-f -l -v] cet
-f 強(qiáng)行終止并刪除
-l 刪除容器的鏈接,保留容器
-v 刪除掛載的數(shù)據(jù)卷
$ docker export cet >test.tar
12.導(dǎo)入容器(將容器快照導(dǎo)入到本地鏡像庫(kù))
$ cat test.tar | docker import - test/ubuntu:v1.0
重新指定標(biāo)簽為ubuntu的鏡像名稱,v1.0的版本號(hào)
docker load 也可以導(dǎo)入鏡像存儲(chǔ)文件到本地鏡像庫(kù),他比import方式的好處是:import導(dǎo)入鏡像快照文件將丟失所有的歷史記錄和元數(shù)據(jù)信息。
注:通過(guò)導(dǎo)出容器和導(dǎo)入容器可以實(shí)現(xiàn)容器遷移(拷貝文件)
倉(cāng)庫(kù)
倉(cāng)庫(kù)是集中存放鏡像的地方,一個(gè)注冊(cè)服務(wù)器上有很多倉(cāng)庫(kù),一個(gè)倉(cāng)庫(kù)中有很多鏡像。
1. 登錄
$ docker login
2. 基本操作
查找、上傳、下載
3. 自動(dòng)創(chuàng)建
4. 查看鏡像
http://www.dockerpool.com/downloads
5. 更新鏡像標(biāo)簽
$ docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04
將前面的鏡像更改為ubuntu:12.04
6. 創(chuàng)建私有倉(cāng)庫(kù)
$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry
自動(dòng)下載并啟動(dòng)registry容器,創(chuàng)建本地的私有倉(cāng)庫(kù)服務(wù),默認(rèn)倉(cāng)庫(kù)船艦的容器在/tmp/registry,可以通過(guò)-v參數(shù)來(lái)存放到指定路徑上
7.管理私有倉(cāng)庫(kù)鏡像
假設(shè)私有倉(cāng)庫(kù)地址為10.0.2.2,端口為5000,
$ docker tag ubuntu:14.04 10.0.2.2:5000/test
更改標(biāo)簽名
$ docker push 10.0.2.2:5000/test
push鏡像,會(huì)自動(dòng)push到10.0.2.2地址的機(jī)器上
$ curl http://10.0.2.2:5000/v1/search
查看倉(cāng)庫(kù)10.0.2.2:5000中是否含有test鏡像
docker pull 10.0.2.2:5000/test
在任何一臺(tái)能訪問(wèn)到10.0.2.2地址的機(jī)器上下載鏡像
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
IDEA連接遠(yuǎn)程服務(wù)器Docker部署Spring Boot項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了IDEA連接遠(yuǎn)程服務(wù)器Docker部署Spring Boot項(xiàng)目,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法
這篇文章主要介紹了Docker容器通過(guò)獨(dú)立IP暴露給局域網(wǎng)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04
Docker 拉取 oracle 11g鏡像配置的詳細(xì)教程
這篇文章主要介紹了Docker 拉取 oracle 11g鏡像配置的詳細(xì)教程,包括一些拉去鏡像命令、創(chuàng)建容器、啟動(dòng)容器的相關(guān)知識(shí),需要的朋友可以參考下2021-09-09
Docker安裝php及yaf擴(kuò)展文件內(nèi)容
這篇文章主要為大家介紹了Docker安裝php及yaf擴(kuò)展文件內(nèi)容,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
使用docker -v 和 Publish over SSH插件實(shí)現(xiàn)war包自動(dòng)部署到docker的操作步驟
這篇文章主要介紹了利用docker -v 和 Publish over SSH插件實(shí)現(xiàn)war包自動(dòng)部署到docker的操作步驟,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Docker 常用命令整理及使用注意事項(xiàng)總結(jié)
這篇文章主要介紹了Docker 常用命令整理及使用注意事項(xiàng)總結(jié)的相關(guān)資料,這里整理了Docker 的常用命令,說(shuō)明這些命令是什么意思及使用方法,需要的朋友可以參考下2016-12-12
Docker安裝MySql8并遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn)
本文主要介紹了Docker安裝MySql8并遠(yuǎn)程訪問(wèn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Docker-Compose創(chuàng)建mysql容器詳解
這篇文章主要介紹了Docker-Compose創(chuàng)建mysql容器詳解的相關(guān)資料,需要的朋友可以參考下2022-11-11

