您的位置:首頁>正文

如何運行容器?-每天5分鐘玩轉 Docker 容器技術(22)

上一章我們學習了如何構建 Docker 鏡像, 並通過鏡像運行容器。 本章將深入討論容器:學習容器的各種操作, 容器各種狀態之間如何轉換, 以及實現容器的底層技術。

運行容器

docker run是啟動容器的方法。 在討論 Dockerfile 時我們已經學習到, 可用三種方式指定容器啟動時執行的命令:

CMD 指令。

ENDPOINT 指令。

在 docker run命令列中指定。

例如下面的例子:

容器啟動時執行 pwd, 返回的/是容器中的目前的目錄。 執行docker ps或docker container ls可以查看 Docker host 中當前運行的容器:

咦, 怎麼沒有容器?用 docker ps -a或docker container ls -a看看。

-a會顯示所有狀態的容器, 可以看到, 之前的容器已經退出了, 狀態為Exited。

這種“一閃而過”的容器通常不是我們想要的結果,

我們希望容器能夠保持 runing 狀態, 這樣才能被我們使用。

讓容器長期運行

如何讓容器保存運行呢?

因為容器的生命週期依賴于啟動時執行的命令, 只要該命令不結束, 容器也就不會退出。

理解了這個原理, 我們就可以通過執行一個長期運行的命令來保持容器的運行狀態。 例如執行下麵的命令:

while語句讓 bash 不會退出。 我們可以打開另一個終端查看容器的狀態:

可見容器仍處於運行狀態。 不過這種方法有個缺點:它佔用了一個終端。

我們可以加上參數 -d以後臺方式啟動容器。

容器啟動後回到了 docker host 的終端。 這裡看到 docker 返回了一串字元, 這是容器的 ID。 通過 docker ps查看容器:

現在我們有了兩個正在運行的容器。

這裡注意一下容器的 CONTAINER ID和NAMES這兩個欄位。

CONTAINER ID是容器的 “短ID”, 前面啟動容器時返回的是 “長ID”。 短ID是長ID的前12個字元。

NAMES欄位顯示容器的名字, 在啟動容器時可以通過--name參數顯示地為容器命名, 如果不指定, docker 會自動為容器分配名字。

對於容器的後續操作, 我們需要通過 “長ID”、“短ID” 或者 “名稱” 來指定要操作的容器。 比如下面停止一個容器:

這裡我們就是通過 “短ID” 指定了要停止的容器。

通過 while啟動的容器雖然能夠保持運行, 但實際上沒有幹什麼有意義的事情。 容器常見的用途是運行後臺服務, 例如前面我們已經看到的 http server:

這一次我們用 --name指定了容器的名字。 我們還看到容器運行的命令是httpd-foreground, 通過docker history可知這個命令是通過 CMD 指定的。

我們經常需要進到容器裡去做一些工作,

比如查看日誌、調試、啟動其他進程等。 下一節學習如何進入容器內部。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示