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容器的信息
来源:https://www.cnblogs.com/dukuan/p/7647478.html