2025年Docker容器挂载

Docker容器挂载docker 的理念 将应用和环境打包成一个镜像 通过镜像启动容器运行 问题 在容器中存储的程序数据是需要持久化的 不能容器删了数据也随之删除 比如 安装一个 MySQL 容器 在其中存储了大量数据 结果把容器删了数据也没了 就相当于删库跑路 这是不可能发生的

大家好,我是讯享网,很高兴认识大家。

docker的理念:将应用和环境打包成一个镜像!通过镜像启动容器运行
问题:在容器中存储的程序数据是需要持久化的,不能容器删了数据也随之删除。比如,安装一个MySQL容器,在其中存储了大量数据,结果把容器删了数据也没了,就相当于删库跑路,这是不可能发生的
数据卷技术的引入:我们希望Docker容器产生的数据可以自动同步到本地,这样容器删了数据并不会丢失;同时数据也可在容器之间共享。这就是卷技术,也就是目录的挂载,将容器内的目录挂载到linux上
在这里插入图片描述
讯享网
总结:容器的持久化和同步操作!容器间也可以实现数据共享!

使用数据卷

docker run -it -v 主机目录:容器内目录

测试:

# docker run -it -v /home/test:/home centos /bin/bash 

讯享网

启动之后可以用docker inspect查看容器详细信息,可以看到挂载的信息

讯享网# docker inspect 3e7c547f28bf 

在这里插入图片描述
我们开两个窗口分别进入相对应挂载的目录,在容器内/home目录下新建一个文件,在主机/home/test目录下同步出现该文件
在这里插入图片描述
然后我们去编辑linux系统目录下的cxz.text文件 可以看到容器里面的文件也跟着一起编辑了 这就是挂载的作用
在这里插入图片描述
在这里插入图片描述

实战:安装MySQL

[root@ecs-98457 ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql 72a69066d2fe: Pull complete 93619dbc5b36: Pull complete 99da31dd6142: Pull complete c43d70: Pull complete 37d5d7efb64e: Pull complete acd721: Pull complete d2ba16033dad: Pull complete 0ceb82207cd7: Pull complete 37f2405cae96: Pull complete e2482e017e53: Pull complete 70deed891d42: Pull complete 
讯享网 启动mysql容器 -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 --name 容器名字 [root@ecs-98457 ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql01 mysql:5.7 

启动之后,我们本机连接一下试试,记得打开阿里云服务器安全组设置的3310端口
在这里插入图片描述
我们再新建一个testcxz库
在这里插入图片描述
可以看到在宿主机上的data目录上也新建了testcxz库

具名和匿名挂载

匿名挂载

# 匿名挂载: -v:容器内路径(没有写容器外路径) docker run -d -P --name nginx01 -v /etc/nginx nginx # 查看所有volume的情况 docker volume ls 

具名挂载(常用)

讯享网# 具名挂载: -v 卷名:容器内路径 docker run -d -P --name nginx02 -v specific-nginx:/etc/nginx nginx # 查看所有volume的情况 docker volume ls # 查specific-nginx卷的具体信息 docker volume inspect specific-nginx 

所有docker容器内的卷,没有指定目录情况下都是在/var/lib/docker/volumes/卷名/_data下

在这里插入图片描述

拓展

# 通过 容器内路径:ro/rw 限制读写权限 ro:read only 只读,该路径文件只能通过宿主机来操作,容器内无法操作 rw:read write 可读可写 docker run -d -P --name nginx02 -v specific-nginx:/etc/nginx:ro nginx docker run -d -P --name nginx02 -v specific-nginx:/etc/nginx:rw nginx 

Dockerfile

Dockerfile就是用来构建 docker 镜像的构建文件,就是一段命令脚本,通过这个脚本可以生成一个镜像
通过这个脚本可以生成镜像,镜像是一层一层的,脚本中就是一个个命令,每个命令对应一层
在这里插入图片描述

基础知识:
每个保留关键字(指令)都必须是大写字母
执行顺序从上往下顺序执行
#代表注释
每条指令都会创建并提交一个新的镜像层
在这里插入图片描述
DockerFile是面向开发的,逐渐成为企业交付的标准,以后发布项目就是打包成一个镜像,就需要编写dockerfile文件,十分简单!
dockerFile:构建文件,定义了一切步骤,源代码
dockerImages:通过dockerFile构建生成的镜像,最终发布的运行的产品
docker容器:容器就是镜像运行起来提供服务器

构建步骤:
编写一个dockerfile文件
docker build 构建成一个镜像
docker run 运行镜像
docker push 发布镜像(DockerHub、阿里云镜像仓库)
dockerHub:https://hub.docker.com/

讯享网#home目录下创建docker-test-volume目录 [root@ecs-98457 home]# mkdir docker-test-volume #进入 docker-test-volume 编辑dockerfile2脚本文件 [root@ecs-98457 home]# ls docker-test-volume mysql test test.java [root@ecs-98457 home]# cd docker-test-volume/ [root@ecs-98457 docker-test-volume]# vim dockerfile2 
# 创建一个dockerfile文件 FROM centos VOLUME ["volume01","volume02"] CMD echo "----end----" CMD /bin/bash 

在这里插入图片描述

讯享网#构建自己的容器 [root@ecs-98457 docker-test-volume]# docker build -f dockerfile2 -t cxz/centos:1.0 . 

在这里插入图片描述
下面就显示我们的容器构建成功了
在这里插入图片描述

#我们来通过自己创建的镜像启动容器,查看其中的内容,可以看到生成镜像时自动挂载的数据卷目录volume01和volume02 [root@ecs-98457 /]# docker run -it cxz/centos:1.0 /bin/bash 

在这里插入图片描述
这两个数据卷一定与外部有一个同步的目录!且我们设置的是匿名挂载

讯享网[root@ecs-98457 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b292c cxz/centos:1.0 "/bin/bash" 6 seconds ago Up 6 seconds dazzling_shannon 552f5b1eadf5 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:49154->80/tcp, :::49154->80/tcp nginx03 d96c768cb1d3 nginx "/docker-entrypoint.…" 5 hours ago Up 5 hours 0.0.0.0:49153->80/tcp, :::49153->80/tcp nginx05 7fdc601d7b79 mysql:5.7 "docker-entrypoint.s…" 5 hours ago Up 5 hours 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp mysql01 6ebe0e25bb5f tomcat:9.0 "catalina.sh run" 47 hours ago Up 47 hours 0.0.0.0:3305->8080/tcp, :::3305->8080/tcp tomcat05 5964e6762cca nginx "/docker-entrypoint.…" 47 hours ago Up 47 hours 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx02 [root@ecs-98457 ~]# docker inspect b292c 

在这里插入图片描述

数据卷容器

实现多个容器之间同步数据
在这里插入图片描述
启动3个容器,通过我们自己创建的镜像启动

[root@ecs-98457 ~]# docker run -it --name docker01 cxz/centos:1.0 

在这里插入图片描述

讯享网#Ctrl+P+Q 退出容器 #将docker02和docker01容器实现数据挂载卷数据同步 [root@ecs-98457 ~]# docker run -it --name docker02 --volumes-from docker01 cxz/centos:1.0 

在这里插入图片描述
可以看到数据卷同步过来了
然后我们再docker02容器里面的volume01目录下新建cesi01文件
在这里插入图片描述
我们再进入到docker01容器中的volume01文件 可以看到同样生成了cesi01文件

[root@ecs-98457 /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77e0f cxz/centos:1.0 "/bin/sh -c /bin/bash" 5 minutes ago Up 5 minutes docker02 fcdcd4 cxz/centos:1.0 "/bin/sh -c /bin/bash" 9 minutes ago Up 9 minutes docker01 b292c cxz/centos:1.0 "/bin/bash" 14 minutes ago Up 14 minutes dazzling_shannon 552f5b1eadf5 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:49154->80/tcp, :::49154->80/tcp nginx03 d96c768cb1d3 nginx "/docker-entrypoint.…" 5 hours ago Up 5 hours 0.0.0.0:49153->80/tcp, :::49153->80/tcp nginx05 7fdc601d7b79 mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 6 hours 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp mysql01 6ebe0e25bb5f tomcat:9.0 "catalina.sh run" 47 hours ago Up 47 hours 0.0.0.0:3305->8080/tcp, :::3305->8080/tcp tomcat05 5964e6762cca nginx "/docker-entrypoint.…" 47 hours ago Up 47 hours 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx02 [root@ecs-98457 /]# docker attach fcdcd4 [root@fcdcd4 /]# cd volume01 [root@fcdcd4 volume01]# ls cesi01 [root@fcdcd4 volume01]#  
小讯
上一篇 2025-02-11 17:58
下一篇 2025-02-27 09:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43360.html