在 Docker Compose 中,可以通过以下几种方式实现数据持久化:
在 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)即使容器被删除,宿主机的目录也不会被删除。