Website logo

Robert Chang

技術部落格

Docker - Container 的相關指令 ( 中 )

接續著昨天列出所有包含被停止的容器後,今天我們繼續來學習如何啟動停止的容器以及替容器命名!

啟動已經存在的容器

對於被暫停的容器,我們並不需要使用 docker container run 的方式來啟動,而是可以直接對暫停的容器執行指令喚醒。

$ docker container start 6c438 # 你的 ID 不會和我相同
6c438

這時候回到瀏覽器輸入 http://localhost 又會看到服務重新被啟動了!

關於容器的設定

有些人可能會有疑問,為什麼這次啟動容器不需要加入 --detach 的參數就會自己在背景執行呢?

這是因為 Docker 的容器在第一次啟動的時候會記錄下設定檔,之後只要是重新啟動容器的狀況下,都會根據第一次啟動的設定執行。

這邊可以做個實驗來驗證這個說法,我們在額外啟動一個不背景執行的 nginx 容器:

$ docker container run --publish 8080:80 nginx
2022/08/30 16:15:57 [notice] 1#1: using the "epoll" event method
2022/08/30 16:15:57 [notice] 1#1: nginx/1.23.1
2022/08/30 16:15:57 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/08/30 16:15:57 [notice] 1#1: OS: Linux 5.10.104-linuxkit
2022/08/30 16:15:57 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/30 16:15:57 [notice] 1#1: start worker processes
2022/08/30 16:15:57 [notice] 1#1: start worker process 31
2022/08/30 16:15:57 [notice] 1#1: start worker process 32
2022/08/30 16:15:57 [notice] 1#1: start worker process 33

接著列出目前執行的容器,會看到兩個都是 nginx 的容器在執行:

$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS              NAMES
6c438c6f...  nginx "/do.." 2 min.. Up.... 0.0.0.0:80->80/tcp goofy
74ea9375...  nginx "/do.." 5 sec.. Up..   0.0.0.0:8080->80.. lucid

接著透過 inspect 這個指令來檢查這個容器的設定檔,這邊採用 --format 的參數是為了縮短篇幅,專注在檢查單一的設定。

$ docker container inspect --format '{{ .Config.AttachStdout }}' 6c4
false ( 背景執行 ) #不換行

$ docker container inspect --format '{{ .Config.AttachStdout }}' bf4
true ( 直接印出來 ) #不換行

可以看到兩個容器在對於終端機的畫面輸出設定不一樣,若是啟動了背景執行的功能,等於是不需要輸出終端機的畫面。

反之,若是沒有加入背景執行的參數,則默認為需要輸出終端機的畫面,也就變成一開始直接印出來的樣子。

替容器命名

在剛剛的範例中,我們都是使用 Docker 提供獨一無二的 ID 在對容器進行操作,但這在實務上顯然不太實際,畢竟每一次的 ID 都是不一樣的,很難精準的操控容器。

所以我們也可以透過基本的參數傳入替容器命名,這邊先刪除掉所有的容器:

$ docker container rm --force $(docker container ls -aq)

上面的指令會強行刪除所有容器,這是為了方便練習才使用的指令,平時不要用這個指令去刪除容器,除非你很清楚你在做什麼!

接著把容器命名為 nginx,方面我們之後管理:

$ docker container run --name nginx --publish 80:80 --detach nginx # 不換行
3e489a611df3a09a50dec629824f2d4...

列出容器來看看吧!

$ docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS              NAMES
3e489a61...  nginx "/do.." 2 min.. Up.... 0.0.0.0:80->80/tcp nginx

接著我們把剛剛學到的指令使用在這個容器上,就不需要再使用這個容器的 ID 了,而是他的名字。

$ docker container stop nginx
nginx

結語

今天學習了如何啟動已停止的容器,以及為什麼重新啟動容器不需要加入原先的設定!

並且大家也學會怎麼幫容器命名了,之後就不需要對著一堆亂碼進行操作了!

明天會把剩餘的基礎容器相關指令給解說完,並且最後刪除容器,完整了一個容器的生命週期。

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

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