重点思想:
数据卷可以在容器之间共享和重用
对数据卷的修改会立马生效
对数据卷的更新不会影响镜像
卷会一直存在,直到没有容器使用
语法操作:
1.数据卷的使用,类似linux下面的mount操作。
在docker run 启动的时候 可以加-v参数来创建一个容器卷。注意多次创建可以使用-v标记多个数据卷。
[root@docker ~]# docker run -d -P --name web -v /webapp training/webapp echo "hello world"
d7a7b8a6e1a6f21828833ca3fc32fa15110704830ff5d19962728d0e269732b8
2.本地硬盘挂载
[root@docker ~]# docker run -d -P --name web -v /srv/webapp:/opt/webapp/ training/webapp echo "hello world"
b9136b0dbe333ac0bbdae76925db6de4cf272433ec92cf65fd17660bd59f0c19
[root@docker ~]#
3.本地硬盘挂载一个只读的 -ro参数
[root@docker ~]# docker run -d -P --name web -v /srv/webapp:/opt/webapp/:ro training/webapp echo "hello test"
252a677db3a2cfe679c11983b1a27934820a31746ba0cdb49e6c6105cf80623e
[root@docker ~]#
4.挂载一个本地主机文件作为数据卷,建议一般不要挂载一个文件
[root@docker ~]# docker run --rm -it -v ~/.bash_history:/.bash_history centos:6 /bin/bash
[root@a5570545c53f /]#
实战案例: 数据卷容器
场景:
如果用户需要在容器之间共享一些持续更新的数据,最简单的办法就是使用数据卷容器。数据卷容器就是一个普通的容器。专门用它提供数据卷供其他容器挂载使用。
优点:
使用数据卷容器可以让用户在容器之间自由的升级和移动数据卷。
1.创建
[root@docker ~]# mkdir /dbdata
[root@docker ~]# docker run -it -v /dbdata/ --name dbdata centos:6
[root@96513f616aa4 /]# ls
bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var
[root@96513f616aa4 /]#
[root@docker ~]# docker run -it --volumes-from dbdata --name db1 centos:6
[root@98a6cca3fee3 /]# exit
[root@docker ~]# docker run -it --volumes-from dbdata --name db2 centos:6
[root@a85c2ed8df59 /]# exit
[root@docker ~]#
2.启动容器
docker start 96513f616aa4 98a6cca3fee3 a85c2ed8df59
3.查看
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a85c2ed8df59 centos:6 "/bin/bash" 9 minutes ago Up 12 seconds db2
98a6cca3fee3 centos:6 "/bin/bash" 10 minutes ago Up About a minute db1
96513f616aa4 centos:6 "/bin/bash" 11 minutes ago Up 47 seconds dbdata
[root@docker ~]#
4.使用docker-enter 登陆到db1 在dbdata下面创建一个目录uptime
[root@docker ~]# docker-enter 98a6cca3fee3
[root@98a6cca3fee3 /]# cd dbdata/
[root@98a6cca3fee3 dbdata]# ls
[root@98a6cca3fee3 dbdata]# mkdir uptime
[root@98a6cca3fee3 dbdata]# exit
5.在其他两台机器查看
[root@docker ~]# docker-enter 96513f616aa4
[root@96513f616aa4 /]# cd dbdata/
[root@96513f616aa4 dbdata]# ls
uptime
[root@96513f616aa4 dbdata]#
[root@docker ~]# docker-enter a85c2ed8df59
[root@a85c2ed8df59 /]# ll /dbdata/
total 4
drwxr-xr-x 2 root root 4096 Apr 2 09:39 uptime
[root@a85c2ed8df59 /]#
See also