(5)一步步掌握基礎 Docker - Docker 常見容器指令

前言

前面介紹了 Docker 與 Docker Hub 的指令,接下來就要來介紹 Docker 常見的指令。

Docker 常見容器指令

雖然前面我們已經有認識到一些 Docker 的指令了,但我將前一篇的指令區分成了 Docker Hub 的指令,而接下來才是 Docker 相關操作的指令,那麼就來看看有哪些指令吧!

  • docker run:建立/執行 Docker 容器
  • docker start:執行 Docker 容器
  • docker stop:停止 Docker 容器
  • docker rm:刪除 Docker 容器
  • docker restart:重新啟動 Docker 容器
  • docker ps:查看 Docker 容器列表
  • docker exec:進入 Docker 容器
  • docker logs:查看 Docker 容器的日誌

以上就是比較常見的 Docker 指令,接下來就來看看這些指令的使用方式吧!

docker run

docker run 指令可以用來建立/執行 Docker 容器,而這個指令的使用方式如下:

1
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

看到這一串相信感覺到很混亂很可怕,實際上我們只需要關注兩個東西,也就是 [OPTIONS]IMAGE[:TAG|@DIGEST],而這兩個東西的意思如下:

  • [OPTIONS] 代表的是指令的選項,也就是我們可以在指令後面加上一些選項
  • IMAGE[:TAG|@DIGEST] 代表的是我們要使用的 Docker Image

接著我們要來嘗試一下 docker run 的指令,那麼在前面我們有嘗試使用 docker pull node 來下載 Node.js 的 Docker Image,那麼我們就可以使用 docker run 來建立/執行 Node.js 的 Docker 容器,而指令如下:

1
docker run -it node

那麼 -it 是什麼呢?-it 的意思是指我們要進入 Docker 容器的互動模式,而 node 則是我們要使用的 Docker Image,而這個指令的意思就是我們要進入 Node.js 的 Docker 容器的互動模式,而這個指令執行後會看到如下的畫面:

Node

這時候你應該就看到了我們所熟悉的 Node.js 環境了

那麼其實 -it 是兩個指令,分別是

  • -i:代表的是 interactive 我們要進入 Docker 容器的互動模式
  • -t:代表的是 tty 分配一個虛擬終端機

通常我們會比較常使用 -it 就是了。

docker start

docker start 指令可以用來啟動 Docker 容器,而這個指令的使用方式如下:

1
docker start [OPTIONS] CONTAINER [CONTAINER...]

使用方式與 docker run 有一點雷同,雖然都是啟動一個 Docker 容器,但是要注意的是 docker run 是建立並同時啟動 Docker 容器,因此 docker run 真正用途是用於啟動被停起的 Docker 容器。

什麼意思呢?當我們輸入 docker run 的時候會去依據我們的 Docker Image 建立出一個 Docker 容器,因此如果你每一次都用 docker run 當作啟動 Docker 的指令的話,那麼就有可能發生一些問題,其中最明顯的就是會很難管理,因此還是會建議區分一下指令較好。

假設你很興奮的去輸入類似 docker run 的指令

1
docker start -it node

那麼你會接收到一段錯誤訊息

1
2
unknown shorthand flag: 't' in -t
See 'docker start --help'.

這是因為 docker start 指令並沒有 -t 的選項,而 -t 的選項是用於 docker run 的,因此我們要使用 docker start 時就不需要 -t,除此之外,如果你輸入以下指令

1
docker start -i node

你也會得到以下錯誤訊息

1
Error: No such container: node

你可能會想說,為什麼會這樣呢?我們不是 docker pull node 環境了嗎?而且剛剛不是也運行起來了嗎?為什麼會找不到 node 容器呢?

這是因為當我們使用 docker run -it node 時,會建立一個新的 Docker 容器,並同時進入 Node 的互動模式,而這個 Docker 容器的名稱是隨機產生的,因此我們無法使用 docker start 來啟動這個容器,因為 docker start 必須帶入類似容器 ID 的東西,而不是 Image 名稱。

這邊稍微有一點複雜,請記住一個原則

  • docker run:建立並同時啟動 Docker 容器,但是輸入的名稱會是 Docker Image 名稱
  • docker start:啟動 Docker 容器,但是名稱會是 Docker 容器 ID

除此之外一個是建立容器,一個是啟動容器,因此要注意指令的區分

那麼正確該怎麼使用 docker start 呢?
首先,先輸入 docker ps -a 來查看所有的 Docker 容器,並找到你要啟動的容器 ID

docker ps -a

上方圖中有一段 CONTAINER ID,這就是我們要找的容器 ID,接著我們就可以輸入以下指令來啟動容器,請注意這個 Node 的容器在你輸入 docker start 00c86b3fe0ca 之後會立刻結束,因為我們沒有進入互動模式,因此正確的指令要輸入以下

1
docker start 00c86b3fe0ca

那我們要如何進入互動模式呢?這邊需要輸入一個還沒介紹到的指令,也就是 docker exec

1
docker exec -it 00c86b3fe0ca /bin/bash

這時候你會進入到一個很奇怪的畫面,會顯示著…

1
root@00c86b3fe0ca:/#

其實這是因為我們進入到了 Docker 容器中,而且是以 root 的身份,因此你可以輸入 ls 來查看目前的檔案,或是輸入 exit 來離開互動模式。

那麼由於我們要回到 Node 互動模式,所以接著輸入 node 就可以回到 Node 的互動模式囉~

關於前面的 docker exec 不用怕,我們在後面章節會再來介紹。

docker stop

docker stop 是用來停止 Docker 容器的指令,只需要輸入以下指令

1
docker stop [CONTAINER ID]

就可以停止 Docker 容器了,以前面的 Node 為例,我們可以輸入以下指令來停止 Node 容器

1
docker stop 00c86b3fe0ca

docker rm

docker rm 是用來刪除 Docker 容器的指令,只需要輸入以下指令

1
docker rm [CONTAINER ID]

什麼意思呢?簡單來講就是刪除透過 docker run 建立的 Docker 容器,以前面的 Node 為例,我們可以輸入以下指令來刪除 Node 容器

1
docker rm 00c86b3fe0ca

超簡單的吧!

請注意,如果你要刪除的 Docker 容器是正在運行的,那麼就會出現以下錯誤

1
Error response from daemon: You cannot remove a running container 00c86b3fe0ca. Stop the container before attempting removal or force remove

因此,如果你要刪除的 Docker 容器是正在運行的,那麼就必須先停止它(docker stop 00c86b3fe0ca),才能刪除它

那麼這一篇就先到這邊,下一篇我們再繼續針對 Docker 的指令來進行介紹。

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你可以也可以請我「喝一杯咖啡(Donate)」。

Buy Me A Coffee Buy Me A Coffee

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ