聊聊docker中容器與鏡像的區(qū)別
什么是鏡像?
鏡像可以看成是由多個鏡像層疊加起來的一個文件系統(tǒng)(通過UnionFS與AUFS文件聯(lián)合系統(tǒng)實(shí)現(xiàn)),鏡像層也可以簡單理解為一個基本的鏡像,而每個鏡像層之間通過指針的形式進(jìn)行疊加。
什么是容器?
容器(container)的定義和鏡像(image)幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上面那一層是可讀可寫的。要點(diǎn):容器 = 鏡像 + 讀寫層,并且容器的定義并沒有提及是否要運(yùn)行容器。
今天拋開原理,拋開底層。通俗的講解docker中容器與鏡像的區(qū)別。
對于初學(xué)者來說,剛剛接觸docker會有點(diǎn)迷,特別是鏡像與容器。其實(shí)我們可以理解鏡像與容器為一對多的關(guān)系。
下圖錯誤的示范,為什么是錯誤的呢?因?yàn)榭梢酝ㄟ^一個鏡像確實(shí)可以啟動三個容器,但是這個三個容器的名字不能一樣
正確的示例(有人說這和上圖有什么區(qū)別,上圖中是不是名字一樣了 容器=容器=容器 ,這里的名字是 容器a != 容器b != 容器c )
所以我們能通過一個鏡像,運(yùn)行出三個容器,鏡像是別人打包好在鏡像倉庫的,我們?nèi)ハ螺d就好了。但是我們下載鏡像的時候要帶上版本號。就像我們下載一個jdk,官網(wǎng)默認(rèn)是最新版,如果我們要下載舊版,就要進(jìn)到對應(yīng)的版本里面。
一個鏡像怎么運(yùn)行為容器呢?比如msql,我們下載一個mysql鏡像。
docker pull mysql
運(yùn)行鏡像,生成mysql_zhangsan數(shù)據(jù)庫(專門給張三用的數(shù)據(jù)庫)
[root@localhost ~]# docker run ‐p 3306:3306 ‐‐name mysql_zhangsan ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
-p 3306:3306 : 端口映射
--name mysql_zhangsan : 給這個容器命名為mysql_zhangsan(這個名字是唯一的,不能重復(fù))
-e MYSQL_ROOT_PASSWORD=123456 : 這個數(shù)據(jù)庫登陸的賬號為ROOT 密碼為123456
-d 是基于我們剛剛拉下拉的鏡像mysql進(jìn)行創(chuàng)建的。
運(yùn)行鏡像,生成mysql_lisi數(shù)據(jù)庫(專門給李四用的數(shù)據(jù)庫)
[root@localhost ~]# docker run ‐p 3307:3307 ‐‐name mysql_lisi ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql ms10e4bcfdsf0f61cbad43898de71d366117d120dfs9db651844c0e73863b9968
-p 3307:3307 : 端口映射(不能用3306了,因?yàn)?306被張三的數(shù)據(jù)庫占用了)
--name mysql_lisi : 給這個容器命名為mysql_lisi(這個名字是唯一的,不能和上面的mysql_zhangsan重復(fù))
-e MYSQL_ROOT_PASSWORD=123456 : 這個數(shù)據(jù)庫登陸的賬號也為ROOT 密碼也為123456
-d 是基于我們剛剛拉下拉的鏡像mysql進(jìn)行創(chuàng)建的。
到這里,我們成功通過一個鏡像,創(chuàng)建了兩個不同的容器。這樣,我們的電腦上就能運(yùn)行兩個mysql了。如果我們要再開一個mysql容器,只要端口不同,名稱不同,最后還是基于我們拉的mysql鏡像就可以進(jìn)行創(chuàng)建了。
以上就是聊聊docker中容器與鏡像的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于docker容器與鏡像的區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker /var/lib/docker/aufs/mnt 目錄清理方法
在本篇文章里小編給各位整理的是關(guān)于docker /var/lib/docker/aufs/mnt 目錄清理方法,有需要的朋友們可以參考下。2020-03-03docker部署fastapi的實(shí)現(xiàn)步驟
本文主要介紹了docker部署fastapi的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03用Jenkins+Docker+Maven+Git實(shí)現(xiàn)持續(xù)集成(超詳細(xì))
本文通過較大的篇幅詳細(xì)介紹了Harbor這款企業(yè)級docker管理工具的使用,并通過案例演示了如何在jenkins中配置任務(wù)集成Harbor,從而實(shí)現(xiàn)鏡像的構(gòu)建推送與分發(fā),需要的朋友可以參考下2024-04-04Docker命令讓普通用戶能夠執(zhí)行的實(shí)現(xiàn)
這篇文章主要介紹了Docker命令讓普通用戶能夠執(zhí)行的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03docker內(nèi)部容器之間的端口訪問實(shí)現(xiàn)方法
alpine-client?與?alpine-server?兩容器,前者訪問后者監(jiān)聽之端口,以此探析?Docker?內(nèi)部容器間端口訪問機(jī)制,這篇文章主要介紹了如何實(shí)現(xiàn)docker內(nèi)部容器之間的端口訪問,需要的朋友可以參考下2024-04-04Docker?環(huán)境?Nacos2?MySQL8的詳細(xì)操作
本文介紹?docker?環(huán)境下安裝并單機(jī)運(yùn)行?Nacos2,使用?docker?環(huán)境下的?MySQL?8?存儲數(shù)據(jù)?,對Docker?環(huán)境?Nacos2?MySQL8相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-09-09Docker安裝node-red、導(dǎo)入節(jié)點(diǎn)、部署查看的步驟詳解
Node-RED設(shè)計(jì)使用的場景是IoT,但是作為一個流編排引擎,顯然它能做的事情更多,比如使用容器化的方式進(jìn)行構(gòu)建、打包、部署等操作也是可行的,這篇文章繼續(xù)介紹Docker安裝node-red、導(dǎo)入節(jié)點(diǎn)、部署查看的相關(guān)知識,感興趣的朋友一起看看吧2022-01-01