Docker 基礎入門

第五章:資料與網路管理

為什麼需要資料持久化?

容器刪除後,內部的檔案變更也會一併消失。資料庫、上傳檔案等重要資料,需要存放在容器外部。

Bind Mount

docker run -d -v /home/user/data:/var/lib/mydata --name myapp myimage

-v 主機路徑:容器內路徑,主機與容器即時同步,適合開發環境掛載原始碼。

Volume:Docker 管理的資料卷

docker volume create mydata
docker volume ls
docker run -d -v mydata:/var/lib/mydata --name myapp myimage
docker volume inspect mydata

Volume 由 Docker 統一管理實際存放位置,正式環境的資料庫建議優先使用 Volume 而非 bind mount。

網路模式

docker network ls          # 列出網路

常見的網路驅動:

  • bridge(預設):容器擁有獨立 IP,透過 NAT 對外
  • host:容器直接共用主機的網路堆疊,效能較好但失去隔離性
  • none:完全沒有網路

自訂網路:容器互相溝通

docker network create mynet
docker run -d --network mynet --name db postgres
docker run -d --network mynet --name app myapp

同一個自訂網路內的容器可以用容器名稱當作主機名稱互相連線,例如 app 容器連到 db:5432,不需要知道實際 IP。Docker 預設的 bridge 網路不提供這種名稱解析,這也是建議自行建立網路的原因之一。

連接埠對應

docker run -d -p 8080:80 nginx

-p 主機埠:容器埠,讓外部可以透過主機連接埠存取容器內的服務;不加 -p 的容器只能從主機內部用容器 IP 存取。