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