欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker持久化存储

程序员文章站 2022-05-11 23:38:16
...

docker持久化数据的方案

  • 基于本地文件系统的Volume。 可以在执行docker createdocker run 时,通过-v参数将主机的目录作为容器的数据卷。这部分功能便是基于本地文件系统的volume管理。
  • 基于plugin的Volume,支持第三方的存储方案,比如:NAS,aws。

Volume的类型

  • 受管理的Data Volume,由docker后台自动创建。不管加不加-v选项,docker都会创建一个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参数指定,mysql-data:/var/lib/mysql表示docker会创建一个名为mysql-data的volume,然后挂载至容器内部的/var/lib/mysql目录。

列出所有volume:

[[email protected] ~]# docker volume ls
DRIVER              VOLUME NAME
local               mysql-data

查看名为mysql-data的Volume的详细信息

[[email protected] ~]# 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对应的本地存储路径。

Volume管理命令:

[[email protected] ~]# docker volume --help

Usage:  docker volume COMMAND

Manage volumes

Options:


Commands:
  create      创建一个存储卷
  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选项将当前目录挂载至容器内的/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: