docker run 與 docker start 的差別前幾天已經使用過 docker run、docker start 和 docker stop,今天進一步了解 Container 從建立到停止的完整過程。
Container 建立之後並不是永遠都在執行,而是會根據操作進入不同的狀態。
常見的狀態有:
Created → Running → Exited
建立 執行 停止
如果 Container 已經停止,也可以再次啟動:
Exited → Running
因此 Container 不需要每次都重新建立。
這兩個指令看起來都可以讓 Container 執行,但用途其實不同。
docker run hello-world
docker run 會使用 Image 建立一個新的 Container 並執行。
如果重複執行:
docker run hello-world
docker run hello-world
就會建立兩個不同的 Container。
如果 Container 已經存在,只是目前停止,可以使用:
docker start <Container ID>
它不會建立新的 Container,而是重新啟動原本的 Container。
可以簡單記成:
docker run → 建立新的 + 執行
docker start → 啟動已存在的
要讓正在執行的 Container 停止,可以使用:
docker stop <Container ID>
停止後可以透過:
docker ps -a
查看它的狀態。
通常會看到:
STATUS
Exited
代表 Container 還存在,只是目前沒有執行。
除了先 stop 再 start,Docker 也提供:
docker restart <Container ID>
這個指令會重新啟動 Container。
因此目前可以整理出:
| 指令 | 功能 |
|---|---|
docker run |
建立並執行新的 Container |
docker start |
啟動已存在的 Container |
docker stop |
停止 Container |
docker restart |
重新啟動 Container |
docker rm |
刪除 Container |
不是。
這也是剛開始學 Docker 時容易搞混的地方。
停止 Container ≠ 刪除 Container
使用 docker stop 只是讓 Container 停止執行,Container 本身依然存在。
只有使用:
docker rm <Container ID>
才會真正刪除 Container。
docker run 啟動舊 Container → ✅ 已存在的 Container 使用 docker start
docker ps 看不到就以為 Container 不見了 → ✅ 使用 docker ps -a 查看全部 Containerrun 和 start 是一樣的 → ✅ run 會建立新的 Container,start 不會docker ps -a 查看 Container 狀態docker start 啟動 Containerdocker stop 停止 Containerdocker run 與 docker start 的差別今天進一步了解 Container 的生命週期,也終於弄清楚 docker run 和 docker start 的差別。
之前看到這兩個指令都能讓 Container 執行,很容易以為功能差不多,但其實 docker run 會建立新的 Container,而 docker start 是把原本已經存在的 Container 再次啟動。
了解 Container 的建立、執行、停止與刪除後,對 Docker 的操作流程也更加清楚。之後在管理 PostgreSQL Container 時,就比較不會不小心一直建立新的 Container。