如何理解docker鏡像和容器的區別? run命令怎么使用?

docker鏡像和容器的區別在于鏡像是靜態模板,而容器是運行實例。具體來說:1. 鏡像是只讀的,包含應用所需的所有文件、依賴和配置,相當于打包好的軟件安裝包;2. 容器是基于鏡像創建的可讀寫實例,是實際運行程序的載體;3. 鏡像不會占用運行資源,只有啟動鏡像生成容器后,才會真正運行程序;4. 使用docker run命令可以從鏡像啟動容器,并通過參數如-d后臺運行、-p端口映射、-v目錄掛載、–name指定名稱、-e設置環境變量進行配置;5. 容器停止后數據不會丟失,但若刪除容器則數據可能丟失,可通過-v掛載宿主機目錄實現數據持久化保存。

如何理解docker鏡像和容器的區別? run命令怎么使用?

Docker鏡像和容器的區別其實可以簡單理解成“藍圖”和“房子”的關系。鏡像是一個靜態的模板,包含了運行某個應用所需的所有文件、依賴和配置;而容器則是根據這個鏡像實際運行起來的一個實例,是真正跑起來的程序。

你可以把鏡像想象成一個封裝好的系統快照,它本身不會變化,也不會占用運行資源。只有當你用docker run命令啟動它時,才會生成一個容器,這個容器才是你真正操作的對象


鏡像 vs 容器:它們到底差在哪?

鏡像(Image) 是只讀的,比如你從 Docker Hub 拉下來的 ubuntunginx 這些,都是鏡像。它們是構建容器的基礎。你可以把它理解為一個打包好的軟件安裝包。

容器(Container) 是可讀寫的,并且在運行狀態中。它是由鏡像創建出來的具體實例。比如你運行了一個 nginx 鏡像,就生成了一個 nginx 容器,你可以進到這個容器里執行命令、修改配置、查看日志等。

舉個例子:

  • 你寫了個 python 應用,打成了一個鏡像叫 myapp:latest。這個鏡像無論傳給誰,內容都是一樣的。
  • 別人拿到這個鏡像后,用 docker run 啟動,就會得到一個屬于他自己的容器,他在里面做的修改不會影響原始鏡像。

docker run 命令怎么用?常見參數有哪些?

docker run 是用來從鏡像創建并啟動容器的核心命令。基本格式是:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

幾個常用參數說明一下:

  • -d:后臺運行容器。如果你不加這個,容器會占據當前終端窗口。
  • -p:端口映射。比如 -p 8080:80 表示把宿主機的 8080 端口映射到容器的 80 端口。
  • -v:掛載目錄。例如 -v /host/data:/container/data,這樣容器里的數據會直接使用宿主機上的文件。
  • –name:給容器起個名字,方便后續管理。比如 –name mynginx。
  • -e:設置環境變量,比如 -e mysql_ROOT_PASSWORD=123456。

舉個簡單的例子:

docker run -d -p 80:80 --name mynginx nginx

這條命令的意思就是:以后臺方式運行一個基于 nginx 鏡像的容器,把宿主機的 80 端口映射到容器的 80 端口,并給這個容器命名為 mynginx。


容器停止后,數據會不會丟?

這個問題很常見。默認情況下,容器停止后,你在容器里做的修改還是存在的,只要容器沒有被刪除。但如果你運行完就刪了容器(比如用了 –rm 參數),那數據就沒了。

如果你希望數據持久化保存,可以用 -v 把宿主機的一個目錄掛載到容器里,這樣即使容器刪了,數據還在宿主機上。

比如運行 MySQL 容器時,通常都會把數據目錄掛載出來:

docker run -d --name mysql -v /mydata/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

這樣就算容器出問題或者重建了,數據還在 /mydata/mysql 里。


基本上就這些。鏡像和容器的關系搞清楚之后,再配合 run 的各種參數,就能靈活地管理你的應用了。剛上手的時候可能會覺得概念多,但用幾次就自然明白了。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享