您好,登錄后才能下訂單哦!
前言:
在這篇文章中,我們將帶你學(xué)習(xí) 8 個(gè)基本的 Docker 容器命令,它們操控著 Docker 容器的基本活動(dòng),例如 運(yùn)行run、 列舉list、 停止stop、 查看歷史紀(jì)錄logs、 刪除delete 等等。文末福利!
利用這 8 個(gè)命令可以學(xué)習(xí) Docker 容器的基本管理方式。這是一個(gè)為 Docker 初學(xué)者準(zhǔn)備的,帶有示范命令輸出的指南。
在這篇文章中,我們將帶你學(xué)習(xí) 8 個(gè)基本的 Docker 容器命令,它們操控著 Docker 容器的基本活動(dòng),例如 運(yùn)行run、 列舉list、 停止stop、 查看歷史紀(jì)錄logs、 刪除delete 等等。如果你對(duì) Docker 的概念很陌生,推薦你看看我們的 介紹指南,來(lái)了解 Docker 的基本內(nèi)容以及 如何 在 Linux 上安裝 Docker。 現(xiàn)在讓我們趕快進(jìn)入要了解的命令:
如何運(yùn)行 Docker 容器?
眾所周知,Docker 容器只是一個(gè)運(yùn)行于宿主操作系統(tǒng)host OS上的應(yīng)用進(jìn)程,所以你需要一個(gè)鏡像來(lái)運(yùn)行它。Docker 鏡像以進(jìn)程的方式運(yùn)行時(shí)就叫做 Docker 容器。你可以加載本地 Docker 鏡像,也可以從 Docker Hub 上下載。Docker Hub 是一個(gè)提供公有和私有鏡像來(lái)進(jìn)行拉取pull操作的集中倉(cāng)庫(kù)。官方的 Docker Hub 位于 hub.docker.com。 當(dāng)你指示 Docker 引擎運(yùn)行容器時(shí),它會(huì)首先搜索本地鏡像,如果沒(méi)有找到,它會(huì)從 Docker Hub 上拉取相應(yīng)的鏡像。
讓我們運(yùn)行一個(gè) Apache web 服務(wù)器的 Docker 鏡像,比如 httpd 進(jìn)程。你需要運(yùn)行 docker container run
命令。舊的命令為 docker run
, 但后來(lái) Docker 添加了子命令部分,所以新版本支持下列命令:
root@kerneltalks # docker container run -d -p 80:80 httpd Unable to find image 'httpd:latest' locally latest: Pulling from library/httpd 3d77ce4481b1: Pull complete 73674f4d9403: Pull complete d266646f40bd: Pull complete ce7b0dda0c9f: Pull complete 01729050d692: Pull complete 014246127c67: Pull complete 7cd2e04cf570: Pull complete Digest: sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617 Status: Downloaded newer image for httpd:latest c46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682
Docker 的 run 命令將鏡像名作為強(qiáng)制參數(shù),另外還有很多可選參數(shù)。常用的參數(shù)有:
•-d:從當(dāng)前 shell 脫離容器
•-p X:Y:綁定容器的端口 Y 到宿主機(jī)的端口 X
•--name:命名你的容器。如果未指定,它將被賦予隨機(jī)生成的名字
•-e:當(dāng)啟動(dòng)容器時(shí)傳遞環(huán)境編輯及其值
通過(guò)以上輸出你可以看到,我們將 httpd 作為鏡像名來(lái)運(yùn)行容器。接著,本地鏡像沒(méi)有找到,Docker 引擎從 Docker Hub 拉取了它。注意,它下載了鏡像 httpd:latest, 其中 :后面跟著版本號(hào)。如果你需要運(yùn)行特定版本的容器,你可以在鏡像名后面注明版本名。如果不提供版本名,Docker 引擎會(huì)自動(dòng)拉取最新的版本。
輸出的最后一行顯示了你新運(yùn)行的 httpd 容器的唯一 ID。
如何列出所有運(yùn)行中的 Docker 容器?
現(xiàn)在,你的容器已經(jīng)運(yùn)行起來(lái)了,你可能想要確認(rèn)這一點(diǎn),或者你想要列出你的機(jī)器上運(yùn)行的所有容器。你可以使用 docker container ls 命令。在舊的 Docker 版本中,對(duì)應(yīng)的命令為 docker ps。
root@kerneltalks # docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c46f2e9e4690 httpd "httpd-foreground" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp cranky_cori
列出的結(jié)果是按列顯示的。每一列的值分別為:
Container ID :一開(kāi)始的幾個(gè)字符對(duì)應(yīng)你的容器的唯一 ID
Image :你運(yùn)行容器的鏡像名
Command :容器啟動(dòng)后運(yùn)行的命令
Created :創(chuàng)建時(shí)間
Status :容器當(dāng)前狀態(tài)
Ports :與宿主端口相連接的端口信息
Names :容器名(如果你沒(méi)有命名你的容器,那么會(huì)隨機(jī)創(chuàng)建)
如何查看 Docker 容器的歷史紀(jì)錄?
在第一步我們使用了 -d 參數(shù)來(lái)將容器,在它一開(kāi)始運(yùn)行的時(shí)候,就從當(dāng)前的 shell 中脫離出來(lái)。在這種情況下,我們不知道容器里面發(fā)生了什么。所以為了查看容器的歷史紀(jì)錄,Docker 提供了 logs 命令。它采用容器名稱或 ID 作為參數(shù)。
root@kerneltalks # docker container logs cranky_cori AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Thu May 31 18:35:07.301158 2018] [mpm_event:notice] [pid 1:tid 139734285989760] AH00489: Apache/2.4.33 (Unix) configured -- resuming normal operations [Thu May 31 18:35:07.305153 2018] [core:notice] [pid 1:tid 139734285989760] AH00094: Command line: 'httpd -D FOREGROUND'
這里我使用了容器名稱作為參數(shù)。你可以看到在我們的 httpd 容器中與 Apache 相關(guān)的歷史紀(jì)錄。
如何確定 Docker 容器的進(jìn)程?
容器是一個(gè)使用宿主資源來(lái)運(yùn)行的進(jìn)程。這樣,你可以在宿主系統(tǒng)的進(jìn)程表中定位容器的進(jìn)程。讓我們?cè)谒拗飨到y(tǒng)上確定容器進(jìn)程。
Docker 使用著名的 top 命令作為子命令的名稱,來(lái)查看容器產(chǎn)生的進(jìn)程。它采用容器的名稱或 ID 作為參數(shù)。在舊版本的 Docker 中,只可運(yùn)行 docker top 命令。在新版本中,docker top 和 docker container top 命令都可以生效。
root@kerneltalks # docker container top cranky_cori UID PID PPID C STIME TTY TIME CMD root 15702 15690 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15729 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15730 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15731 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND root@kerneltalks # ps -ef |grep -i 15702 root 15702 15690 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15729 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15730 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15731 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND root 15993 15957 0 18:59 pts/0 00:00:00 grep --color=auto -i 15702
在第一個(gè)輸出中,列出了容器產(chǎn)生的進(jìn)程的列表。它包含了所有細(xì)節(jié),包括用戶號(hào)uid、進(jìn)程號(hào)pid,父進(jìn)程號(hào)ppid、開(kāi)始時(shí)間、命令,等等。這里所有的進(jìn)程號(hào)你都可以在宿主的進(jìn)程表里搜索到。這就是我們?cè)诘诙€(gè)命令里做得。這證明了容器確實(shí)是宿主系統(tǒng)中的進(jìn)程。
如何停止 Docker 容器?
只需要 stop 命令!同樣,它采用容器名稱或 ID 作為參數(shù)。
root@kerneltalks # docker container stop cranky_cori cranky_cori
如何列出停止的或不活動(dòng)的 Docker 容器?
現(xiàn)在我們停止了我們的容器,這時(shí)如果我們使用 ls 命令,它將不會(huì)出現(xiàn)在列表中。
root@kerneltalks # docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
所以,在這種情況下,如果想要查看停止的或不活動(dòng)的容器,你需要在 ls 命令里同時(shí)使用 -a 參數(shù)。
root@kerneltalks # docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c46f2e9e4690 httpd "httpd-foreground" 33 minutes ago Exited (0) 2 minutes ago cranky_cori
有了 -a 參數(shù),現(xiàn)在我們可以查看已停止的容器。注意這些容器的狀態(tài)被標(biāo)注為 已退出exited。既然容器只是一個(gè)進(jìn)程,那么用“退出”比“停止”更合適!
如何(重新)啟動(dòng) Docker 容器?
現(xiàn)在,我們來(lái)啟動(dòng)這個(gè)已停止的容器。這和運(yùn)行一個(gè)容器有所區(qū)別。當(dāng)你運(yùn)行一個(gè)容器時(shí),你將啟動(dòng)一個(gè)全新的容器。當(dāng)你啟動(dòng)一個(gè)容器時(shí),你將開(kāi)始一個(gè)已經(jīng)停止并保存了當(dāng)時(shí)運(yùn)行狀態(tài)的容器。它將以停止時(shí)的狀態(tài)重新開(kāi)始運(yùn)行。
root@kerneltalks # docker container start c46f2e9e4690 c46f2e9e4690 root@kerneltalks # docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c46f2e9e4690 httpd "httpd-foreground" 35 minutes ago Up 8 seconds 0.0.0.0:80->80/tcp cranky_cori
如何移除 Docker 容器?
我們使用 rm 命令來(lái)移除容器。你不可以移除運(yùn)行中的容器。移除之前需要先停止容器。你可以使用 -f 參數(shù)搭配 rm 命令來(lái)強(qiáng)制移除容器,但并不推薦這么做。
root@kerneltalks # docker container rm cranky_cori cranky_cori root@kerneltalks # docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
你看,一旦移除了容器,即使再使用 ls -a
命令也查看不到容器了。
總結(jié)
以上所述是小編給大家介紹的8個(gè)基本的Docker容器管理命令,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。