美文网首页
8. Docker 引擎 - 在容器中管理数据

8. Docker 引擎 - 在容器中管理数据

作者: yi_zhe | 来源:发表于2016-12-29 15:04 被阅读0次

数据卷

数据卷是一种特殊设计的目录, 使用Union File System实现, 允许在一个或多个容器间使用.

  • 容器创建时数据卷就会初始化
  • 数据卷可以在容器间共享和重用
  • 对数据卷的修改是直接的
  • 对镜像的升级不会影响数据卷
  • 即使容器被删除了, 数据卷依然存在
  • 挂载数据卷

使用-v参数指定数据卷, 可以连续使用多个-v挂载多个数据卷.
也可以在Dockerfile中使用VOLUME指令创建数据卷

docker run -d -P --name web -v /webapp training/webapp python app.py
  • 定位数据卷在宿主机的位置

在Mounts节中

docker inspect web
...
"Mounts": [
            {
                "Name": "2f39e3bceddf9b5365bc0552c2501a0ead58a67f651d6a312affef2aacf72656",
                "Source": "/var/lib/docker/volumes/2f39e3bceddf9b5365bc0552c2501a0ead58a67f651d6a312affef2aacf72656/_data",
                "Destination": "/webapp",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
...

Source: 指数据卷在宿主机上的位置
Destination: 是对应的容器中的位置
"RW": true 表明这是一个可读写的数据卷

  • 使用宿主机的目录作为数据卷
[root@localhost ~]# docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
02068ef61cc13e50f7fdb249fa8c101245d2918c7589b430f9dddae6bbfd7c75
[root@localhost ~]# docker inspect web
        ...
        "Mounts": [
            {
                "Source": "/src/webapp",
                "Destination": "/webapp",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        ...

container-dir(/webapp) 必须是绝对路径

只读方式挂载

docker run -d -P --name web -v /src/webapp:/webapp:ro training/webapp python app.py
  • 使用共享存储卷作为数据卷
  • 数据卷的标签

SELinux要求每一个挂载到容器的数据卷有一个标签, 否则它将拒绝容器访问数据卷的内容

-z 选项通知Docker多个容器会使用这个数据卷, Docker会为该数据卷分配一个共享内容标签

-Z 选项通知Docker为数据卷分配一个私有的不可共享的标签

  • 使用宿主机文件作为数据卷

-v选项可以仅将一个文件作为数据卷进行挂载
但从Docker 1.1.0以后, 如果使用编辑器编辑文件可能造成inode变更而出现错误, 建议只挂载目录作为数据卷

创建并挂载数据卷容器

如果需要在多个容器间共享持久化数据或者从非持久化容器中访问持久化数据, 最好的解决办法是创建数据卷容器, 然后让其他容器通过数据卷容器中访问数据.

创建一个命名的数据卷容器

docker create -v /dbdata --name dbstore training/postgres /bin/true

在其他容器中使用--volumes-from挂载/dbdata卷

docker run -d --volumes-from dbstore --name db2 training/postgres

可以多次使用--volumes-from挂载不同的数据卷容器

当删除容器时, 如果不显示提供-v参数, 那么它引用的数据卷是不会被删除的, 此时就会出现悬挂数据卷

可以使用以下命令查询

docker volume ls -f dangling=true

使用以下命令删除所有悬挂数据卷

docker volume rm `docker volume ls -f dangling=true -q`

数据卷的备份恢复与迁移

docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

将/dbdata归档为/backup/backup.tar, 而/backup与$(pwd)是数据卷的两个关联目录,也就是当前目录就会生成backup.tar, 也就是/dbdata归档文件

在新的容器中解压数据卷

docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

删除数据卷

使用--rm选项会在容器停止后自动删除数据卷

docker run --rm -v /foo -v awesome:/bar busybox top

共享卷使用提示

容器无法意识到宿主机对数据卷的直接访问, 谨防此现象发生, 容易造成数据损坏

相关文章

  • 8. Docker 引擎 - 在容器中管理数据

    数据卷 数据卷是一种特殊设计的目录, 使用Union File System实现, 允许在一个或多个容器间使用. ...

  • Docker学习(5) Docker引擎

    Docker学习(5) docker引擎 Docker引擎——简介 docker引擎是用来运行和管理容器的。 基于...

  • Docker学习笔记及面试题

    深入浅出Docker学习笔记 Docker引擎 Docker引擎:用来运行和管理容器的核心文件模块化(基于开放容器...

  • Docker 数据管理

    #方式 介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式: (1)数据卷 (2)...

  • 008

    自动化的容器管理 对于运行Docker容器来说,Googler容器引擎是一款强大的集群管理器和编排系统。容器引擎将...

  • 【实践】10.DOCKER之数据管理

    1. 摘要 本文介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:数据卷(Vol...

  • Docker入门-数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind moun...

  • [容器化技术之七] 数据挂载

    一、Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mo...

  • Docker入门-数据挂载

    Docker数据管理 在容器中管理数据主要有两种方式: 1.数据卷(Volumes) 2.挂载主机目录(Bind ...

  • 苹果软件集合(一)

    虚拟机 Docker- 开源的应用容器引擎。 DockStation- 管理 Docker 项目的程序。 Para...

网友评论

      本文标题:8. Docker 引擎 - 在容器中管理数据

      本文链接:https://www.haomeiwen.com/subject/bcqpvttx.html