Docker Compose 数据持久化

在 Docker Compose 中,可以通过以下几种方式实现数据持久化:

使用卷(Volumes)

在 Docker Compose 中,卷(volumes)用于实现数据的持久化存储和在容器之间共享数据。

在 docker-compose.yml 文件中,可以使用 volumes 关键字来定义卷。例如:

version: '3'

services:
  # 定义mysql服务
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
      MYSQL_DATABASE: demo_db
    volumes:
      - /var/data/mysql:/var/lib/mysql
    networks:
      - mynetwork
  # 定义nginx服务
  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - mysql
    volumes:
      - /var/data/nginx_config:/etc/nginx/conf.d
      # 使用数据卷
      - myvolume:/usr/share/nginx/html
    networks:
      - mynetwork

networks:
  mynetwork:
    driver: bridge

# 定义数据卷
volumes:
  myvolume:

上面定义了一个名为 myvolume 的卷,并将其挂载到 nginx 服务的 /usr/share/nginx/html 目录。

当我们使用 docker-compose up -d 启动服务后,可使用 docker volume ls 查看数据卷:

root@hxstrive:~# docker volume ls
DRIVER    VOLUME NAME
local     4dd47a986c4f454b3687e9c7a22023ed4b34a9661bad3698de031988d9fbc472
local     6d74c9784f01caf4753278cd4fde72644282768538819d2867620c82f7617ea5
local     7d0027b8c80b5171fa64c8f0ce26634bed14aa921d78b66b42d422a09f3368c1
local     3136a16b31d8b1173c53d26d9b92c90b71582e8673cc4a2a464eb2ae4c77a3e3
local     c7feaf981739979c906c07938f3cfcb4c7ba0d3ee0ae08eafe104359e5529dee
local     eb7379c6df64fe830d2ee83fd8b8228e653028a98d9934bc7425234d02d60909
local     ec651aa19eb3cc7441cef7963610dc4cb0bf74f0ec4df5ae26104cc20f9e12df
local     f7f6172c178eda0698d1311d9832d163459a2cbbd7c4d6019dd7f91f237d7f4e
local     root_myvolume 这就是我们创建的数据卷

卷的作用

(1)卷可以将数据存储在宿主机上,而不是容器内部。这样,即使容器被删除或重新创建,数据仍然可以保留。

(2)卷可以在多个容器之间共享数据,方便不同服务之间的数据交换。

挂载宿主机目录

可以将宿主机上的一个目录挂载到容器中,实现数据持久化。例如:

version: '3'

services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 12345678
      MYSQL_DATABASE: demo_db
    volumes:
      # 挂载目录
      - /var/data/mysql:/var/lib/mysql
    networks:
      - mynetwork

上面示例,将宿主机上的 /var/data/mysql 目录挂载到容器中的 /var/lib/mysql 目录。

注意:

(1)确保宿主机上的目录具有适当的权限,以便容器可以读写数据。

(2)如果宿主机目录中的数据发生变化,容器中的数据也会相应地更新。

(3)即使容器被删除,宿主机的目录也不会被删除。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号