docker的理念回顾
将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
方式一 :直接使用命令挂载 -v
这里解答一下这不是同步 这是 在磁盘上使用同一个分区物理地址是一个
再来测试!
1、停止容器
2、宿主机修改文件
3、启动容器
4、容器内的数据依旧是同步的
好处:我们以后修改只需要在本地修改即可,容器内会自动同步!
Docker商店
https://hub.docker.com/
思考:MySQL的数据持久化的问题
新建数据库
多了test文件
假设我们把容器删除
发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/自定义的卷名/_data下,
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的具名挂载
如果指定了目录,docker volume ls 是查看不到的。
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下! 通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!
这个卷和外部一定有一个同步的目录!
查看一下卷挂载的路径
测试一下刚才的文件是否同步出去了!
这种方式使用的十分多,因为我们通常会构建自己的镜像! 假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!
命名的容器挂载数据卷!
各个容器之间的数据共享
亲测删除也会同步
多个mysql实现数据共享
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!
dockerfile是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
点击链接跳转到GitHub
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
官方既然可以制作镜像,那我们也可以!
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
Docker镜像逐渐成企业交付的标准,必须要掌握!
步骤:开发、部署、运维缺一不可
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。
Docker容器:容器就是镜像运行起来提供服务。
Docker Hub 中 99%的镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建。
之前的
之后的
变更历史
我们平时拿到一个镜像,可以用 “docker history 镜像id” 研究一下是什么做的
测试CMD
测试ENTRYPOINT
Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!
1、准备镜像文件
准备tomcat 和 jdk 到当前目录,编写好README
2、编写dokerfile
官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定了!
3、构建镜像
运行成功
4、run镜像
5、访问测试
6、发布项目
(由于做了卷挂载,我们直接在本地编写项目就可以发布了!)
参考链接
web.xml
参考链接 https://www.runoob.com/jsp/jsp-syntax.html
index.jsp
发现:项目部署成功,可以直接访问!
我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!
发布到 Docker Hub
1、地址 https://hub.docker.com/
2、确定这个账号可以登录
3、登录
4、提交 push镜像
必须对应账号名正解
发布到 阿里云镜像服务上
看官网 很详细https://cr.console.aliyun.com/repository/
学习之前清空下前面的docker 镜像、容器
测试
问题: docker 是如果处理容器网络访问的?
1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要按照了docker,就会有一个docker0桥接模式,使用的技术是veth-pair技术!
再次测试 ip addr
2 、再启动一个容器测试,发现又多了一对网络
3、我们来测试下tomcat01和tomcat02是否可以ping通
结论:tomcat01和tomcat02公用一个路由器,docker0。
所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用ip。
Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥 docker0
Docker中所有网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)
只要容器删除,对应的网桥一对就没了!
思考一个场景:我们编写了一个微服务,database url=ip: 项目不重启,数据ip换了,我们希望可以处理这个问题,可以通过名字来进行访问容器?
查看tomcat03里面的/etc/hosts发现有tomcat02的配置
--link 本质就是在hosts配置中添加映射
现在使用Docker已经不建议使用--link了!
自定义网络,不适用docker0!
docker0问题:不支持容器名连接访问!
查看所有的docker网络
网络模式
bridge :桥接 docker(默认,自己创建也是用bridge模式)
none :不配置网络,一般不用
host :和所主机共享网络
container :容器网络连通(用得少!局限很大)
自己的网络创建完成
启动两个tomcat,再次查看网络情况
再次查看自己的网络
再次测试ping链接
我们自定义的网络docker当我们维护好了对应的关系,推荐我们平时这样使用网络!
好处:
redis-不同的集群使用不同的网络,保证集群是安全和健康的
mysql-不同的集群使用不同的网络,保证集群是安全和健康的
测试打通tomcat01和mynet
连通之后就是将tomcat01放到mynet下
一个容器两个ip地址
测试成功
tomcat01 已经打通tomcat02 还没打通
结论:
假设要跨网络操作别人,就需要使用docker network connect 连通!
前期准备
先停掉所有容器
设置redis集群网卡及查看
redis节点创建及设置
拉取redis镜像并启动redis节点
以交互模式进入redis节点内
创建redis集群
运行成功界面如下,(主从复制)集群创建成功
创建集群成功后,可以进一步查看集群配置,并进行测试
关于redis集群高可用的简单测试
节点信息
docker搭建redis集群完成! 我们使用docker之后,所有的技术都会慢慢变得简单起来!
实际运行
1、构建SpringBoot项目
配置零星
编写程序
启动测试
http://127.0.0.1:8080/hello
2、打包运行
本地测试
找到文件地址
启动成功
安装插件
这里也可以链接远程仓库
3、编写dockerfile
linux操作
停掉所有容器
新建目录idea
文件传输
上传成功
4、构建镜像
5、发布运行
测试成功
到此这篇docker最新版本(docker 19.03)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdvuejs/15467.html