docker持久化數(shù)據(jù)的方案
-
基于本地文件系統(tǒng)的Volume号胚。 可以在執(zhí)行
docker create
或docker run
時,通過-v
參數(shù)將主機的目錄作為容器的數(shù)據(jù)卷浸遗。這部分功能便是基于本地文件系統(tǒng)的volume管理猫胁。 - 基于plugin的Volume,支持第三方的存儲方案跛锌,比如:NAS弃秆,aws。
Volume的類型
- 受管理的Data Volume髓帽,由docker后臺自動創(chuàng)建菠赚。不管加不加
-v
選項,docker都會創(chuàng)建一個data volume郑藏,位置是固定的衡查,名字通過隨機字符串命名的, - 綁定掛載的Volume -- Bind Mounting译秦,具體掛載位置可以由用戶指定峡捡。
Data Volume
命令:docker run -d --name mysql1 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
通過
-v
參數(shù)指定,mysql-data:/var/lib/mysql
表示docker會創(chuàng)建一個名為mysql-data
的volume筑悴,然后掛載至容器內(nèi)部的/var/lib/mysql
目錄们拙。
列出所有volume:
[root@openstack-load1 ~]# docker volume ls
DRIVER VOLUME NAME
local mysql-data
查看名為mysql-data
的Volume的詳細信息
[root@openstack-load1 ~]# docker volume inspect mysql-data
[
{
"CreatedAt": "2018-05-09T00:09:36+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql-data/_data",
"Name": "mysql-data",
"Options": null,
"Scope": "local"
}
]
基中
"Mountpoint": "/var/lib/docker/volumes/mysql-data/_data"
表示mysql-data
對應(yīng)的本地存儲路徑。
Volume管理命令:
[root@openstack-load1 ~]# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Options:
Commands:
create 創(chuàng)建一個存儲卷
inspect 顯示一個或多個卷的詳細信息
ls 列出所有卷
prune 刪除所有未使用的本地卷
rm 刪除一個或多個卷
Run 'docker volume COMMAND --help' for more information on a command.
Bind Mounting
命令:docker run -d --name nginx1 -v $(pwd):/usr/share/nginx/html -p 8880:80 cgy/nginx:v2 nginx -g "daemon off;"
$(pwd)
表示當前目錄阁吝,通過-v
選項將當前目錄掛載至容器內(nèi)的/usr/share/nginx/html
目錄砚婆。
docker-compose中使用
version: "3.2"
services:
web:
image: nginx:alpine
volumes:
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
db:
image: postgres:latest
volumes:
- "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
- "dbdata:/var/lib/postgresql/data"
volumes:
mydata:
dbdata: