一.为什么有挂载?
容器中运行的应用,有可能会产生数据,如果将数据直接存储到容器中,如果删除容器时,容器中的数据会一起被删除,例如:
如果运行的是数据库容器,数据库容器直接保存的数据文件,删除容器时,容易导致数据丢失
为了防止数据丢失,可以把数据保存到宿主机上,这样有便于容器之间的数据共享
二.挂载方式: 单个文件 文件夹 数据卷
1.单个文件
命令如下:
docker run -d --name cat4 \
--restart = always \
-v ~/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat:8
这段代码一共完成了:
1.创建了一个新的容器,运行的是tomcat8,当宿主机重启时,会自动启动该容器,给容器命名为cat4,方便输入查看日志命令,-d为后台运行
2.用文件挂载的方式,将宿主机的server.xml文件挂载到容器的/usr/local/tomcat/conf/server.xml文件,可以理解为/usr/local/tomcat/conf/server.xml相当于一个快捷方式
可通过命令:docker inspect cat4 查看容器详情
2.文件夹
命令如下:
docker run -d --name mysql \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mariadb
这段代码一共完成了:
1.创建了一个新容器,运行mariadb,命名为mysql,将文件夹的挂载方式,将宿主机的/data/mysql文件夹挂载到容器的/var/lib/mysql路径中,-v会自动创建宿主机文件夹,-e配置环境变量
2.其中/var/lib/mysql和MYSQL_ROOT_PASSWORD=root视镜像源而定
创建完成之后,同样可以运行docker inspect mysql 查看容器详情
此外,还可以运行命令: ll /data/mysql 查看挂载源文件,此时是有数据的
还可以运行命令: docker rm -f mysql 删除容器
删除容器后继续运行命令: ll /data/mysql,结果是一致的,因为文件是存在宿主机上的
3.数据卷
数据卷的本质上还是文件夹,docker可以自动指定一个挂载文件夹,但是路径比较深,而且还惨杂随机字符,所以可以创建一个数据卷,同时给其取一个别名,在使用路径时,就可以用别名表示完整文件夹路径,命令如下:
docker volume create my-vol 创建数据卷,名称为my-vol
docker volume ls 查看数据卷列表
docker inspect my-vol 查看数据卷详情,其中"/var/lib/docker/volumes/my-vol/_data"为存储数据的真实目录
准备好数据卷后,创建容器,与挂载文件夹的方式类似
docker run -d --name mysql1\
-v my-vol:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mariadb
手动指定my-vol挂载到/var/lib/mysql路径,删除容器时,数据卷不会删除,如需删除容器时连同数据卷一起删除,可以在删除命令后加 --volumes,如:docker rm -f mysql --volumes
如果没有手动指定挂载,会自动新建数据卷挂载,如下代码
docker run -d --name mysql2\
-e MYSQL_ROOT_PASSWORD=root \
mariadb
同样可以通过命令docker volume ls 查看数据卷列表,其指定的挂载文件夹路劲很复杂
版权归原作者 顾家明ime 所有, 如有侵权,请联系我们删除。