一、前言
应用在容器中运行时,会产生一些数据,如日志等,这些数据是存储在容器中的,容器停止后,数据会丢失,为了将数据存储下来,需要用到docker volume,将数据存储在数据卷或数据卷容器中。
在启动容器时,可以使用-v参数指定容器数据的挂载方式,可以是
- 本地目录或文件
- 挂载到远程主机
- 数据卷容器
二、数据卷
1.挂载本地目录
有本地路径:/home/ubuntu/app/data/data1,执行如下命令,创建并启动容器时,指定容器的挂载目录到本地
docker run -tid --name db1 -v /home/ubuntu/app/data/data1/:/data httpd /bin/bash
进入到容器内容,可以看到在根目录下自动生成了data目录,在data目录中生成的app.log文件,在宿主机中的/home/ubuntu/app/data/data1目录下可以访问到
进入db1容器
docker exec -it db1 /bin/bash
查看容器根目录
root@4d941bffc6fe:/usr/local/apache2# ls /data/
app.log app.o
执行docker inspect db1
命令查看容器信息,可以在Mounts节点下看到容器的挂载信息
2.挂载本地文件
执行如下命令,将容器中的/data/app.log文件挂载到宿主机的/home/ubuntu/app/data/data1/app.log下,注意宿主机的文件要存在,否则会当成目录挂载
docker run -tid --name db2 -v /home/ubuntu/app/data/data1/app.log:/data/app.log httpd /bin/bash
执行命令进入到db2容器内,发现在根目录下自动创建了data目录,并在data目录中自动创建了app.log文件
进入db2容器
docker exec -it db2 /bin/bash
查看容器根目录
root@ae578bb64046:/usr/local/apache2# ls /data/
app.log
执行docker inspect db2
命令查看容器信息,可以在Mounts节点下看到容器的挂载信息
3.挂载数据卷
3.1 创建数据卷app_data
docker volume create app_data
3.2 挂载数据卷
docker run -tid --name db4 -v app_data:/data httpd /bin/bash
3.3 查看数据卷信息
docker volume inspect app_data
三、数据卷容器
1.创建一个dbstore的数据卷容器
docker run -tid --name dbstore -v /home/ubuntu/app/data/data1/ httpd
执行docker volume ls
查看数据卷信息,发现docker自动创建了一个数据卷
使用docker inspect dbstore查看容器信息,可以看到原路径使用的就是自动生成的数据卷,目标路径是/home/ubuntu/app/data/data1/
2.挂载数据卷容器
创建一个db3的容器,并使用--volumes-from
参数指定容器卷
docker run -tid --name db3 --volumes-from dbstore httpd /bin/bash
执行docker inspect db3查看容器信息,发现挂载目录使用的就是数据卷容器dbstore的目录