從入門到實戰(zhàn)詳解Docker中的常用命令
前言
剛開始學(xué) Docker 的時候,最容易遇到的一個問題就是:命令看著很多,但真正上手時總是記不住,或者一不小心就把鏡像和容器的命令混了。
我這兩天在整理自己練習(xí) Docker 命令時用到的內(nèi)容,順手把它改成一篇適合分享的學(xué)習(xí)筆記。本文不講太多抽象概念,重點放在平時最常用、最容易碰到的 Docker 命令上,同時補充一些實戰(zhàn)里很常見的報錯和使用場景。
如果你也是剛接觸 Docker,這篇文章可以直接當(dāng)成一份入門命令手冊來看。
一、先搞清楚兩個核心概念
在記命令之前,先把兩個概念分清楚:
- 鏡像(Image):可以理解成模板
- 容器(Container):可以理解成鏡像運行起來后的實例
說得直白一點:
docker images是看“模板”docker run是用“模板”創(chuàng)建并啟動“實例”docker ps是看“實例”現(xiàn)在有沒有在運行
只要這層關(guān)系不亂,后面的命令就會順很多。
二、Docker 使用前的準(zhǔn)備命令
啟動 Docker 服務(wù)
systemctl start docker
這個命令不是 Docker 子命令,而是 Linux 系統(tǒng)命令。它的作用是啟動 Docker 服務(wù)。
如果 Docker 服務(wù)沒有啟動,你在執(zhí)行 docker images、docker ps 這類命令時,往往會看到下面這個錯誤:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
這個報錯的重點不是命令寫錯了,而是 Docker 后臺服務(wù)沒起來。所以遇到這個錯誤,優(yōu)先檢查 Docker 服務(wù)狀態(tài)。
三、鏡像相關(guān)的常用命令
鏡像相關(guān)命令建議放在前面記,因為很多操作都要從鏡像開始。
1. 查看本地鏡像
docker images
作用:查看當(dāng)前機器上已經(jīng)下載好的鏡像。
常見輸出字段含義如下:
REPOSITORY:鏡像名TAG:版本標(biāo)簽IMAGE ID:鏡像 IDCREATED:創(chuàng)建時間SIZE:鏡像大小
比如下面這些都屬于鏡像名稱:
nginx:1.20.2 mysql:8 redis:7
這里要注意,鏡像名和版本之間用的是 :,不是 -。
2. 拉取鏡像
docker pull redis:7
作用:從 Docker 倉庫把鏡像下載到本地。
如果本地沒有某個鏡像,直接 docker run 時 Docker 也可能自動去拉取,但在學(xué)習(xí)階段,我更建議先手動執(zhí)行 docker pull,這樣思路更清晰。
3. 刪除本地鏡像
docker rmi nginx:1.20.2
作用:刪除本地鏡像。
這個命令一般在以下場景比較常見:
- 鏡像拉錯版本了
- 本地磁盤空間緊張
- 需要清理不再使用的鏡像
4. 導(dǎo)出鏡像
docker save -o nginx-1.20.2.tar nginx:1.20.2
作用:把鏡像導(dǎo)出成一個 tar 文件,便于備份或者拷貝到其他機器。
這個命令里有兩個容易出錯的點:
- 子命令必須是
save - 鏡像名必須寫成
鏡像名:標(biāo)簽
也就是說,下面這種寫法是錯的:
docker save -o nginx-1.20.2.tar nginx-1.20.2
錯因就在于把 nginx:1.20.2 寫成了 nginx-1.20.2。
5. 導(dǎo)入鏡像
docker load -i nginx-1.20.2.tar
作用:把之前導(dǎo)出的鏡像文件重新導(dǎo)入 Docker。
這個命令通常和 docker save 配套使用,尤其適合離線環(huán)境或者需要跨機器傳鏡像的場景。
四、容器相關(guān)的常用命令
相比鏡像,容器命令在日常使用中更高頻,因為我們平時真正操作的大多是“運行起來的容器”。
1. 創(chuàng)建并運行容器
docker run nginx:1.20.2
作用:基于指定鏡像創(chuàng)建并啟動一個容器。
如果你只寫:
docker run
那肯定會報錯,因為 run 后面至少要跟一個鏡像名。
2. 后臺運行容器并指定名稱和端口
docker run -d --name nginx -p 80:80 nginx:1.20.2
這是非常常用的一條命令,建議重點記住。
參數(shù)說明:
-d:后臺運行--name nginx:給容器起一個名字-p 80:80:端口映射
其中端口映射格式是:
-p 宿主機端口:容器端口
也就是說,上面的 -p 80:80 表示訪問宿主機的 80 端口,本質(zhì)上是在訪問容器里的 80 端口。
3. 查看正在運行的容器
docker ps
作用:查看當(dāng)前正在運行的容器。
這個命令適合用來快速判斷:
- 容器有沒有啟動成功
- 當(dāng)前有哪些容器正在跑
- 容器暴露了哪些端口
4. 查看所有容器
docker ps -a
作用:查看所有容器,包括正在運行的和已經(jīng)停止的。
這個命令特別實用。因為很多時候不是容器“沒了”,而是容器“停了”。如果你只看 docker ps,可能會誤以為容器不存在。
5. 停止容器
docker stop nginx
作用:停止一個正在運行的容器。
要注意,停止容器不代表刪除容器,它只是從“運行中”變成了“已停止”。
6. 啟動已停止的容器
docker start nginx
作用:重新啟動一個已經(jīng)存在但當(dāng)前處于停止?fàn)顟B(tài)的容器。
這里很多初學(xué)者容易把 run 和 start 混掉,實際上它們的區(qū)別很清楚:
docker run:創(chuàng)建并啟動容器docker start:啟動已有容器
7. 重啟容器
docker restart nginx
作用:重啟容器。
這個命令在修改配置、重載服務(wù)或者排查臨時問題時很常見,屬于日常維護中的高頻命令。
8. 查看容器日志
docker logs nginx
作用:查看容器運行日志。
如果想持續(xù)跟蹤日志,可以這樣寫:
docker logs -f nginx
很多問題,比如 Nginx 啟動失敗、Spring Boot 容器報錯、端口沖突等,第一時間都應(yīng)該先去看日志。
9. 進入容器內(nèi)部
docker exec -it nginx bash
作用:進入正在運行的容器,并打開一個交互式終端。
參數(shù)說明:
exec:在容器內(nèi)執(zhí)行命令-i:保持標(biāo)準(zhǔn)輸入開啟-t:分配終端bash:進入 bash 環(huán)境
不過并不是所有鏡像里都有 bash。如果沒有,可以改成:
docker exec -it nginx sh
這個命令在排查容器內(nèi)文件、查看配置、手動測試服務(wù)時特別有用。
10. 查看容器詳細信息
docker inspect nginx
作用:查看容器的詳細配置。
常見能看到的信息包括:
- 容器 IP
- 端口映射
- 掛載目錄
- 啟動參數(shù)
- 網(wǎng)絡(luò)信息
如果你在查“容器到底映射到哪個端口了”“文件到底掛載到哪里了”,inspect 非常有幫助。
11. 宿主機和容器之間復(fù)制文件
docker cp nginx:/etc/nginx/nginx.conf .
作用:把容器里的文件復(fù)制到宿主機。
反過來也可以把宿主機文件復(fù)制進容器,這在調(diào)試配置文件時很常見。
12. 查看資源占用
docker stats
作用:實時查看容器的 CPU、內(nèi)存、網(wǎng)絡(luò)等資源占用情況。
如果你發(fā)現(xiàn)某個容器特別卡,或者懷疑內(nèi)存吃得太多,可以先用這個命令看一眼。
13. 刪除容器
docker rm -f nginx
作用:強制刪除容器。
參數(shù)說明:
rm:刪除容器-f:如果容器還在運行,就先停掉再刪除
這個命令適合做快速清理,但在正式環(huán)境里還是建議先確認(rèn)再刪,避免誤操作。
五、用一條主線把命令串起來
如果只是一條一條背命令,其實很容易忘。更好的方式是按操作流程去記:
1. 先確認(rèn) Docker 服務(wù)正常
systemctl start docker
2. 查看本地有沒有需要的鏡像
docker images
3. 如果沒有,就先拉取鏡像
docker pull nginx:1.20.2
4. 基于鏡像啟動容器
docker run -d --name nginx -p 80:80 nginx:1.20.2
5. 查看容器是否正常運行
docker ps docker ps -a
6. 需要排錯時看日志、進容器
docker logs -f nginx docker exec -it nginx bash
7. 需要暫停、恢復(fù)或重啟時執(zhí)行控制命令
docker stop nginx docker start nginx docker restart nginx
8. 最后做清理或者備份
docker rm -f nginx docker save -o nginx.tar nginx:1.20.2 docker load -i nginx.tar
這樣記憶就不是一堆零散命令,而是一條完整的 Docker 使用流程。
六、初學(xué)者最容易踩的幾個坑
1. Docker 服務(wù)沒啟動
錯誤信息:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
解決方式:
systemctl start docker
2. 命令拼寫錯誤
錯誤寫法:
docker iamges
正確寫法:
docker images
這類錯誤看起來很小,但在剛開始練命令的時候特別常見。
3. 把鏡像名和版本標(biāo)簽寫錯
錯誤寫法:
docker save -o nginx-1.20.2.tar nginx-1.20.2
正確寫法:
docker save -o nginx-1.20.2.tar nginx:1.20.2
記住一點就行:鏡像版本前面用的是冒號 :。
4. 少寫了子命令
錯誤寫法:
docker -o nginx-1.20.2.tar nginx:1.20.2
正確寫法:
docker save -o nginx-1.20.2.tar nginx:1.20.2
因為 -o 是 docker save 的參數(shù),不是 docker 根命令的參數(shù)。
七、Docker 常用命令速記版
如果你是為了復(fù)習(xí)或者考試前快速過一遍,可以直接記下面這組:
systemctl start docker docker images docker pull nginx:1.20.2 docker run -d --name nginx -p 80:80 nginx:1.20.2 docker ps docker ps -a docker stop nginx docker start nginx docker restart nginx docker logs -f nginx docker exec -it nginx bash docker inspect nginx docker cp nginx:/etc/nginx/nginx.conf . docker stats docker rm -f nginx docker rmi nginx:1.20.2 docker save -o nginx.tar nginx:1.20.2 docker load -i nginx.tar
八、結(jié)語
Docker 命令剛開始看起來很多,但真正常用的其實就集中在幾類:
- 鏡像管理
- 容器創(chuàng)建與運行
- 容器狀態(tài)查看
- 日志與排錯
- 清理與備份
我的建議是,不要只死記命令本身,而是按照“鏡像 -> 容器 -> 查看狀態(tài) -> 進入排查 -> 清理備份”這條主線去記。這樣學(xué)起來會更順,也更接近真實開發(fā)和部署時的使用方式。
如果你剛開始學(xué) Docker,可以先把本文里的 run、ps、logs、exec、rm 這幾條命令練熟,后面再補 save、load、inspect、stats 這些命令,效果會更好。
以上就是從入門到實戰(zhàn)詳解Docker中的常用命令的詳細內(nèi)容,更多關(guān)于Docker常用命令的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Docker刪除鏡像報錯:Error response from daemon:con
刪除Docker鏡像時遇到?jīng)_突,因為鏡像正在被一個運行中的容器使用,解決方法是先停止并刪除該容器,然后再嘗試刪除鏡像,此外,還可以選擇強制刪除鏡像,但這可能會導(dǎo)致數(shù)據(jù)丟失2024-11-11
Docker學(xué)習(xí)筆記之Docker部署Java web系統(tǒng)
這篇文章主要介紹了Docker學(xué)習(xí)筆記之Docker部署Java web系統(tǒng),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Docker跨主機容器通信overlay實現(xiàn)過程詳解
這篇文章主要介紹了Docker跨主機容器通信overlay實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
Docker報錯denied:requested access to the r
這篇文章主要為大家介紹了Docker報錯denied:requested access to the resource is denied解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06

