在 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)即使容器被删除,宿主机的目录也不会被删除。