Docker常用命令
1、本地鏡像管理
save
命令
將一個或多個 Docker 鏡像保存到一個 tar 歸檔文件中,以便在其他環境中分發或備份。
# 語法:docker save [OPTIONS] IMAGE [IMAGE...]# 保存單個鏡像到文件
docker save -o myimage.tar myimage:latest# 保存多個鏡像到同一個文件
docker save -o multiple_images.tar image1:latest image2:latest# 注意:
# 1、保存鏡像時,會包含鏡像的所有層,因此生成的 tar 文件可能會很大。
# 2、如果保存多個鏡像到同一個文件中,使用 docker load 命令時會加載所有包含的鏡像。
# 3、為了減少文件大小,可以在保存前使用 docker image prune 命令清理未使用的鏡像和層。
load
命令
用于從由 docker save
命令生成的 tar 文件中加載 Docker 鏡像。
# 語法:docker load [OPTIONS]# 從文件加載鏡像
docker load -i myimage.tar# 從標準輸入加載鏡像
cat myimage.tar | docker load# 參數:
# -i, --input: 指定輸入文件的路徑
# -q, --quiet: 安靜模式,減少輸出信息
build
命令
用于從 Dockerfile 構建 Docker 鏡像。
docker build
命令通過讀取 Dockerfile 中定義的指令,逐步構建鏡像,并將最終結果保存到本地鏡像庫中。
# 語法:docker build [OPTIONS] PATH | URL | -
常用參數:
PATH
: 包含 Dockerfile 的目錄路徑或 .(當前目錄)URL
: 指向包含 Dockerfile 的遠程存儲庫地址(如 Git 倉庫)-
: 從標準輸入讀取 Dockerfile
常用選項:
- -t, --tag: 為構建的鏡像指定名稱和標簽
- -f, --file: 指定 Dockerfile 的路徑(默認是 PATH 下的 Dockerfile)
- –build-arg: 設置構建參數
- –no-cache: 不使用緩存層構建鏡像
- –rm: 構建成功后刪除中間容器(默認開啟)
- –force-rm: 無論構建成功與否,一律刪除中間容器
- –pull: 始終嘗試從注冊表拉取最新的基礎鏡像
更多選項:
--build-arg=[]
: 設置構建鏡像時的變量--cpu-shares
: 設置 CPU 使用權重-f
: 指定 Dockerfile 的路徑--force-rm
: 強制在構建過程中刪除中間容器--isolation
: 使用指定的容器隔離技術--label=[]
: 設置鏡像的元數據-m
: 設置內存的最大值--memory-swap
: 設置交換空間的最大值(內存 + 交換空間),-1
表示不限制交換空間--no-cache
: 構建鏡像時不使用緩存--shm-size
: 設置/dev/shm
的大小,默認值為 64M--ulimit
: 設置 Ulimit 配置--network
: 在構建期間設置RUN
指令的網絡模式,默認值為default
其它命令
docker images
命令用于列出本地的 Docker 鏡像。
2、容器生命周期管理
run
命令
docker run 命令用于創建并啟動一個新的容器。
# 語法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用參數:
-d
: 后臺運行容器并返回容器 ID。-it
: 交互式運行容器,分配一個偽終端。--name
: 給容器指定一個名稱。-p
: 端口映射,格式為host_port:container_port
。-v
: 掛載卷,格式為host_dir:container_dir
。--rm
: 容器停止后自動刪除容器。--env
或-e
: 設置環境變量。--network
: 指定容器的網絡模式。--restart
: 容器的重啟策略(如no
、on-failure
、always
、unless-stopped
)。-u
: 指定用戶。
簡單示例
# 1. 基本使用
docker run ubuntu # 拉取 ubuntu 鏡像并在前臺啟動一個容器。# 2. 后臺運行容器
docker run -d ubuntu # 在后臺運行 ubuntu 容器并返回容器 ID。# 3. 交互式運行并分配終端
docker run -it ubuntu /bin/bash # 以交互模式運行 ubuntu 容器,并啟動一個 Bash shell。# 4. 指定容器名稱
docker run --name my_container ubuntu # 運行一個 ubuntu 容器,并將其命名為 my_container。# 5. 端口映射
docker run -p 8080:80 nginx # 將本地主機的 8080 端口映射到容器內的 80 端口,運行 nginx 容器。# 6. 掛載卷
docker run -v /host/data:/container/data ubuntu # 將主機的 /host/data 目錄掛載到容器內的 /container/data 目錄。# 7. 設置環境變量
docker run -e MY_ENV_VAR=my_value ubuntu # 設置環境變量 MY_ENV_VAR 的值為 my_value,運行 ubuntu 容器。# 8. 使用網絡模式
docker run --network host nginx # 使用主機的網絡模式運行 nginx 容器。# 9. 指定重啟策略
docker run --restart always nginx # 設置容器的重啟策略為 always,即使容器停止也會自動重啟。# 10. 指定用戶
docker run -u user123 ubuntu # docker run -u user123 ubuntu# 11. 組合多個選項
docker run -d -p 8080:80 -v /host/data:/data --name webserver nginx
# 后臺運行一個命名為 webserver 的 nginx 容器,將主機的 8080 端口映射到容器的 80 端口,并將主機的 /host/data 目錄掛載到容器的 /data 目錄。
exec
命令
docker exec
命令用于在運行中的容器內執行一個新的命令。這對于調試、運行附加的進程或在容器內部進行管理操作非常有用。
# 語法:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
常用參數
-d, --detach
: 在后臺運行命令。-i, --interactive
: 保持標準輸入打開。--workdir, -w
: 指定命令的工作目錄。-t, --tty
: 分配一個偽終端。--privileged
: 給這個命令額外的權限。-e, --env
: 設置環境變量。--env-file
: 從文件中讀取環境變量。
簡單示例
# 1、在容器內運行命令,在運行中的 my_container 容器內執行 ls /app 命令,列出 /app 目錄的內容。
docker exec my_container ls /app# 2、以交互模式運行命令,注意不一定是/bin/bash,可能是/bin/sh、sh、bash等等
docker exec -it my_container /bin/bash
# 在運行中的 my_container 容器內啟動一個交互式的 Bash shell。-i 保持標準輸入打開,-t 分配一個偽終端。# 后臺運行命令,在運行中的 my_container 容器內后臺執行 touch /app/newfile.txt 命令,創建一個新文件。
docker exec -d my_container touch /app/newfile.txt# 3、設置環境變量,在運行中的 my_container 容器內執行 env 命令,并設置環境變量 MY_ENV_VAR 的值為 my_value。
docker exec -e MY_ENV_VAR=my_value my_container env# 4、以指定用戶身份運行命令,在運行中的 my_container 容器內以 user123 用戶身份執行 whoami 命令。
docker exec -u user123 my_container whoami# 5、指定工作目錄,在運行中的 my_container 容器內以 /app 目錄為工作目錄執行 pwd 命令。
docker exec -w /app my_container pwd
使用場景
- 調試容器: 進入容器內部進行調試和排查問題。
- 管理任務: 在容器內運行附加的管理任務或維護操作。
- 監控和檢查: 在容器內執行監控和檢查命令,獲取運行狀態和日志。
create
命令
docker create
命令用于創建一個新的容器,但不會啟動它。
docker create
命令會根據指定的鏡像和參數創建一個容器實例,但容器只會在創建時進行初始化,并不會執行任何進程。
具體用法同 docker run
是一樣的。
其它命令
-
docker start 命令用于啟動一個或多個已經創建的容器。
參數:
-a
: 附加到容器的標準輸入輸出流。-i
: 附加并保持標準輸入打開。
-
docker stop 命令用于停止一個運行中的容器。
參數:
- -t, --time: 停止容器之前等待的秒數,默認是 10 秒。
-
docker restart 命令用于重啟容器。
-
docker kill 命令用于立即終止一個或多個正在運行的容器。
-
docker rm 命令用于刪除一個或多個已經停止的容器。
-
docker pause - 暫停容器中所有的進程。
-
docker unpause - 恢復容器中所有的進程。
暫停的容器不會被終止,但其進程將被掛起,直到容器被恢復。這在需要臨時暫停容器活動的情況下非常有用。
使用場景
- 臨時暫停活動: 當需要臨時暫停容器中的所有活動以進行系統維護或資源管理時,可以使用
docker pause
。 - 資源管理: 在需要重新分配系統資源時,暫停不必要的容器以釋放資源。
- 調試和故障排除: 在調試或故障排除過程中暫停容器以分析當前狀態。
- 臨時暫停活動: 當需要臨時暫停容器中的所有活動以進行系統維護或資源管理時,可以使用
-
docker rename 命令用于重命名已存在的容器。允許在不停止或刪除容器的情況下,直接修改容器的名稱。
3、容器操作
ps
命令
docker ps 命令用于列出 Docker 容器。
默認情況下,docker ps 命令只顯示運行中的容器,但也可以通過指定選項來顯示所有容器,包括停止的容器。
# 語法:docker ps [OPTIONS]
OPTIONS 說明:
-a, --all
: 顯示所有容器,包括停止的容器。-q, --quiet
: 只顯示容器 ID。-l, --latest
: 顯示最近創建的一個容器,包括所有狀態。-n
: 顯示最近創建的 n 個容器,包括所有狀態。--no-trunc
: 不截斷輸出。-s, --size
: 顯示容器的大小。--filter, -f
: 根據條件過濾顯示的容器。--format
: 格式化輸出。
實例
# 1、顯示最近創建的一個容器
docker ps -l# 2、顯示最近創建的 n 個容器
docker ps -n 3# 3、顯示容器的大小
docker ps -s
inspect
命令
docker inspect
命令用于獲取 Docker 對象(容器、鏡像、卷、網絡等)的詳細信息。
docker inspect
命令返回 JSON 格式的詳細信息,可以幫助用戶了解對象的配置和狀態。
# 語法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS 說明:
-f, --format
: 使用 Go 模板語法格式化輸出。--type
: 返回指定類型的對象信息(可選類型:container
、image
、network
、volume
)。
使用場景
- 調試容器: 獲取容器的詳細配置信息,以便進行調試和排查問題。
- 查看網絡配置: 查看容器的網絡配置信息,了解其網絡連接狀態。
- 監控資源: 獲取容器的資源配置信息和使用情況,便于進行資源管理和監控。
- 腳本自動化: 在自動化腳本中使用
docker inspect
獲取對象的詳細信息,以進行后續操作。
top
命令
docker top
命令用于顯示指定容器中的正在運行的進程。
docker top
命令類似于 Linux 中的 top
或 ps
命令,它幫助用戶查看容器內的進程信息,便于監控和調試容器內的活動。
# 語法:docker top [OPTIONS] CONTAINER [ps OPTIONS]
使用自定義 ps 選項:
docker top my_container -o pid,comm
常用場景
- 監控容器內部活動: 通過查看容器內的進程,用戶可以監控容器內部正在運行的應用程序和服務。
- 調試和排查問題: 當容器出現問題時,可以通過
docker top
命令查看容器內的進程,幫助排查問題。 - 資源管理: 了解容器內的進程和資源使用情況,便于進行資源管理和優化。
logs
命令
docker logs
命令用于獲取和查看容器的日志輸出。
docker logs
命令非常有用,可以幫助用戶調試和監控運行中的容器。
# 語法:docker logs [OPTIONS] CONTAINER
常用選項:
-f, --follow
: 跟隨日志輸出(類似于tail -f
)。--since
: 從指定時間開始顯示日志。-t, --timestamps
: 顯示日志時間戳。--tail
: 僅顯示日志的最后部分,例如--tail 10
顯示最后 10 行。--details
: 顯示提供給日志的額外詳細信息。--until
: 顯示直到指定時間的日志。
實例
# 1、顯示帶時間戳的日志
docker logs -t my_container# 2、從指定時間開始顯示日志
docker logs --since="2023-07-22T15:00:00" my_container# 3、顯示直到指定時間的日志
docker logs --until="2023-07-22T16:00:00" my_container
cp
命令
docker cp
命令用于在 Docker 容器和宿主機之間復制文件或目錄。
docker cp
命令支持從容器到宿主機,或從宿主機到容器的文件復制操作。
# 語法
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
SRC_PATH
: 源路徑(可以是容器內的路徑或宿主機的路徑)。CONTAINER
: 容器的名稱或 ID。DEST_PATH
: 目標路徑(可以是容器內的路徑或宿主機的路徑)。
# 1、從容器復制文件到宿主機
docker cp my_container:/path/in/container /path/on/host# 2、從宿主機復制文件到容器
docker cp /path/on/host my_container:/path/in/container
注意
在處理大文件或大目錄時,復制操作可能需要一些時間。且宿主機或容器中應有足夠的權限進行寫入操作。
其它命令
docker attach
命令用于附加到正在運行的 Docker 容器的標準輸入、輸出和錯誤輸出(stdin、stdout、stderr)。允許用戶直接與容器交互,就像與正在運行的進程交互一樣。docker events
命令用于實時獲取 Docker 守護進程生成的事件。允許用戶監控 Docker 容器、鏡像、網絡和卷的各種操作事件,例如創建、啟動、停止、刪除等。docker export
命令用于將 Docker 容器的文件系統導出為一個 tar 歸檔文件。用于備份或遷移容器的文件系統,而不包括 Docker 鏡像的所有層和元數據。docker port
命令用于顯示容器的端口映射信息,即容器內部的端口如何映射到宿主機的端口。docker stats
命令用于實時顯示 Docker 容器的資源使用情況,包括 CPU、內存、網絡 I/O 和塊 I/O。docker update
命令用于更新 Docker 容器的資源限制,包括內存、CPU 等。docker commit
命令用于將容器的當前狀態保存為一個新的 Docker 鏡像。通常用于創建鏡像來保存容器的狀態,以便在將來可以重用或分發該鏡像。
4、網絡命令
docker network ls
: 列出所有網絡。docker network create <network>
: 創建一個新的網絡。docker network rm <network>
: 刪除指定的網絡。docker network connect <network> <container>
: 連接容器到網絡。docker network disconnect <network> <container>
: 斷開容器與網絡的連接。
5、卷命令
docker volume ls
: 列出所有卷。docker volume create <volume>
: 創建一個新的卷。docker volume rm <volume>
: 刪除指定的卷。docker volume inspect <volume>
: 顯示卷的詳細信息。