0%

Docker数据卷

数据卷

使用Docker过程中,需要对数据进行持久化,或在多个容器间共享数据,需要容器的数据管理操作

  • 数据管理主要有两种方式:
    • 数据卷(Data Volumes):容器数据直接映射到本地主机环境
    • 数据卷容器(Data Volume Containers):使用特定容器维护数据卷

数据卷

1
2
3
4
5
 # e.g.: training/webapp镜像创建web容器,并创建数据卷挂载到容器的/webapp目录
# 创建数据卷,-P是映射本地临时端口
# 挂在主机目录为数据卷: from/path:to/path
# 指定数据卷读写权限: ro/rw
$ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

数据卷容器

创建数据卷容器dbdata,创建数据卷挂载到容器dbdata

1
$ docker run -it -v /dbdata --name dbdata ubuntu

其他容器对其进行挂载,之后三方任何一方修改各方都可见

1
2
$ docker run -it --volumes-from dbdata --name db1 ubuntu
$ docker run -it --volumes-from dbdata --name db2 ubuntu

删除最后挂载容器需要使用docker rm -v同时删除关联容器


使用数据卷容器迁移数据

备份

1
$ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

恢复

首先创建容器dbdata2

1
$ docker run -v /dbupdate --name dbdata2 ubuntu ubuntu /bin/bash

新容器挂载dbdata2,然后untar解压备份文件到所挂载的容器卷中

1
$ docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

端口映射和容器互联

端口映射

1
2
3
4
# 可以-p映射多端口-p po -p po
# 可以指定ip:po:po
# 还可以本地随机端口ip::po
# 还可以指定udp端口ip:po:po/udp

容器互联

创建新容器

1
$ docker run -d --name db training/postgres

创建新容器连接到db容器

1
2
 # --link name:alias
$ docker run -d -P --name web --link db:db traning/webapp