Docker一些值得注意的現(xiàn)象(Image與Container的進(jìn)一步理解)

本次測(cè)試使用Deepin OS(Kernel base debian)虛擬機(jī)

測(cè)試鏡像(images):


  • sqli-labs

  • Nignx

  • Tomcat

1. 使用同一個(gè)鏡像,啟動(dòng)多次,創(chuàng)建多次容器后,新創(chuàng)建的容器對(duì)象的狀態(tài)不受舊容器狀態(tài)影響。(即容器操作不會(huì)影響原始鏡像從而導(dǎo)致新創(chuàng)建的容器是否受到影響的問(wèn)題)

測(cè)試鏡像Sqli-labs

第一次啟動(dòng)sqli-labs(映射端口8081):需要配置數(shù)據(jù)庫(kù)信息,需要?jiǎng)?chuàng)建security數(shù)據(jù)庫(kù)

sqli-labs01 映射端口8081

進(jìn)入鏡像中創(chuàng)建security數(shù)據(jù)庫(kù)完成后,即可正常使用
成功使用sqli-labs鏡像

第二次啟動(dòng)sqli-labs(映射端口8082)出現(xiàn)重置
sqli-labs01 映射端口8082

首次錯(cuò)誤理解: image 與 container 的關(guān)系是 container1操作會(huì)影響至對(duì)應(yīng)image,從而導(dǎo)致用image創(chuàng)建新的container2,會(huì)與container1保持相同
兩容器互不影響

結(jié)論:image與container不會(huì)因?yàn)槠渲心骋粋€(gè)container操作導(dǎo)致image創(chuàng)建的其他container受到影響
猜測(cè):即使刪除image若不刪除container,該container可隨時(shí)啟動(dòng)

本例使使用命令匯總

docker search sqli-labs
docker pull sqli-labs
docker run -d -it -p 8081:80  sqli-labs
docker exec -it containerID /bin/bash
(sqli-labs)>mysql -u root -p 
(sqli-labs)>create database security;
(sqli-labs)>Ctrl+P+Q
docker run -d -it -p 8082:80 -p 8083:3306 sqli-labs
docker ps -a

2. Image刪除與Container刪除的關(guān)系

測(cè)試鏡像Nginx

首先 啟動(dòng)創(chuàng)建Nginx容器,并可以成功對(duì)Nginx進(jìn)行訪問(wèn)


成功啟動(dòng)Nginx

其次 進(jìn)行宿主機(jī)查看image與container狀態(tài)


宿主機(jī)鏡像與容器狀態(tài)

再次 對(duì)Nginx鏡像刪除并查看Container狀態(tài)
root@sccc-PC:/home/sccc# docker rmi nginx
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 7973c0eb8d59 is using its referenced image 0e901e68141f

本以為是container未停止的原因,所以停止后直接刪除image,也是不可以鏡像刪除

root@sccc-PC:/home/sccc# docker rmi nginx
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 7973c0eb8d59 is using its referenced image 0e901e68141f
結(jié)論:container無(wú)論運(yùn)行或停止?fàn)顟B(tài)都依賴于image的存在,若不先對(duì)container進(jìn)行刪除,則就無(wú)法刪除對(duì)應(yīng)的image本例使使用命令匯總

本例使使用命令匯總

docker search nginx
docker pull nginx
docker run -d -it -p 8804:80  nginx
docker exec -it containerID /bin/bash
docker images
docker rmi nginx
docker stop nginx(ContainerID)
docker rmi nginx
docker inspect nginx(ContainerID)
docker rm nginx(ContainerID)
docker rmi nginx

如果不對(duì)容器進(jìn)行停止,則無(wú)法直接刪除容器

docker rm 7973c0eb8d59 
Error response from daemon: You cannot remove a running container 7973c0eb8d5993e80e04ad4a4e322f4b7675ba9e1693bc928e28ad7c3560dbb6. Stop the container before attempting removal or force remove

3. Container使用過(guò)程中的一些其他坑點(diǎn)

測(cè)試鏡像Tomcat
  • 鏡像閹割問(wèn)題(默認(rèn)的tomcat頁(yè)面不存在,需要進(jìn)行拷貝處理)

首先 打開(kāi)后進(jìn)行訪問(wèn)發(fā)現(xiàn)出現(xiàn)Not Found 404并沒(méi)有出現(xiàn)Tomcat首頁(yè)問(wèn)題


Not Found 404

無(wú)法找到Tomcat主頁(yè)后,進(jìn)行docker中查看配置文件,查看根路徑位置


根路徑查詢

查詢到根路徑后,進(jìn)入文件夾發(fā)現(xiàn)為空文件,所以會(huì)出現(xiàn)Not Found,有相同名稱文件夾,查看發(fā)現(xiàn)是備份文件,進(jìn)行copy進(jìn)根路徑文件夾,再次進(jìn)行訪問(wèn)
成功訪問(wèn)到Tomcat 首頁(yè)

本例使使用命令匯總

docker search tomcat  #搜索鏡像
docker pull tomcat  #下拉鏡像
docker run -d -it -p 8800:80 tomcat  #端口映射
docker exec -it ContainerID /bin/bash  #進(jìn)入容器終端
(tomcat)find / -name tomcat    #查找tomcat文件夾位置
(tomcat)cat tomcat/conf/server.xml  #查看服務(wù)器配置文件,查看網(wǎng)站根目錄
(tomcat)cp -r webapps.dist/ webapp/  #拷貝文件夾至根目錄
(tomcat)rm -r webapp/*
(tomcat)cp -r webapps.dist/* webapp/ #拷貝文件夾文件至根目錄
  • 命令缺失問(wèn)題


    查詢IP地址

    針對(duì)查詢IP方法匯總:

(tomcat) ifconfig #失效
(tomcat) ip addr #失效
(tomcat) hostname -i 
(docker) docker inspect ContainerID

最后使用docker cp命令可以對(duì)容器的文件copy至宿主機(jī)

docker cp a6958e3f749f:/var/www/html/sql-connections/db-creds.inc ./
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容