系列14 docker 数据管理 下(以及进入容器)
一.数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其它容器挂载。
首先创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
[root@k8s-host opt]# docker run -it -v /dbdata --name dbdata ubuntu root@9fbad9a78ac8:/# ls bin boot dbdata dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var root@9fbad9a78ac8:/# cd dbdata root@9fbad9a78ac8:/dbdata#
通过-v 将当前工作目录安装到容器中。 在容器中可以看到创建了一个dbdata文件夹。这个文件夹用来做多个容器之间的共享目录。
注意:上篇中容器数据进行持久化, 数据文件是挂载映射在宿主本机目录,而这里是专门创建一个容器,用来进行数据持久化以及容器之间数据共享。
这里创建容器是基于ubuntu镜像。
然后其它容器中使用--volumes-from来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:
[root@k8s-host /]# docker run -it --volumes-from dbdata --name db1 ubuntu root@58a3f566c64d:/# cd dbdata root@58a3f566c64d:/dbdata# exit exit [root@k8s-host /]# docker run -it --volumes-from dbdata --name db2 ubuntu root@fd7b5462fb65:/# cd dbdata root@fd7b5462fb65:/dbdata# exit exit
上面db1和db2二个容器共享dbdata容器中的dbdata目录。在dbdata容器中创建一个test文件,在db1和db2容器中都能看到,如下所示:
查看容器id, 容器退出了(是后台进程,待分析)
[root@k8s-host /]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fd7b5462fb65 ubuntu "/bin/bash" 4 minutes ago Exited (0) 3 minutes ago db2 58a3f566c64d ubuntu "/bin/bash" 4 minutes ago Exited (0) 4 minutes ago db1 9fbad9a78ac8 ubuntu "/bin/bash" 14 minutes ago Exited (0) 13 minutes ago dbdata
会话窗口A , 启动dbdata容器,创建一个test文件,如下所示:
[root@k8s-host /]# docker start 9fbad9a78ac8 9fbad9a78ac8 [root@k8s-host /]# docker exec -it 9fbad9a78ac8 /bin/bash root@9fbad9a78ac8:/# cd /dbdata root@9fbad9a78ac8:/dbdata# touch test root@9fbad9a78ac8:/dbdata# ls test root@9fbad9a78ac8:/dbdata#
会话窗口B, 启动db2容器,可以查看到共享目录文件,如下所示:
[root@k8s-host ~]# docker start fd7b5462fb65 fd7b5462fb65 [root@k8s-host ~]# docker exec -it fd7b5462fb65 /bin/bash root@fd7b5462fb65:/# cd dbdata root@fd7b5462fb65:/dbdata# ls test root@fd7b5462fb65:/dbdata#