Docker 鏡像、容器、倉庫的概念及應(yīng)用詳解
Docker 鏡像、容器、倉庫的概念
Docker鏡像
Docker鏡像(Image)類似于虛擬機的鏡像,可以將他理解為一個面向Docker引擎的只讀模板,包含了文件系統(tǒng)。
例如:一個鏡像可以完全包含了Ubuntu操作系統(tǒng)環(huán)境,可以把它稱作一個Ubuntu鏡像。鏡像也可以安裝了Apache應(yīng)用程序(或其他軟件),可以把它稱為一個Apache鏡像。
鏡像是創(chuàng)建Docker容器的基礎(chǔ),通過版本管理和增量的文件系統(tǒng),Docker提供了一套十分簡單的機制來創(chuàng)建和更新現(xiàn)有的鏡像。用戶可以從網(wǎng)上下載一個已經(jīng)做好的應(yīng)用鏡像,并通過命令直接使用??傊?,應(yīng)用運行是需要環(huán)境的,而鏡像就是來提供這種環(huán)境。
Docker容器
Docker容器(Container)類似于一個輕量級的沙箱子(因為Docker是基于Linux內(nèi)核的虛擬技術(shù),所以消耗資源十分少),Docker利用容器來運行和隔離應(yīng)用。
容器是從鏡像創(chuàng)建的應(yīng)用運行實例,可以將其啟動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。
可以吧每個容器看作一個簡易版的Linux系統(tǒng)環(huán)境(包括了root用戶權(quán)限、進程空間、用戶空間和網(wǎng)絡(luò)空間),以及與運行在其中的應(yīng)用程序打包而成的應(yīng)用盒子。
鏡像自身是只讀的。容器從鏡像啟動的時候,Docker會在鏡像的最上層創(chuàng)建一個可寫層,鏡像本身將保持不變。就像用ISO裝系統(tǒng)之后,ISO并沒有什么變化一樣。
Docker倉庫
Docker倉庫(Repository)類似與代碼倉庫,是Docker集中存放鏡像文件的場所。
有時候會看到有資料將Docker倉庫和注冊服務(wù)器(Registry)混為一談,并不嚴格區(qū)分。實際上,注冊服務(wù)器是存放倉庫的地方,其上往往存放著多個倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,通過不同的標簽(tag)來進行區(qū)分。例如存放Ubuntu操作系統(tǒng)鏡像的倉庫,稱為Ubuntu倉庫,其中可能包括14.04,12.04等不同版本的鏡像。
根據(jù)存儲的鏡像公開分享與否,Docker倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
目前,最大的公開倉庫是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的公開倉庫包括Docker Pool等,可以提供穩(wěn)定的國內(nèi)訪問。如果用戶不希望公開分享自己的鏡像文件,Docker也支持用戶在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個只能自己訪問的私有倉庫。
當用戶創(chuàng)建了自己的鏡像之后就可以使用push將它上傳到指定的公有或則私有倉庫。這樣用戶下次在另一臺機器上使用該鏡像時,只需將其從倉庫pull下來就可以了。
下面一篇文章介紹了有關(guān)上述概念的基本命令
Docker關(guān)于鏡像、容器、倉庫的基本命令
鏡像
1.獲取鏡像
$ docker pull dl.dockerpool.com:5000/ubuntu:14.04
dl.dockerpool.com為注冊服務(wù)器,5000為端口號,ubuntu為倉庫名稱,14.04是鏡像也是版本號
2.查看鏡像信息
列出本地主機已有的所有鏡像
$ docker images
更改變遷信息
$ docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest
000為鏡像ID,顯示這個鏡像的詳細信息
$ docker inspect 000
3.搜尋鏡像
$ docker search mysql (輸出信息包括鏡像名字、描述、星級、是否為官方創(chuàng)建、是否自動創(chuàng)建)
4.刪除鏡像
$ docker rmi dl.dockerpool.com:5000/ubuntu:latest
注:當有該鏡像創(chuàng)建的容器存在時,鏡像文件默認是無法刪除的,所以刪除鏡像前最好是刪除所有依賴該鏡像的容器,請不要用強制刪除。
5.創(chuàng)建鏡像
有三種方法:
基于已有鏡像的容器創(chuàng)建
$ docker commit -m “add new image”-a "" 000(容器ID) test(新建image name)
基于本地模板導入
$ 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)站注冊
容器
容器是鏡像的一個運行實例,但它帶有額外的可寫層
1.創(chuàng)建容器
$ docker create -it ubuntu:12.04
2.創(chuàng)建并啟動容器
$ docker run -it ubuntu:12.04 /bin/bash
3.守護態(tài)運行
$ docker run -d ubuntu:12.04
4.查看容器信息
$ docker ps [-a -q]
查看終止狀態(tài)
5.獲取容器的輸出信息
$ docker logs cet
cet是容器ID前三個字符
6.終止容器
$ docker stop cet
7.啟動容器
$ docker start cet
8.重啟容器
$ docker restart cet
9.進入容器
attach命令
$ docker attach nostalgic(nostalgic是docker的name)
缺點:所有窗口同步顯示
exec命令
- docker exec -it 243... /bin/bash (243...為docker ID)
nsenter命令
1.找PID
$ PID=$(docker-pid 243..)
2.通過PID鏈接容器
$ nsenter --target $PID --mount --uts --ipc --net --pid
10.刪除容器
$ docker rm [-f -l -v] cet
-f 強行終止并刪除
-l 刪除容器的鏈接,保留容器
-v 刪除掛載的數(shù)據(jù)卷
$ docker export cet >test.tar
12.導入容器(將容器快照導入到本地鏡像庫)
$ cat test.tar | docker import - test/ubuntu:v1.0
重新指定標簽為ubuntu的鏡像名稱,v1.0的版本號
docker load 也可以導入鏡像存儲文件到本地鏡像庫,他比import方式的好處是:import導入鏡像快照文件將丟失所有的歷史記錄和元數(shù)據(jù)信息。
注:通過導出容器和導入容器可以實現(xiàn)容器遷移(拷貝文件)
倉庫
倉庫是集中存放鏡像的地方,一個注冊服務(wù)器上有很多倉庫,一個倉庫中有很多鏡像。
1. 登錄
$ docker login
2. 基本操作
查找、上傳、下載
3. 自動創(chuàng)建
4. 查看鏡像
http://www.dockerpool.com/downloads
5. 更新鏡像標簽
$ docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04
將前面的鏡像更改為ubuntu:12.04
6. 創(chuàng)建私有倉庫
$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry
自動下載并啟動registry容器,創(chuàng)建本地的私有倉庫服務(wù),默認倉庫船艦的容器在/tmp/registry,可以通過-v參數(shù)來存放到指定路徑上
7.管理私有倉庫鏡像
假設(shè)私有倉庫地址為10.0.2.2,端口為5000,
$ docker tag ubuntu:14.04 10.0.2.2:5000/test
更改標簽名
$ docker push 10.0.2.2:5000/test
push鏡像,會自動push到10.0.2.2地址的機器上
$ curl http://10.0.2.2:5000/v1/search
查看倉庫10.0.2.2:5000中是否含有test鏡像
docker pull 10.0.2.2:5000/test
在任何一臺能訪問到10.0.2.2地址的機器上下載鏡像
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
關(guān)于docker清理Overlay2占用磁盤空間的問題(親測有效)
使用Docker過程中,長時間運行服務(wù)容器,導致不能進行上傳文件等操作,今天通過本文給大家詳細介紹下docker清理Overlay2占用磁盤空間的相關(guān)知識,感興趣的朋友一起看看吧2022-03-03Docker實現(xiàn)從零開始搭建SOLO個人博客的方法步驟
本文主要介紹了Docker實現(xiàn)從零開始搭建SOLO個人博客,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11rocketmq-streams的ILeaseService使用示例詳解
這篇文章主要為大家介紹了rocketmq-streams的ILeaseService使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07解決docker中mysql時間與系統(tǒng)時間不一致問題
最近在Docker中裝mysql時,發(fā)現(xiàn)數(shù)據(jù)庫時間與系統(tǒng)時間相差8個小時。查詢資料發(fā)現(xiàn),docker的默認時區(qū)是0區(qū),其實這會對安裝的容器造成不少麻煩,比如執(zhí)行日志的記錄不準確等2021-12-12Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx)
這篇文章主要介紹了Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12docker搭建minio服務(wù)器,解決內(nèi)網(wǎng)穿透后外網(wǎng)無法訪問
這篇文章主要介紹了docker搭建minio服務(wù)器,解決內(nèi)網(wǎng)穿透后外網(wǎng)無法訪問的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09