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

與多架構鏡像原理整合,就形成了完整的容器啟動流程。

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

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

