目录
挂载的目的
docker挂载的目的主要是为了让容器运行期间产生的一些文件永久性的保存在宿主机上(避免容器停止之后找不到容器运行期间产生的文件)。下面以docker运行tomcat容器为案例介绍。
目录挂载
为了查看容器方便,我们先把已经存在的容器全部强制删除掉。
强制删除容器
容器即使在运行当中也可以使用强制删除命令将容器删除。
docker rm -f 容器id
指定目录挂载
在容器运行的时候,可以在宿主机中指定一个目录或文件与容器中的目录或文件进行一个挂载。
上面就是启动一个tomcat容器并起了一个别名为cat1,并将宿主机的 /usr/app 目录与容器中的 /opt/app 目录进行一个挂载,注意:即使宿主机不存在 /usr/app 这个目录,-v 指令也会主动创建目录。
进入容器的挂载目录创建文件
进入容器的命令:
docker exec -it cat1 bash
在容器的挂载目录下创建文件:
touch /opt/app/f1.txt
退出容器并在宿主机修改文件
退出容器命令:exit
切换到宿主机的挂载目录并编辑文件:
cd /usr/app
vim f1.txt
进入文件后键入 i 即可编辑文件,编辑完之后先按 Esc,然后键入 :wq 保存并退出,如果键入 :q! 是不保存的退出。
可以看到,我们的 f1.txt 文件本来是在容器里面创建的,可是现在可以在宿主机里面查看到这个文件,这就是挂载。
进入容器的挂载目录查看并修改文件
重新进入容器并查看一下我们挂载目录下的文件,因为我们刚刚只是编辑了宿主机里面的文件,容器里面的文件我们没有碰它,我们现在看一下容器里面的文件内容有没有变化。
可以看到,在宿主机里面对挂载目录进行操作都会直接影响到容器里面的挂载目录,反之也是一样的 。
在容器里面编辑文件内容的命令:
echo 1234565 > /opt/app/f2.txt
1234565是 f2.txt 文件的内容。
数据卷挂载
其实数据卷的挂载与目录挂载类似,只不过目录挂载是自己定义宿主机要挂载的目录,而数据卷挂载是在创建数据卷的时候会在宿主机默认创建一个目录来进行挂载。
创建数据卷
创建数据卷命令:
docker volume create my-vol
创建一个名为 my-vol 的数据卷。
查看存在的数据卷
可以使用下面命令查看已经存在的数据卷:
docker volume ls
查看指定数据卷的详细信息
使用如下命令可以查看指定数据卷的详细信息,在这些信息里面可以看到宿主机的挂载目录。
docker inspect my-vol
运行容器并实现数据卷的挂载
运行容器并实现数据卷的挂载:
docker run -d --name cat2 -v my-vol:/opt/app tomcat
my-vol 就代表了宿主机的挂载目录,/opt/app 就是容器的挂载目录。
进入容器并创建文件
容器运行之后就可以进入容器了。
进入容器并创建文件:
docker exec -it cat2 touch /opt/app/f2.txt
在容器的挂载目录下创建了一个名为 f2.txt 的文件,这条命令会在创建完文件之后自动退出容器。