Docker基礎操作命令眾多,這些命令可以按如下方式進行分類:
- 鏡像操作
- 容器操作
- 網絡操作
- 數據卷操作
- LOG查詢
等方面進行分類。
一、鏡像操作命令
docker images
:用于列出本地系統中所有的 Docker 鏡像。鏡像就像是一個模板,它包含了運行容器所需的所有文件、配置和依賴項。通過docker images命令,可以查看鏡像的名稱、標簽、ID、創建時間以及大小等信息,例如:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 05a60464f1d5 2 weeks ago 133MB
ubuntu 20.04 98c375a7b220 3 weeks ago 72.8MB
docker pull
:用于從 Docker 鏡像倉庫(如 Docker Hub)拉取鏡像。
docker pull nginx:latest
上述命令會從 Docker Hub 拉取最新版本的 Nginx 鏡像。
docker build
:基于 Dockerfile 構建自定義鏡像。
docker build -t my-custom-image:1.0 .
此命令會在當前目錄(.
)查找 Dockerfile 并構建名為 my-custom-image
、標簽為 1.0
的鏡像。
docker rmi
:刪除本地的 Docker 鏡像。
docker rmi nginx:latest
該命令會刪除本地的 nginx:latest
鏡像。
二、容器操作命令
docker ps
::用于列出正在運行的 Docker 容器。
容器是基于鏡像創建的可運行實例,當使用一個鏡像啟動一個容器后,就可以通過docker ps命令查看容器的相關信息,如容器 ID、運行的命令、創建時間、狀態、端口映射以及所使用的鏡像等,例如:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 05a60464f1d5 2 weeks ago 133MB
ubuntu 20.04 98c375a7b220 3 weeks ago 72.8MB
docker run
:基于指定鏡像創建并啟動一個新的容器。
docker run -d -p 8080:80 nginx:latest
此命令會使用 nginx:latest
鏡像創建一個后臺運行(-d
)的容器,并將容器的 80 端口映射到主機的 8080 端口。
docker start
、docker stop
、docker restart
:分別用于啟動、停止和重啟已經存在的容器。
# 啟動容器
docker start my-container
# 停止容器
docker stop my-container
# 重啟容器
docker restart my-container
docker exec
:在運行的容器內部執行命令。
docker exec -it my-container bash
該命令會以交互式(-i
)和偽終端(-t
)模式在 my-container
容器內啟動一個 Bash 會話。
docker rm
:刪除一個或多個停止的容器。
docker rm my-container
注意:
1、不能刪除一個正在run的程序;
2、如果一個image下啟動了一個或多個容器,且容器正在運行。如果要刪除image,必須按如下步驟進行:
- 停止容器(docker stop my-container)
- 刪除image創建的所有容器(docker rm my-container)
- 刪除image(docker rmi my-image)
關于鏡像和容器的補充說明:
兩者的關系
- 鏡像與容器的關系:容器是由鏡像創建而來的,鏡像是容器的基礎。可以將鏡像看作是一個類,而容器則是這個類的實例。一個鏡像可以創建多個容器實例,這些容器共享鏡像的文件系統和基礎配置,但各自有獨立的運行時環境和狀態。
- 命令作用的關系:
docker images
命令主要用于管理和查看鏡像資源,幫助了解本地有哪些可用的鏡像,以便進行拉取、構建、刪除等操作。而docker ps
命令則主要用于監控和管理正在運行的容器,可以通過它了解容器的運行狀態,進而進行停止、啟動、重啟等操作。
docker images
和docker ps
分別從鏡像和容器的角度提供了對Docker環境的不同視角,它們相互配合,幫助用戶全面了解和管理Docker中的資源。
三、網絡操作命令
docker network ls
:列出所有 Docker 網絡。
docker network ls
docker network create
:創建一個新的 Docker 網絡。
docker network create my-network
docker network connect
、docker network disconnect
:分別用于將容器連接到網絡和從網絡中斷開容器。
# 將容器連接到網絡
docker network connect my-network my-container
# 從網絡中斷開容器
docker network disconnect my-network my-container
四、數據卷操作命令
docker volume ls
:列出所有 Docker 數據卷。
docker volume ls
docker volume create
:創建一個新的 Docker 數據卷。
docker volume create my-volume
docker volume rm
:刪除一個或多個 Docker 數據卷。
docker volume rm my-volume
五、其他常用命令
docker info
:顯示 Docker 系統的綜合信息,如 Docker 版本、鏡像和容器數量、存儲驅動等。
docker info
docker logs
:查看容器的日志輸出。
docker logs my-container
docker logs
命令用于查看 Docker 容器的日志輸出,這對于調試和監控容器內應用程序的運行狀態非常有用。以下是對該命令的詳細解釋:
基本語法
docker logs [OPTIONS] CONTAINER
其中,OPTIONS
是可選參數,CONTAINER
是容器的名稱或 ID。
常用選項及示例
1. -f
或 --follow
- 作用:持續跟蹤日志輸出,類似于
tail -f
命令。當容器內的應用程序持續產生日志時,使用該選項可以實時查看新的日志信息。 - 示例:
docker logs -f my-container
此命令會持續輸出 my-container
容器的日志,直到手動停止(使用 Ctrl + C
)。
2. --since
- 作用:只顯示自指定時間之后的日志。時間格式可以是
YYYY-MM-DDTHH:MM:SS
或者相對時間(如2m
表示 2 分鐘前)。 - 示例:
# 顯示自 2024-01-01 12:00:00 之后的日志
docker logs --since "2024-01-01T12:00:00" my-container
# 顯示自 5 分鐘前之后的日志
docker logs --since 5m my-container
3. --until
- 作用:只顯示直到指定時間之前的日志。時間格式與
--since
相同。 - 示例:
# 顯示直到 2024-01-01 12:00:00 之前的日志
docker logs --until "2024-01-01T12:00:00" my-container
# 顯示直到 3 分鐘前之前的日志
docker logs --until 3m my-container
4. -t
或 --timestamps
- 作用:在日志輸出中添加時間戳,方便了解每條日志的產生時間。
- 示例:
docker logs -t my-container
輸出的日志每條前面會帶有時間戳,類似如下格式:
2024-01-01T12:00:00.123456000Z Log message here
5. --tail
- 作用:只顯示日志的最后 N 行。當日志文件非常大時,使用該選項可以快速查看最新的日志信息。
- 示例:
# 顯示日志的最后 10 行
docker logs --tail 10 my-container
六、高級用法
結合 grep
進行日志過濾
可以將 docker logs
的輸出通過管道傳遞給 grep
命令,以過濾出包含特定關鍵字的日志信息。
docker logs my-container | grep "error"
該命令會過濾出 my-container
容器日志中包含 “error” 關鍵字的行。
查找 指定開始、結束時間范圍內
的數據
docker logs --since "2024-01-01T12:00:00" --until "2024-01-01T12:05:00" my-container
注意事項
- 日志文件大小:容器的日志文件會不斷增長,可能會占用大量磁盤空間。可以通過配置 Docker 的日志驅動(如
json-file
驅動的max-size
和max-file
參數)來限制日志文件的大小和數量。 - 日志權限:確保有足夠的權限查看容器的日志。通常,使用
root
用戶或具有docker
組權限的用戶可以正常執行docker logs
命令。