一.为什么有挂载?

容器中运行的应用,有可能会产生数据,如果将数据直接存储到容器中,如果删除容器时,容器中的数据会一起被删除,例如:

如果运行的是数据库容器,数据库容器直接保存的数据文件,删除容器时,容易导致数据丢失

为了防止数据丢失,可以把数据保存到宿主机上,这样有便于容器之间的数据共享

二.挂载方式: 单个文件 文件夹 数据卷

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 查看数据卷列表,其指定的挂载文件夹路劲很复杂

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐