docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。而且,如果不进行数据卷挂载的话,对容器配置文件进行修改需要进入容器内部修改,十分麻烦,我们对容器为了能够保存数据并且方便修改,在docker容器中使用卷。
卷的设计目的就是数据的持久化,完全于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
两个作用:
- 持久化数据
- 共享数据
一个特点:
- 即时生效
- 卷的更新不影响镜像
- 即使容器停止或被删除,卷默认也一致存在
数据卷操作的基本语法:
docker volume [COMMAND]
语法解析:docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作
文档中提供的COMMAND有5个:
创建数据卷
docker volume create 数据卷名称
# 示例:
docker volume create html
查看数据卷创建数据卷
docker volume ls
查看数据卷详细信息
docker volume inspect 数据卷名称
# 示例:
docker volume inspect html
删除全部未使用的数据卷
docker volume prune 数据卷名称
# 示例:
docker volume prune html
删除一个或多个指定的数据卷
docker volume rm 数据卷名称
# 示例:
docker volume rm html
容器挂载数据卷时,数据卷可以存在也可以不存在,数据卷不存在的话,会自动去创建数据卷。
docker run \
--name mn \
-v html:/root/html \
-p 8080:80
nginx \
这里的-v就是挂载数据卷的命令:
以修改Nginx
主页内容为例:
# 解释部分
# \是命令换行符
docker run \ # 创建并运行一个容器
--name myNginx \ # 给容器个名字叫myNginx
-v html:/usr/share/nginx/html \ # 把html数据卷挂载到容器内的/usr/share/nginx/html这个目录中
-p 80:80 \ # 把宿主机的80端口映射到容器内的80端口
-d \ # 后台运行
nginx \; # 需要启动的镜像名称
# 可直接复制部分
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
第二步:查看数据卷所在的位置
docker volume inspect html # 查看html数据卷,指向的宿主机中的具体文件夹位置
第三步:在宿主机中进入html
数据卷所在位置,并修改HTML内容
# 进入Mountpoint指向的目录
cd /var/lib/docker/volumes/html/_data
# 修改Nginx主页的index.html文件
vi index.html
注意点:
覆盖关系:
- 数据卷中没有文件时,会将容器目录中的文件挂载到数据卷中。
- 数据卷中有文件时,会将数据卷中的文件覆盖容器目录中的文件。
磁盘挂载的语法:
# 语法方面其实也就只有-v 参数有区别,其它都是没区别的
# 注意:宿主机文件挂载容器内文件的操作,使用数据卷是做不到的
-v [宿主机目录]:[容器内目录]
-v [宿主机文件]:[容器内文件]
第一步、拉取镜像
docker pull mysql:5.7.25
myLocal.cnf# -p 创建多级目录
mkdir -p /mysql/data # 创建存放mysql数据的目录
mkdir -p /mysql/conf # 创建存放mysql配置文件的目录
cd /mysql/conf # 进入/mysql/conf目录
touch myLocal.cnf # 创建本地mysql配置文件,这个文件名称可以自定义
第三步:进行挂载
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /mysql/conf/myLocal.cnf:/etc/mysql/conf.d \
-v /mysql/data:/var/lib/musql \
-d \
mysql:5.7.25
docker run \ # 创建并运行一个容器 --name mysql \ # 给容器个名字叫mysql -e MYSQL_ROOT_PASSWORD=root \ # 设置mysql登录,密码为root -p 3306:3306 # 把宿主机3306端口和容器的3306端口相关联 -v /mysql/conf/myLocal.cnf:/etc/mysql/conf.d \ # 宿主myLocal.cnf文件挂载到容器conf.d文件 -v /mysql/data:/var/lib/musql \ # 宿主data目录挂载到容器mysql目录 -d \ # 后台运行 mysql:5.7.25 # 需要启动的镜像名称
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务