Website logo

Robert Chang

技術部落格

Docker - Container 的相關指令 ( 上 )

昨天啟動了一個 nginx 的容器,並且最後用 Ctrl + C 的方式暫停了容器,而除了 docker container run 之外,還能做些什麼呢?

背景執行容器

你可能會想,每次啟動一個容器都需要佔用掉一個終端機的視窗豈不是非常不方便?

所以 Docker 也提供了背景執行的參數,讓容器在啟動的時候可以在背景執行,可以試試下方的指令:

$ docker container run --detach --publish 80:80 nginx
6c438c6f9b663817b30f20f5aafb4556384905b2214

接著終端機就回歸正常,這時候打開 http://localhost 一樣會看到如下圖一樣的歡迎頁面,證明了 nginx 確實在背景執行,但也可以透過另外一個指令來列出正在運作的容器。

screen shot
$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS              NAMES
6c438c6f...  nginx "/do.." 2 min.. Up 2.. 0.0.0.0:80->80/tcp goofy

這裡透露了幾個有用的資訊:

CONTAINER ID: 我們在背景執行容器時,Docker 給了我們一段亂碼,這段亂碼其實是 Docker 容器獨一無二的 ID,所以仔細比對會發現這和列出來的 ID 是一模一樣的。

IMAGE: 這個就是當初我們指令中指定的映像檔名稱。

COMMAND: 這個我們會留到後面解釋關於映像檔的初始指令。

CREATED: 何時啟動的容器。

STATUS: 這個我們會留到後面解釋關於容器的健康狀態。

PORTS: 則是我們在指令中指定的 port 對應位置。

NAMES: 這個容器的名字,如果沒有指定則會是由 Docker 隨機分配。

用指令暫停容器

前面的例子,我們使用 Ctrl + C 的方式停止執行程序,這次我們則用文明人的方式來把容器給停止。

$ docker container stop 6c438c6 # 你的 ID 不會和我相同
6c438c6

我們來驗證是否有正確的停止容器:

$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

就會看到此時的清單上是空無一物,可以知道容器確實被暫停了。

列出所有包含被暫停的容器

這標題是什麼意思呢?我們不是已經學過 docker container list 的指令來列出所有的容器了嗎?

但其實 docker container list 所列出來的是活躍中的容器,被暫停的容器則不會顯示在清單上,這樣的設計是更方便讓使用者可以只看到活躍中的容器狀態。

但還是能夠透過下方指令來列出所有包含被暫停的容器:

$ docker container list --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS              NAMES
6c438c6f...  nginx "/do.." 2 min.. Exited 0.0.0.0:80->80/tcp goofy

可以看到相同的容器在 STATUS 上從 UP 變成了 Exited 的狀態。

結語

今天分別介紹了容器的不同使用方式,以及基礎的容器相關指令。

明天將從如何啟動 Exited 狀態的容器開始,以及替容器命名以便於操作容器。

上一篇文章Docker - 啟動時做了些什麼?

下一篇文章Docker - Container 的相關指令 ( 中 )