在 Docker Compose 中的多個容器之間共享卷
一、概述
Docker 容器是隔離的環境。然而,容器有時需要持久化和共享數據。當第二個容器需要訪問共享緩存或使用數據庫數據時,可能會發生這種情況。我們可能還需要對用戶生成的數據進行備份或操作。
在這個簡短的教程中,我們將通過一個使用 Docker Compose 的示例來了解如何在 Docker 容器之間共享數據。
2. 使用 Docker 存儲持久化和共享數據
當容器運行時,所有文件都會獲得一個可寫空間。但是,一旦我們停止容器,它們就不再存在。
如果我們需要保存數據, Docker使用具有持久性和內存選項的存儲。
存儲文件還可以提高性能,因為它直接寫入主機文件系統,而不是使用容器的可寫層。
2.1。 Docker 卷
讓我們快速瀏覽一下 Docker Volumes。例如,讓我們運行一個帶有命名卷的 Nginx 容器。
首先,讓我們創建我們的捲:
docker volume create --name volume-data
然後,讓我們運行我們的容器:
docker run -d -v volume-data:/data --name nginx-test nginx:latest
在這種情況下,Docker 將掛載在容器的/data
文件夾中。如果容器在要掛載的路徑中有文件或目錄,它也會將目錄的內容複製到卷中。
我們還可以查看用於持久存儲的bind mounts
。
2.2.與卷共享數據
當多個容器需要訪問共享數據時,它們可以使用相同的捲運行。
例如,讓我們啟動我們的 Web 應用程序:
docker run -d -v volume-data:/usr/src/app/public --name our-web-app web-app:latest
Docker 默認創建一個local
捲。但是,我們可以使用卷驅動器在多台機器之間共享數據。
最後,Docker 也有–volumes-from
來鏈接正在運行的容器之間的捲。它可能有助於數據共享或更一般的備份使用。
3. 與 Docker Compose 共享數據
我們已經了解瞭如何使用 Docker 創建卷。 Docker Compose 還支持 YAML 模板定義中的[volumes](https://docs.docker.com/compose/compose-file/compose-file-v3/#volume-configuration-reference)
關鍵字。
讓我們創建一個docker-compose.yml
來運行 Nginx 容器和我們的 Web 應用程序共享相同的捲:
services:
nginx:
container_name: nginx
build: ./nginx/
volumes:
- shared-volume:/usr/src/app
web-app:
container_name: web-app
env_file: .env
volumes:
- shared-volume:/usr/src/app/public
environment:
- NODE_ENV=production
volumes:
shared-volume:
同樣,在 Docker Compose 中,默認driver
將是local
。我們還可以指定用於此卷的驅動程序:
volumes:
db:
driver: some-driver
我們可能還需要使用 Docker Compose 外部的捲:
volumes:
data:
external: true
name: shared-data
4。結論
在本文中,我們了解瞭如何使用卷共享 Docker 容器的數據。我們還通過使用 Docker Compose 的簡單示例看到了相同的概念。