一文系統(tǒng)梳理Docker中容器的常用命令
容器啟動(dòng)流程

與多架構(gòu)鏡像原理整合,就形成了完整的容器啟動(dòng)流程。

容器運(yùn)行的本質(zhì)
Docker 容器是為了運(yùn)行容器中的應(yīng)用,對(duì)外提供服務(wù)。
應(yīng)用運(yùn)行完畢后,容器就會(huì)自動(dòng)終止。
如果不想讓容器啟動(dòng)后立即終止,需要使容器應(yīng)用不能立即結(jié)束。
通常才用兩種方式:使應(yīng)用處于與用戶交互的狀態(tài)或等待狀態(tài)。
容器創(chuàng)建并啟動(dòng)命令
容器有兩種運(yùn)行模式:交互模式與分離模式。
以交互模式運(yùn)行ubuntu
docker run --name myubuntu -it ubuntu:latest /bin/bash
--name : 指定當(dāng)前容器名稱(chēng)為 myubuntu
-it : 指定以交互模式運(yùn)行容器,且為容器分配一個(gè)偽終端。
后面的/bin/bash 用于指定容器啟動(dòng)后要運(yùn)行的命令。該命令會(huì)啟動(dòng)一個(gè)bash終端。
運(yùn)行命令后發(fā)現(xiàn) 命令行前面部分發(fā)生變化:
原來(lái)顯示的是【root@docker~】,現(xiàn)在變?yōu)閞oot@de0940ad17dd:/#,這就是docker生成的偽客戶端,而數(shù)字de0940ad17dd 表示docker容器ID。
此時(shí)就可以對(duì)ubuntu系統(tǒng)執(zhí)行命令了。
執(zhí)行exit 命令 可以退出應(yīng)用。
以交互模式運(yùn)行tomcat
docker run --name mytomcat8 -it tomcat:8.5.32 /bin/bash
通過(guò)ls -l 命令查看tomcat 根目錄下的文件,注意,不支持ll命令。
# 正式啟動(dòng)tomcat docker run --name mytomcat8081 -it -p 8081:8080 tomcat:8.5.32
-p 指定端口映射,格式為 暴露給宿主機(jī)的端口:容器中應(yīng)用的端口
執(zhí)行后,tomcat啟動(dòng),此時(shí)可以在Windows的瀏覽器中通過(guò)ip:8081端口訪問(wèn)到tomcat.
以分離模式運(yùn)行tomcat
docker run --name tomcat01 -dp 8081:8080 tomcat:8.5.32 docker run --name tomcat02 -dp 8082:8080 tomcat:8.5.32 docker run --name tomcat03 -dp 8083:8080 tomcat:8.5.32
-d 表示以分離模式運(yùn)行容器,即命令在后臺(tái)運(yùn)行,命令的運(yùn)行和宿主機(jī)的運(yùn)行分離開(kāi)來(lái)。

現(xiàn)在已經(jīng)啟動(dòng)了3個(gè)tomcat容器,可以通過(guò)瀏覽器訪問(wèn)了。
以分離模式運(yùn)行ubuntu
docker run -d ubuntu:latest
該運(yùn)行方式有一個(gè)問(wèn)題:雖然容器啟動(dòng)了,但是docker ps 命令查看不到。
docker ps -a 命令可以查看到該容器,只不過(guò)其已經(jīng)退出了。
docker ps 查看的是up 狀態(tài)的容器。
容器創(chuàng)建命令
docker create 命令僅創(chuàng)建容器但不啟動(dòng),用法與docker run 非常相似。但是沒(méi)有-d 選項(xiàng),因?yàn)閐ocker create 默認(rèn)是采用后臺(tái)方式運(yùn)行的。
容器退出命令
# 退出并停止容器 exit # 退出不停止容器 Ctrl+P+Q 快捷鍵
容器狀態(tài)查看命令
docker ps # 查看所有正在運(yùn)行的容器 docker ps -a # 查看所有容器 docker ps -q # 查看運(yùn)行中的容器id docker ps -qa # 查看所有容器的ID docker ps -l # 查看最后創(chuàng)建的容器 docker ps -n 3 # 查看最后創(chuàng)建的n個(gè)容器
容器再進(jìn)行命令
exec/attach ,他們只能對(duì)正在運(yùn)行的容器進(jìn)行操作。
新建進(jìn)程進(jìn)入容器exec
# 先以分離模式運(yùn)行tomcat容器 docker run --name mytom10 -dp 8081:8080 tomcat:8.5.32 # 使用exec命令進(jìn)入此容器 docker exec -it mytom10 /bin/bash # 使用exit 退出容器,此時(shí)tomcat容器并未結(jié)束,說(shuō)明exec命令會(huì)創(chuàng)建一個(gè)新的進(jìn)程,exit只是結(jié)束了這個(gè)新建的進(jìn)程。 exit
| 對(duì)比項(xiàng) | docker exec | docker attach |
|---|---|---|
| 進(jìn)程行為 | 新建獨(dú)立進(jìn)程(非 PID1) | 連接容器主進(jìn)程 PID1 |
| 退出影響 | 退出不影響容器,容器繼續(xù)運(yùn)行 | Ctrl+C 會(huì)停止容器;需 Ctrl+P+Q 安全分離 |
| 終端獨(dú)立性 | 每個(gè) exec 都是獨(dú)立 shell | 多終端 attach 共享同一會(huì)話、同步輸出 |
| 常用場(chǎng)景 | 日常進(jìn)容器調(diào)試、改配置、查日志 | 看主進(jìn)程實(shí)時(shí)輸出、接回前臺(tái)交互容器 |
外部操作容器exec
上面的方法是進(jìn)入到容器之后才對(duì)容器進(jìn)行操作,其實(shí)也可以不進(jìn)入容器直接對(duì)容器進(jìn)行操作。
比如想查看tomcat容器工作目錄中的文件,直接在exec命令后緊跟執(zhí)行的命令即可
docker exec -it mytomcat02 ls -l
容器附加標(biāo)準(zhǔn)輸入
# 先以交互方式運(yùn)行一個(gè)ubuntu容器,然后使用Ctrl+p+q 命令退出但不停止容器 docker run --name myubuntu -it ubuntu:latest /bin/bash # 然后使用attach 進(jìn)入容器命令行,此時(shí)再使用exit 命令退出容器。容器也就停止了。 # attach命令 沒(méi)有另外創(chuàng)建新進(jìn)程,而是使用了容器進(jìn)程,所以exit 命令結(jié)束當(dāng)前進(jìn)程后,容器就停止了。 docker attach myubuntu
容器附加標(biāo)準(zhǔn)輸出
啟動(dòng)一個(gè)tomcat容器(分離模式),然后執(zhí)行docker attach 可以看到:占用了命令行,但沒(méi)有任何輸出。
此時(shí)的容器附加了標(biāo)準(zhǔn)輸出,只不過(guò),其輸出的是tomcat的啟停日志信息。
docker run --name mytomcat -dp 8081:8080 tomcat:8.5.32 docker attach mytomcat
通過(guò)ctrl+C 可結(jié)束tomcat,此時(shí)能看到停止日志顯示出來(lái)。但是此時(shí)tomcat已經(jīng)停止,容器已經(jīng)退出,所以docker attach 命令也隨之結(jié)束了。
容器內(nèi)進(jìn)程查看命令
#docker top 用于查看指定的正在運(yùn)行的容器中的進(jìn)程詳情,這個(gè)詳情包括當(dāng)前正在運(yùn)行的命令 docker top myubuntu # 可以使用grep對(duì)結(jié)果進(jìn)行過(guò)濾 docker top myubuntu | grep bin
容器日志查看命令
docker logs 【容器】# 查看指定容器中應(yīng)用的運(yùn)行日志,不論容器是運(yùn)行還是停止?fàn)顟B(tài)。 docker logs # 查看所有容器中應(yīng)用的運(yùn)行日志。 docker logs mytom3 # 選項(xiàng)-n 或--tail 可以指定要顯示的最后幾條日志 docker logs -n 5 mytomcat # --since指定顯示從指定時(shí)間以來(lái)的日志。這個(gè)時(shí)間可以是絕對(duì)時(shí)間,也可以是相對(duì)時(shí)長(zhǎng)。 docker logs --since="2022-08-11" --tail=3 mytomcat # 顯示近30分鐘內(nèi)產(chǎn)生日志中的最后3條,m:分。s:秒;h:小時(shí) docker logs --since=30m --tail=3 mytomcat # --until 指定也要顯示截至到指定時(shí)間之前的日志,這個(gè)時(shí)間可以是絕對(duì)時(shí)間,也可以是相對(duì)時(shí)長(zhǎng)。 docker logs --until="2022-08-11" --tail=3 mytomcat # 截至到5分鐘之前的日志的最后3條 docker logs --until=5m --tail=3 mytomcat #查看日志的詳細(xì)時(shí)間戳,使用-t docker logs -t --tail=3 mytomcat #查看動(dòng)態(tài)日志,使用-f ,其會(huì)占用命令行,一直等待日志輸出 docker logs -f --tail=3 mytomcat
容器啟停命令
docker start myubuntu # 啟動(dòng)指定容器 docker restart myubuntu # 重啟指定容器 docker stop myubuntu # 停止指定容器,如果當(dāng)前容器正在被其他進(jìn)程訪問(wèn),則在訪問(wèn)結(jié)束后再停止 docker kill myubuntu # 強(qiáng)制停止指定容器 # 停止所有容器,下面兩個(gè)命令都可以 docker stop $(docker ps -qa) docker kill $(docker ps -qa) docker pause myubuntu # 暫停指定容器對(duì)外提供服務(wù) docker unpause myubuntu # 解除暫停
容器刪除命令
# 正常刪除:docker rm 在默認(rèn)情況下,要?jiǎng)h除的容器必須是已停止的。 docker rm mytomcat # 強(qiáng)制刪除:加-f ,無(wú)論容器是否停止,都會(huì)刪除 docker rm -f mytomcat # 刪除所有容器 docker rm -f $(docker ps -qa)
容器與宿主機(jī)文件傳遞
將容器中文件復(fù)制到宿主機(jī)
#將mytomcat容器的tomcat中webapps 目錄復(fù)制到宿主機(jī)的當(dāng)前目錄 docker cp mytomcat:/usr/local/tomcat/webapps ./
將宿主機(jī)文件復(fù)制到容器
#將宿主機(jī)當(dāng)前目錄下的hw.tar 文件復(fù)制到mytomcat 容器的/usr/local/tomcat 目錄中 # 要查看容器中是否存在hw.tar文件,需要先啟動(dòng)該容器 docker cp ./hw.tar mytomcat:/usr/local/tomcat
docker cp 不支持容器間的文件傳遞。
提交容器為鏡像
docker commit 命令可愿意將一個(gè)容器文件系統(tǒng)的當(dāng)前快照生成為一個(gè)新的鏡像。
需求:現(xiàn)在centOS容器中安裝net-tools工具包。
# 1. 先啟動(dòng)一個(gè)容器 docker run --name mycentOS -it centos:7 # 2. 安裝net-tools 網(wǎng)絡(luò)工具包 yum install -y net-tools # 3. 執(zhí)行 ifconfig,發(fā)現(xiàn)可以使用 ifconfig # 4. 生成鏡像,生成鏡像的<repository>是centos7,<tag>是net-tools # -a:表示作者 -m:表示提交時(shí)填的message docker commit -a “TOM” -m “ADD net-tools” mycentOS centos7:net-tools # 5. 然后就可以使用了 docker run --name mycuscentos -it centos7:net-tools
生成懸虛鏡像
懸虛鏡像是沒(méi)有<repository>和<tag>的鏡像。
懸虛鏡像一般是由一些失誤操作產(chǎn)生的副產(chǎn)物,一般要被清除掉。如果非要使用,只能通過(guò)imageID來(lái)使用。
下面的命令就會(huì)生成一個(gè)懸虛鏡像。(沒(méi)指定<repository>和<tag>)
docker commit -a “TOM” -m “ADD net-tools” mycentOS
導(dǎo)入導(dǎo)出容器
# 將tomcat:8.5.32鏡像的容器tom 導(dǎo)出到當(dāng)前/root目錄的tomcat8.tar文件中 docker export -o tomcat8.tar tom # docker import 用于將指定的tar文件構(gòu)建新的鏡像。 docker import tomcat8.tar mytomcat:1.0
與save/load命令對(duì)比
export與save
- export作用于容器,save作用在鏡像,但他們導(dǎo)出的結(jié)果都是tar文件
- export一次只能導(dǎo)出一個(gè)容器;save一次可導(dǎo)出多個(gè)鏡像
- export只對(duì)當(dāng)前容器的文件系統(tǒng)快照進(jìn)行導(dǎo)出,其會(huì)丟棄原鏡像的所有歷史記錄與元數(shù)據(jù)信息;save則保存了原鏡像的完整記錄
import與load
- import導(dǎo)入的是容器;load加載的是鏡像,但最后都恢復(fù)為鏡像
- import恢復(fù)的鏡像只包含當(dāng)前鏡像一層;load恢復(fù)的鏡像與原鏡像的分層相同
- import恢復(fù)的鏡像是新鏡像,和原鏡像的imageID不同;load恢復(fù)的鏡像與原鏡像相同,imageID相同
- import可以為導(dǎo)入的鏡像指定
<repository>和<tag>;而load不行
與docker commit 對(duì)比
相同點(diǎn):docker import + docker export 和docker commit 都能將一個(gè)容器變?yōu)橐粋€(gè)鏡像
不同點(diǎn):docker import + docker export 恢復(fù)的鏡像只包含原容器生成的一層分層;
? docker commit 生成的鏡像中包含原鏡像的所有分層。
docker system 命令集
docker system df # 查看docker 各部分的磁盤(pán)占用數(shù)據(jù) docker system df -v # 查看docker 各部分的磁盤(pán)占用數(shù)據(jù),數(shù)據(jù)更加詳細(xì) # 查看docker 發(fā)生過(guò)的事件,可以查看指定日期之外(--until)或之內(nèi)(--since) docker system events --since="2022-11-13" # 查看docker詳情: docker info 和docker system info 的效果一樣 docker info docker system info # 刪除docker 中無(wú)用的數(shù)據(jù)(比如:已經(jīng)停止的容器、沒(méi)連任何容器的網(wǎng)絡(luò)、懸虛鏡像等) docker system prune
以上就是一文系統(tǒng)梳理Docker中容器的常用命令的詳細(xì)內(nèi)容,更多關(guān)于Docker容器常用命令的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
cgroup?blkio子系統(tǒng)對(duì)容器的讀寫(xiě)限速詳解
這篇文章主要為大家介紹了cgroup?blkio子系統(tǒng)對(duì)容器的讀寫(xiě)限速詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Docker同時(shí)安裝MySQL和MariaDB的方法步驟
這篇文章主要介紹了Docker同時(shí)安裝MySQL和MariaDB的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
docker?search?mysql報(bào)錯(cuò)問(wèn)題分析及解決
Docker是現(xiàn)在非常流行的一種容器化技術(shù),能夠方便開(kāi)發(fā)者將應(yīng)用程序打包進(jìn)入容器,做到跨平臺(tái)的部署,這篇文章主要介紹了docker?search?mysql報(bào)錯(cuò)問(wèn)題分析及解決的相關(guān)資料,需要的朋友可以參考下2025-11-11
Docker部署Python應(yīng)用的問(wèn)題與優(yōu)化實(shí)踐
作為一個(gè)經(jīng)常用Docker部署Python應(yīng)用的開(kāi)發(fā)者,大家肯定遇到過(guò)改了一行代碼,重新打包鏡像,然后眼睜睜看著Docker重新下載幾百M(fèi)B的依賴(lài)包,本文就來(lái)和大家講講如何優(yōu)化這一問(wèn)題吧2025-05-05
使用 docker-compose 運(yùn)行 MySQL的方法
這篇文章主要介紹了使用 docker-compose 運(yùn)行 MySQL的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09

