Docker一通百通:10個關鍵命令帶你解鎖90%的容器化任務
Docker通過引入一種輕量級且高效的打包應用程序及其依賴的方法——容器化,徹底改變了軟件開發和部署的世界。
有了Docker,開發者可以創建被稱為容器的隔離環境,這些容器能在不同平臺上穩定運行,使得構建、部署和擴展應用程序變得更加容易。然而,要真正發揮Docker的力量,掌握有效管理容器的基本命令是必要的。
在這篇文章中,我們將探討每個開發者和系統管理員都應該了解的十個重要的Docker命令,以使他們的容器管理流程更加順暢。從創建和啟動容器,到列出可用的鏡像,再到優雅地停止它們,這些命令將成為有效管理你的Docker環境的基石。
通過掌握這些命令,你將獲得扎實的基礎,以便高效和有效地管理Docker容器。無論你是剛開始接觸Docker的初學者,還是希望提升你的容器管理技能的有經驗的用戶,這篇文章都將提供有價值的見解和實用的例子,幫助你自信地駕馭Docker的世界。讓我們深入挖掘,釋放Docker容器化能力的全部潛力吧。
1、docker run
docker run命令被用于基于Docker鏡像創建并啟動一個新的容器。運行容器的基本語法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- OPTIONS:可以用于自定義容器行為的額外選項,例如指定ports、volumes、環境變量等。
- IMAGE :用于創建容器的Docker鏡像的名稱。
- COMMAND:(可選)在容器內執行的命令。
- ARG:(可選)傳遞給容器內命令的參數。
例如,要運行一個基于“ubuntu”鏡像的容器,并在容器內執行ls命令,你可以使用以下命令:
docker run ubuntu ls
這將使用“ubuntu”image 創建一個新的容器并運行ls命令,列出容器文件系統內的文件和目錄。
請注意,如果指定的image 在本地不可用,Docker會在創建容器之前自動從Docker registry拉取鏡像。
2、docker ps
docker ps命令用于列出在你的 Docker 主機上正在運行的容器。它提供的信息包括容器 ID、使用的鏡像、正在執行的命令、狀態和端口映射等。下面是基本的語法:
docker ps [OPTIONS]
默認情況下,docker ps 只顯示正在運行的容器。如果你想查看所有容器,包括已停止或已退出的容器,可以使用-a選項:
docker ps -a
這將顯示你的 Docker 主機上所有容器的列表,以及它們各自的詳細信息。
docker ps命令的輸出包括 CONTAINER ID、IMAGE、COMMAND、CREATED、STATUS、PORTS 和 NAMES 等列。下面是對這些列的簡要解釋:
- CONTAINER ID:容器的唯一標識符。
- IMAGE:用于創建容器的鏡像的名稱或 ID。
- COMMAND:在容器內部執行的命令。
- CREATED:時間戳,表示容器的創建時間。
- STATUS:容器的當前狀態(例如,運行中、已停止、已退出)。
- PORTS:容器與主機系統之間的端口映射。
- NAMES:容器的自動生成或用戶指定的名稱。
默認情況下,docker ps命令提供了容器的摘要視圖。如果你想要更詳細的信息,可以添加--format選項,后跟一個格式模板。例如:
docker ps --format "ID: {{.ID}}, Image: {{.Image}}, Status: {{.Status}}"
這將僅顯示每個容器的容器 ID、鏡像和狀態信息。請注意,運行docker ps命令需要在你的系統上安裝和運行 Docker。
3、docker stop
docker stop命令用于停止一個或多個正在運行的容器。它向容器的主進程發送一個信號,請求它優雅地停止運行。下面是基本的語法:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
- OPTIONS:可以用來自定義停止行為的額外選項。例如,你可以使用--time或-t選項指定超時時間,讓容器有更多時間優雅地停止運行,而不是強制終止它。
- CONTAINER :要停止的容器的名稱或 ID。你可以用空格分隔指定多個容器。
例如,要停止名稱為my-container的容器,你可以使用以下命令:
docker stop my-container
如果你想停止多個容器,可以列出它們的名稱或 ID,用空格分隔:
docker stop container1 container2 container3
當執行docker stop命令時,Docker向容器發送一個 SIGTERM 信號,允許容器內部的進程執行任何必要的清理任務,并優雅地關閉。如果進程在給定的超時時間內(默認為10秒)沒有停止,Docker可以發送一個 SIGKILL 信號來強制終止容器。
4、docker rm
docker rm 命令用于從你的 Docker 主機中刪除一個或多個已停止的容器。它永久刪除指定的容器,并釋放相關的資源。下面是基本的語法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
- OPTIONS:可以用來自定義刪除行為的額外選項。例如,你可以使用-f或--force選項來強制刪除正在運行的容器。
- CONTAINER:要刪除的容器的名稱或 ID。你可以用空格分隔指定多個容器。
例如,要刪除名稱為my-container的容器,你可以使用以下命令:
docker rm my-container
如果你想刪除多個容器,可以列出它們的名稱或 ID,用空格分隔:
docker rm container1 container2 container3
默認情況下,docker rm命令只刪除已停止的容器。如果你想同時刪除正在運行的容器,可以使用-f或--force選項:
docker rm -f container1 container2
請注意,刪除容器將永久刪除它,包括容器內部的任何數據或更改。如果你要刪除正在運行的容器,它會先被停止,然后再被刪除。
此外,你還可以在docker rm命令中使用-v或--volumes選項,如果有的話,一并刪除與容器關聯的卷。
5、docker images
docker images命令用于列出你的 Docker 主機上可用的 Docker 鏡像。它顯示有關鏡像的信息,如repository, tag, image ID、創建日期和大小。下面是基本的語法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
- OPTIONS:可以用來自定義輸出或過濾鏡像的額外選項。例如,你可以使用--format選項來指定輸出的格式模板,或者使用-a或--all選項來顯示所有鏡像,包括中間鏡像層。
- REPOSITORY:(可選)鏡像的倉庫名稱。
- TAG:(可選)鏡像的標簽。
默認情況下,docker images命令列出你的 Docker 主機上所有可用的鏡像。例如:
docker images
這將顯示一個鏡像表格,包括 REPOSITORY、TAG、IMAGE ID、CREATED 和 SIZE 等列。REPOSITORY 和 TAG 組合在一起形成鏡像的唯一標識符。
如果你想根據倉庫或標簽對鏡像進行過濾,可以提供倉庫和/或標簽名稱作為參數。例如,列出來自特定倉庫的鏡像:
docker images my-repo
列出具有特定標簽的鏡像:
docker images my-repo:my-tag
你還可以組合選項來進一步自定義輸出。例如,顯示包括中間層鏡像在內的所有鏡像,并使用自定義格式進行輸出:
docker images -a --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
這將以表格格式顯示鏡像,只顯示 image ID, repository和tag 信息。
6、docker rmi
docker rmi命令用于從你的 Docker 主機中刪除一個或多個 Docker 鏡像。它會永久刪除你本地鏡像緩存中指定的鏡像。下面是基本的語法:
docker rmi [OPTIONS] IMAGE [IMAGE...]
- OPTIONS:可以用來自定義刪除行為的額外選項。例如,你可以使用-f或--force選項來強制刪除鏡像,即使它正被運行的容器使用。
- IMAGE:要刪除的鏡像的名稱或 ID。你可以用空格分隔指定多個鏡像。
例如,要刪除名稱為my-image:latest的鏡像,你可以使用以下命令:
docker rmi my-image:latest
如果你想刪除多個鏡像,可以列出它們的名稱或 ID,用空格分隔:
docker rmi image1 image2 image3
默認情況下,docker rmi命令只會刪除沒有被任何容器使用的鏡像。如果你嘗試刪除當前被一個或多個容器使用的鏡像,Docker 會報錯。在這種情況下,你可以使用-f或--force選項強制刪除鏡像,即使它正在使用中:
docker rmi -f my-image:latest
請注意,刪除鏡像將會永久從你的本地鏡像緩存中刪除它。如果你將來需要再次使用該鏡像,你需要從 Docker 注冊表中拉取它,或者使用 Dockerfile 重新構建它。
此外,你還可以在docker rmi命令中使用--no-prune選項,如果存在未標記的父鏡像,則防止自動刪除它們。
7、docker build
docker build命令用于根據 Dockerfile 構建一個 Docker 鏡像。它允許你定義創建自定義鏡像所需的指令和依賴關系。下面是基本的語法:
docker build [OPTIONS] PATH | URL | -
- OPTIONS:可以用來自定義構建過程的額外選項。一些常用的選項包括-t或--tag用于指定鏡像的名稱和可選標簽,-f或--file用于指定 Dockerfile 的位置,--build-arg用于傳遞構建時變量給 Dockerfile。
- PATH | URL | -:指向包含 Dockerfile 的目錄的路徑,Git 倉庫的 URL,或者“-”表示從標準輸入構建。
例如,要使用當前目錄中的 Dockerfile 構建一個鏡像,并將其標記為my-image:latest,你可以使用以下命令:
docker build -t my-image:latest .
這里的“.”表示 Dockerfile 在當前目錄中。
如果你的 Dockerfile 存在于其他位置,你可以使用-f選項指定其路徑:
docker build -t my-image:latest -f /path/to/Dockerfile .
在構建過程中,Docker 讀取 Dockerfile 中的指令,執行每個步驟,并根據需要創建中間鏡像。最終生成的鏡像將會被打上指定的名稱和可選的標簽。
你可以在 Dockerfile 中定義額外的指令,例如復制文件、安裝依賴項、設置環境變量或暴露端口,以根據你的需求自定義鏡像。
8、docker exec
docker exec命令用于在正在運行的 Docker 容器內執行命令。它允許你以交互或分離模式運行命令。下面是基本的語法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
- OPTIONS:可以用來自定義執行行為的額外選項。一些常用的選項包括-i或--interactive用于保持 STDIN 開放以進行交互式命令,-t或--tty用于分配一個偽終端,以及-d或--detach用于在后臺運行命令。
- CONTAINER :要在其中執行命令的容器的名稱或 ID。
- COMMAND:要在容器內部執行的命令。
- ARG:(可選)傳遞給容器內部命令的參數。
例如,要在名為my-container的容器內執行ls命令,你可以使用以下命令:
docker exec my-container ls
這將在指定的容器內運行“ls”命令,并顯示文件和目錄的列表。
如果你想運行一個交互式命令,比如在容器內啟動一個 shell,你可以同時使用-it選項:
docker exec -it my-container bash
這將在容器內啟動一個交互式的 shell 會話,允許你交互地執行多個命令。
請注意,容器必須處于運行狀態才能使用docker exec命令。如果你需要在已停止或已退出的容器中執行命令,你可以先使用docker start命令啟動容器,然后再使用docker exec運行命令。
9、docker pull
docker pull命令用于從 Docker 注冊表(例如 Docker Hub)下載 Docker 鏡像。它會獲取指定的鏡像或鏡像,并將它們保存到你的本地鏡像緩存中。下面是基本的語法:
docker pull [OPTIONS] IMAGE[:TAG]
- OPTIONS:可以用來自定義下載過程的額外選項。一些常用的選項包括--all-tags用于拉取鏡像的所有可用標簽,--platform用于指定要拉取的鏡像的平臺,以及--quiet用于抑制進度輸出。
- IMAGE:要從 Docker 注冊表中拉取的鏡像的名稱。它可以是“倉庫/鏡像”的格式或“倉庫/鏡像:標簽”的格式。如果未指定標簽,默認使用latest。
例如,要從 Docker Hub 拉取最新版本的“ubuntu”鏡像,你可以使用以下命令:
docker pull ubuntu
如果你想拉取特定標簽的鏡像版本,可以指定標簽:
docker pull ubuntu:20.04
指定的鏡像將會從 Docker 注冊表中下載,并保存到你的本地鏡像緩存中。一旦鏡像被拉取,你就可以使用它來創建和運行在你的 Docker 主機上的容器。
10、docker push
docker push命令用于將 Docker 鏡像上傳到 Docker 注冊表(例如 Docker Hub 或私有注冊表)。它允許你與他人共享你本地構建或修改的鏡像。下面是基本的語法:
docker push [OPTIONS] NAME[:TAG]
- OPTIONS:可以用來自定義上傳過程的額外選項。一些常用的選項包括--all-tags用于上傳鏡像的所有標簽,--disable-content-trust用于跳過內容信任驗證,以及--quiet用于抑制進度輸出。
- NAME:要上傳的鏡像的名稱。它應該包括倉庫和鏡像名。例如,“用戶名/倉庫名:鏡像名”。
- TAG:(可選)要上傳的鏡像的標簽。如果未指定標簽,默認使用latest標簽。
在推送鏡像之前,你需要確保已經通過身份驗證登錄到 Docker 注冊表。你可以使用docker login命令登錄到注冊表,提供用戶名、密碼和注冊表的 URL(如果需要)。
例如,要將名為my-image的鏡像與“latest”標簽推送到 Docker Hub,假設你已經登錄到 Docker Hub,你可以使用以下命令:
docker push username/my-image:latest
指定的鏡像將會被上傳到 Docker 注冊表,并對他人可供下載和使用。