假如你想把数据库集成到docker中,那么为了使容器数据持久化,你需要利用dockre volume。

你可以先创建一个volume然后再挂载,也可以直接不创建直接挂载容器目录。你可以指定容器目录挂载到宿主机特定目录,也可以不指定,默认存放在/var/lib/docker/volumes。

docker version:17.12.1-ce

1、先创建,再指定

docker volume create test;

docker run -it --name haha1 -v test:/opt/haha1 centos /bin/bash;

docker inspect haha1 | grep volumes;

2、直接指定宿主机特定目录,容器目录和宿主机目录不存在会默认创建

docker run -it --name haha2 -v /opt/haha2:/opt/haha2 centos /bin/bash;

设置容器目录为只读模式

docker run -it --name haha3 -v /opt/haha3:/opt/haha3:ro centos /bin/bash;

3、创建volume容器,多个容器共享数据

创建volume container: 

docker run -it -v /var/volume1 -v /var/volume2 --name volume_container centos /bin/bash;

容器1:  

docker run -it --rm --volumes-from volume_container --name App_Container1 centos /bin/bash;

容器2:  

docker run -it --rm --volumes-from volume_container --name App_Container2 centos /bin/bash;

只要有容器在使用volume或者volume container,不论容器是否被删除,volume中的数据都不会丢失。

4、在当前目录备份容器数据

docker run --rm --volumes-from volume container -v $(pwd):/backup centos tar cvf /backup/backup.tar 

/var/volume1 /var/volume2;

其实容器数据既然已经映射到磁盘,那么直接在操作系统物理备份就好了,官方这样做不知道有什么意义?

5、恢复容器数据

docker run --rm --volumes-from volume_container -v $(pwd):/backup centos tar xvf /backup/backup.tar -C /;

或者在宿主机直接移动数据到volume锁映射的目录。

6、删除volume

volume 只有在下列情况下才能被删除:

1)docker rm -v删除容器时添加了-v选项

2)docker run --rm运行容器时添加了--rm选项

否则,会在/var/lib/docker/volumes目录中遗留很多不明目录。

可以使用下面方式找出,然后删除_data目录下的数据文件:

docker inspect huihui|grep /var/lib/docker/volumes 

              

docker挂载volume很简单,就不多说了!


oracle交流qq群:27877619

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐