1、使用容器卷的原因:Docker容器产生的数据,如果不通过commit生成新的镜像,数据会在容器删除后丢失。为了能持久化保存和共享容器的数据,Docker提出了两种管理数据的方式:数据卷和数据卷容器。

 2、数据卷操作

  2.1 增加新数据卷

    docker run -d -v /tmpd/busyboxtest --name busyboxtest busybox

    -v参数会在容器的/tmp/busybox下创建一个新的容器卷

    通过docker inspect命令查看数据卷的位置

    docker inspect busyboxtest | grep volumes
      "/tmp/busyboxtest": "/var/lib/docker/volumes/577784c9e8aa3fba15ebf56ee680b6fea50aafe60bd753b64c3699e461fa3e39/_data"

  2.2 将主机目录挂载为数据卷

    docker run -tid -v /tmp/volumetest:/data:ro --name busyboxtest2 busybox

    将宿主机的/tmp/volumetest以ro的方式挂载在/data下

    

  2.3 创建数据卷容器

    如果需要在容器之间共享一些持续更新的数据,最简单的方式使用数据卷容器

    首先创建一个数据卷容器dbdata并在其中创建一个数据卷挂载到/dbdata
      docker run -it -v /dbdata --name dbdata ubuntu
    然后在其他容器使用--volume-from来挂载dbdata容器中的数据卷
      docker run -it --volume-from dbdata --name db1 ubuntu
      docker run -it --volume-from dbdata --name db2 ubuntu
    此时容器db1和db2挂载同一个数据卷到/dbdata目录,三个容器任何一方写入,其他容器都可以看到
    --volume-from多次指定可以挂载多个数据卷,并且--volume-from参数所挂载数据卷的容器并不需要运行
    如果删除了挂载的容器,数据卷并不会自动删除,如果删除一个数据卷,需要删除最后一个还挂着他的容器使用docker rm -v

  2.4 数据卷备份恢复

  2.4.1 备份:
    备份dbdata数据卷容器内的数据卷
      docker run --volume-from dadata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar.gz /dbdata
    命令解释:使用ubuntu镜像创建一个叫worker的容器,并将本机的当前目录挂载到worker容器的/backup目录。然后使用--volume-from挂载dbdata容器的数据卷,容器启动后将打包/dbdata目录到/backup目录下。同时也存在了本机的当前目录下
  2.4.2 恢复:
    恢复数据到一个容器
    首先创建一个带有数据卷的容器docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
    之后在创建一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器即可
    docker run --volume-from dbdata2 -v $(pwd):/backup busybox tar xf /backup/backup.tar.gz

3、容器互联

 

  首先创建一个数据库容器:
    docker run -d --name db mysql
  创建一个新的web容器,并将它连接到db容器:
    docker run -d -P --name web --link db:db nginx
  此时db容器和web容器建立互联,其中--link db:db是name:alias name是连接容器的名称,alias这个连接的别名
  使用docker ps查看到db和web容器,其中db容器的names列有db和web/db,这表示web容器连接到db容器,允许web容器访问db容器的信息

posted on 2017-10-10 19:48  杜先生的博客  阅读(721)  评论(0编辑  收藏  举报