上篇文章给家讲解了实战练习附带了给大家又聊了下境像讲解的原理,本篇文章主要给家聊一聊关于commit的和容器数据卷相关内容附带一些练习,编写不易:对你有帮助【一键三连,收藏】。
看完掌握以下内容:

  • commit 镜像 原理
  • 了解什么是容器数据卷
  • 如何使用数据卷
  • 附带 MySQL 安装实战
  • 了解具名和匿名挂载在这里插入图片描述

一、commit 镜像

docker	 commit  提交容器成为一个新的副本
# 命令和git 原理类似

docker  commit -m="提交的描述信息" -a="作者" 容器Id 目标镜像名:[TAG]

1.1 实战测试

#启动一个默认的tomcat
[root@192 ~]# docker run -it -p 8080:8080 tomcat
[root@192 ~]# docker exec  -it 3992bb6e4b6c /bin/bash
root@e0ecc9f999de:/usr/local/tomcat#
#发现默认的tomcat是 没有webapps应用的,镜像的原因,阿里云官方镜像默认webapp下是没有文件的!
root@e0ecc9f999de:/usr/local/tomcat# ls webapps

#我自己拷贝进去了基本的文件
root@e0ecc9f999de:/usr/local/tomcat# cp -r webapps.dist/* webapps
# 将我们操作过的容器通过commit提交成一个镜像,我们以后就是使用我们修改过的镜像即

#添加
[root@192 ~]# docker commit -m="添加了webapps中的内容" -a="大数据老哥" 3992bb6e4b6c tomcat02:1.0
sha256:cb56b9aff6aa3a19095f72581d8c7d198a05936e5579946989b31a7a65378d9c

在这里插入图片描述

二、容器数据卷

2.1 什么是容器数据卷

数据?如果数据都子容器 中,那么我们删除容器,数据就会删除 需求:数据而可以持久化

MySQL,容器删除了数据 就丢失了 需求:MySQL数据可以存储在本地!

容器之间可以有一个数据共享技术!Docker 容器总产生的数据,同步到本地

这就是卷技术!目录的挂在,将我们的目录,挂再到Linux上面!

总结: 容器的持久化和同步操作,容器间也是可以数据共享的!

2.2使用数据卷

方式一: 直接使用命令进行挂载

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

#测试
[root@192 home]# docker run -it -v /home/test:/home centos /bin/bash
#启动起来时我们可以通过 docker inspect 容器id 进行查看

docker inspect 容器id
在这里插入图片描述
在这里插入图片描述

2.3 MySQL 安装实战

思考 : MySQL的数据持久问题!

[root@192 test]# docker pull mysql:5.7

#运行容器,需要做数据挂载! 安装启动MySQL需要设置密码(注意)
#官方测试: docker   run -name some-mysql --e MYSQL_ROOT_PASSWORD=my-secret-ps -d mysql;tag
#启动我们自己的
[root@192 test]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7
7b0c338500ada36d84578af1e554c6952344c91936b9e00bcaf9cdb0aea78c34

#创建成功后使用我们的连接工具进行测试

在这里插入图片描述
假设我们将容器删掉
在这里插入图片描述
发现,我们挂载到本地的数据卷依旧没有丢失,这就是现实了容器数据持久化的感功能
在这里插入图片描述

2.4 具名和匿名挂载

#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx  nginx
# 查看所有volume 的情况
[root@192 data]# docker volume  ls
DRIVER              VOLUME NAME
local               1ecd32f7af966023eb385226ec505556f03940ff92c57d030e94c155bb656322
local               6c9d1409db46489bb5310882a7d82d74c402750e781fb1895c35575a746f4f72

#这里发现 ,这种匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!

#具名挂载
[root@192 data]# docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx  nginx
bd6c725b4a822d404ad5021dc4b446b0f742520854644d82c841f37e58e92503
[root@192 data]# docker volume  ls
DRIVER              VOLUME NAME
local               1ecd32f7af966023eb385226ec505556f03940ff92c57d030e94c155bb656322
local               6c9d1409db46489bb5310882a7d82d74c402750e781fb1895c35575a746f4f72
local               juming_nginx
#通过 -v 卷名:容器内路径
#查看一下这个卷
[root@192 data]# docker volume inspect juming_nginx

在这里插入图片描述
所有的docker 容器内的卷,没有指定目录情况下都在/var/lib/docker/volumes/xxx/_date
我们通过具名挂载可以方便的找到我们的一个卷,大数情况下都是用具名挂载

#如何确定是具名挂载 还是匿名挂载,还是指定路径挂载!
-v 容器内路径         #匿名挂载
-v 卷名:容器内路径    #具名挂载
-v 本地路径:容器内路径 # 指定路径挂载
2.4.1 扩展
#通过-v容器内路径: ro rw 改变读写权限
ro  readonly    只读
rw  readwrite   可读可写

#一旦这个设置容器权限,容器对我们挂载出来的内容就限定了
[root@192 data]# docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx:ro  nginx
[root@192 data]# docker run -d -P --name nginx02 -v juming_nginx:/etc/nginx:rw  nginx

# ro 只要看到ro 就说名明这个路径只能通过宿主机来操作,容器内无法进行操作

三、 粉丝福利

         以下内容是博主花费了1个星期的时间总结各大厂商的面试题与拜访大佬总结的内容那个 关注公证号【大数据老哥】回复:Docker基础面试题即可获取。
在这里插入图片描述

关注老哥不迷路公证号搜索【大数据老哥】可以获取可以获取 大数据面经、Java面经、超级棒的开发软件、各种书籍推荐…等(各种资源等着你呦)。

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐