12docker精髓-容器数据卷、DockerFile、Docker网络
1、容器数据卷
1.1什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失! 需求︰数据可以持久化
MySQL,容器删了,删库跑路! 需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术! Docker容器中产生的数据,同步到本地! 这就是卷技术!
目录的挂载,将我们容器内的目录,挂载到Linux上面!|
容器数据卷就是为了解决容器数据持久化和同步操作,容器间也可以数据共享。
总结一句话:容器的持久化和同步操作! 容器间也是可以数据共享的!
1.2使用数据卷
方式一: 直接使用命令挂载 -v
文件的同步测试
再来测试!
1、停止容器
2、宿主机上修改文件
3、启动容器
4、容器内的数据依旧是同步的!
好处∶我们以后修改只需要在本地修改即可,容器内会自动同步!
1.3实战:安转MySQL
思考:MySQL数据的可持久化问题!
发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能 ! (即使不小心删除了数据库容器,也不会导致,一下子把数据都丢失掉,数据的持久化)
1.4 具名与匿名数据卷
所有的docker容器内的卷,没有指定目录的情况下都是在 我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的
拓展:
1.5初识DockerFile
dockerfile 就是用来构建docker镜像的。命令脚本! 体验一下!
生成镜像:
方式一: commit
方式二: dockerfile
docker build 命令
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
测试一下刚才的文件是否同步出去了!
这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像!
假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!
1.6数据卷容器
容器与容器之间的同步(例:多个MySQL数据同步!)
子容器挂载父容器
不同容器之间
结论∶
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!
容器之间的数据卷是采用“拷贝备份的机制”,即使俩个子容器 –volume-from 父容器,这个父容器被干掉了,俩个子容器之间也可以正常的使用数据卷共享数据。
2、DockerFile
dockerfile是用来构建dokcer镜像的文件!
命令参数脚本!
构建步骤︰
1、编写一个dockerfile文件
2、 docker build构建成为一个镜像
3、docker run运行镜像
4、docker push发布镜像(DockerHub、阿里云镜像仓库!)
2.1查看官方是怎么做的 ?
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!官方既然可以制作镜像,那我们也可以!
2.2 DockerFile介绍
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
Docker镜像逐渐成为企业交付的标准,必须要掌握 !
步骤: 开发,部署,运维…..缺一不可!
DockerFile:构建文件,定义了一切的步骤,源代码
Dockerlmages : 通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器︰ 容器就是镜像运行起来提供服务器
2.3 DockerFile指令
以前的话我们就是使用别人的,现在我们知道了这些指令后,我们来练习自己写一个镜像!
实战测试:centos镜像
Docker Hub中 99% 镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建
创建一个自己的centos
对比:之前的原生的centos
我们增加之后的镜像
history 查看一个镜像的历史,构建过程
我们平时拿到一个镜像,可以研究一下它是怎么做的了?,github
CMD 和 ENTRYPOINT 的区别
CMD 和 ENTRYPOINT 的区别
测试CMD
测试ENTRYPOINT
Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!
2.4DockerFile的构建过程
实战测试:tomcat镜像
下载包:
[apache-tomcat-9.0.22.tar.gz](Index of /dist/tomcat/tomcat-9/v9.0.22/bin (apache.org))
jdk-8u11-linux-x64.tar.gz
1、准备镜像文件tomcat压缩包,jdk的压缩包!
2、编写dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要 -f 指定了!
3、构建镜像
4、运行测试
5、访问测试
发布自己的镜像
Docker Hub
1、注册 Docker Hub 账号:Docker Hub
2、登录Docker Hub
docker tag 新建tag名称镜像
docker push 发布自己的镜像
阿里云镜像服务上
1、登录阿里云
2、选择容器镜像服务
3、申请个人实例
4、创建命名空间
5、创建镜像仓库
6、根据说明实现
将镜像推送到Registry
小结
3、Docker 网络
理解Docker0
学习docker网络时,清空所有环境,方便我们理解Docker网络
三个网络
解决 ip add 命令不存在问题
原理:
1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡dockerO桥接模式,使用的技术是 技术!
1、再次测试 ip addr
2、再启动一个容器,发现又多了一对网卡~
结论: tomcat01和tomcat02是公用的一个路由器,docker0。
所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP
小结
Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥 docker0。
Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高!(内网传递文件!)
只要容器删除,网桥也跟着删除!
— link
(高可用)
思考一个场景,我们编写了一个微服务,database url=ip:, 项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以名字来进行访问容器 ?
其实这个tomcat03就是在本地配置了tomcat02的配置?
本质探究: –link 就是我们在hosts配置中增加了一个 的
我们现在玩Docker 已经不建议使用 –link了 ! 自定义网络! 不适用docker0 !
docker0 问题: 他不支持容器名连接访问!
自定义网络
容器互联: 多台物理主机之间的容器互联(暴露容器到真实网络中),包括 –link,自定义网络等都是
查看所有的docker网络
网络模式:
- bridge模式(桥接模式,默认,自己创建也使用桥接模式)
- host模式(仅主机模式,与宿主机共享网络)
- none 不配置网络模式
- container模式:容器网络连接!(用的少,局限大!了解即可)
测试: 创建bridge模式网络
docker network create 创建网络
我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络!
好处︰
redis – 不同的集群使用不同的网络,保证集群是安全和健康的
mysql – 不同的集群使用不同的网络,保证集群是安全和健康的
网络联通
docker network inspect mynet
结论︰假设要跨网络操作别人,就需要使用 docker network connect连通 ! 。。。。
实战:Redis集群布署
shell 脚本
Navicat for Premium 9.0.2激活
我们使用了docker之后,所有的技术都会慢慢的变得简单起来!
今天的文章
Navicat for Premium 9.0.2激活(12docker精髓-容器数据卷、DockerFile、Docker网络)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/121631.html