一、概述
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)
关键词。
让我们创建一个来运行 Nginx 容器和我们的 Web 应用程序共享相同的卷:docker-compose.yml
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 的简单示例看到了相同的概念。
0 评论