docker最新版本(docker 19.03)

docker最新版本(docker 19.03)docker 的理念回顾 将应用和环境打包成一个镜像 数据 如果数据都在容器中 那么我们容器删除 数据就会丢失 需求 数据可以持久化 MySQL 容器删除了 删库跑路 需求 MySQL 数据可以存储在本地 容器之间可以有一个数据共享的技术 Docker 容器中产生的数据 同步到本地 这就是卷技术 目录的挂载 将我们容器内的目录 挂载到 Linux 上面 总结一句话 容器的持久化和同步操作

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



docker的理念回顾

将应用和环境打包成一个镜像!

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

MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!

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

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本
讯享网

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

方式一 :直接使用命令挂载 -v

docker 19升级到23版本 docker172.17.0.1_nginx_02

docker 19升级到23版本 docker172.17.0.1_docker_03

这里解答一下这不是同步 这是 在磁盘上使用同一个分区物理地址是一个

再来测试!

1、停止容器

2、宿主机修改文件

3、启动容器

4、容器内的数据依旧是同步的

docker 19升级到23版本 docker172.17.0.1_linux_04

好处:我们以后修改只需要在本地修改即可,容器内会自动同步!

Docker商店

https://hub.docker.com/

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

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_05

新建数据库

docker 19升级到23版本 docker172.17.0.1_nginx_06

多了test文件

假设我们把容器删除

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_07

发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。

docker 19升级到23版本 docker172.17.0.1_nginx_08

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

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的具名挂载

如果指定了目录,docker volume ls 是查看不到的。

Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下! 通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!

docker 19升级到23版本 docker172.17.0.1_docker_09

docker 19升级到23版本 docker172.17.0.1_docker_10

这个卷和外部一定有一个同步的目录!

docker 19升级到23版本 docker172.17.0.1_nginx_11

查看一下卷挂载的路径

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_12

测试一下刚才的文件是否同步出去了!

这种方式使用的十分多,因为我们通常会构建自己的镜像! 假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!

命名的容器挂载数据卷!

docker 19升级到23版本 docker172.17.0.1_linux_13

docker 19升级到23版本 docker172.17.0.1_docker_14

docker 19升级到23版本 docker172.17.0.1_mysql_15

各个容器之间的数据共享

亲测删除也会同步

docker 19升级到23版本 docker172.17.0.1_mysql_16

多个mysql实现数据共享

容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、 编写一个dockerfile文件

2、 docker build 构建称为一个镜像

3、 docker run运行镜像

4、 docker push发布镜像(DockerHub 、阿里云仓库)

docker 19升级到23版本 docker172.17.0.1_nginx_17

点击链接跳转到GitHub

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_18

很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!

官方既然可以制作镜像,那我们也可以!

基础知识:

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!

docker 19升级到23版本 docker172.17.0.1_mysql_19

Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成企业交付的标准,必须要掌握!

步骤:开发、部署、运维缺一不可

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。

Docker容器:容器就是镜像运行起来提供服务。

docker 19升级到23版本 docker172.17.0.1_mysql_20

Docker Hub 中 99%的镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建。

docker 19升级到23版本 docker172.17.0.1_nginx_21

之前的

docker 19升级到23版本 docker172.17.0.1_mysql_22

之后的

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_23

变更历史

我们平时拿到一个镜像,可以用 “docker history 镜像id” 研究一下是什么做的

测试CMD

测试ENTRYPOINT

Dockerfile中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!

1、准备镜像文件

准备tomcat 和 jdk 到当前目录,编写好README

docker 19升级到23版本 docker172.17.0.1_linux_24

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_25

2、编写dokerfile

官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定了!

docker 19升级到23版本 docker172.17.0.1_nginx_26

3、构建镜像

运行成功

4、run镜像

5、访问测试

docker 19升级到23版本 docker172.17.0.1_linux_27

6、发布项目

(由于做了卷挂载,我们直接在本地编写项目就可以发布了!)

参考链接

web.xml

参考链接 https://www.runoob.com/jsp/jsp-syntax.html

index.jsp

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_28

发现:项目部署成功,可以直接访问!

我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!

发布到 Docker Hub

1、地址 https://hub.docker.com/

2、确定这个账号可以登录

3、登录

docker 19升级到23版本 docker172.17.0.1_mysql_29

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_30

docker 19升级到23版本 docker172.17.0.1_mysql_31

4、提交 push镜像

docker 19升级到23版本 docker172.17.0.1_mysql_32

必须对应账号名正解

docker 19升级到23版本 docker172.17.0.1_mysql_33

发布到 阿里云镜像服务上

看官网 很详细https://cr.console.aliyun.com/repository/

docker 19升级到23版本 docker172.17.0.1_linux_34

学习之前清空下前面的docker 镜像、容器

测试

docker 19升级到23版本 docker172.17.0.1_linux_35

问题: docker 是如果处理容器网络访问的?

docker 19升级到23版本 docker172.17.0.1_docker_36

1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要按照了docker,就会有一个docker0桥接模式,使用的技术是veth-pair技术!

再次测试 ip addr

docker 19升级到23版本 docker172.17.0.1_docker_37

2 、再启动一个容器测试,发现又多了一对网络

docker 19升级到23版本 docker172.17.0.1_docker_38

3、我们来测试下tomcat01和tomcat02是否可以ping通

docker 19升级到23版本 docker172.17.0.1_nginx_39

结论:tomcat01和tomcat02公用一个路由器,docker0。

所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用ip。

Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥 docker0

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_40

Docker中所有网络接口都是虚拟的,虚拟的转发效率高(内网传递文件)

只要容器删除,对应的网桥一对就没了!

思考一个场景:我们编写了一个微服务,database url=ip: 项目不重启,数据ip换了,我们希望可以处理这个问题,可以通过名字来进行访问容器?

docker 19升级到23版本 docker172.17.0.1_docker_41

docker 19升级到23版本 docker172.17.0.1_docker_41

docker 19升级到23版本 docker172.17.0.1_docker_43

docker 19升级到23版本 docker172.17.0.1_mysql_44

查看tomcat03里面的/etc/hosts发现有tomcat02的配置

–link 本质就是在hosts配置中添加映射

现在使用Docker已经不建议使用–link了!

自定义网络,不适用docker0!

docker0问题:不支持容器名连接访问!

查看所有的docker网络

网络模式

bridge :桥接 docker(默认,自己创建也是用bridge模式)

none :不配置网络,一般不用

host :和所主机共享网络

container :容器网络连通(用得少!局限很大)

自己的网络创建完成

启动两个tomcat,再次查看网络情况

再次查看自己的网络

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_45

再次测试ping链接

我们自定义的网络docker当我们维护好了对应的关系,推荐我们平时这样使用网络!

好处:

redis-不同的集群使用不同的网络,保证集群是安全和健康的

mysql-不同的集群使用不同的网络,保证集群是安全和健康的

docker 19升级到23版本 docker172.17.0.1_mysql_46

docker 19升级到23版本 docker172.17.0.1_docker_47

docker 19升级到23版本 docker172.17.0.1_nginx_48

测试打通tomcat01和mynet

docker 19升级到23版本 docker172.17.0.1_mysql_49

连通之后就是将tomcat01放到mynet下

一个容器两个ip地址

docker 19升级到23版本 docker172.17.0.1_docker_47

测试成功

tomcat01 已经打通tomcat02 还没打通

结论:

假设要跨网络操作别人,就需要使用docker network connect 连通!

docker 19升级到23版本 docker172.17.0.1_nginx_51

前期准备

先停掉所有容器

设置redis集群网卡及查看

redis节点创建及设置

拉取redis镜像并启动redis节点

以交互模式进入redis节点内

创建redis集群

运行成功界面如下,(主从复制)集群创建成功

创建集群成功后,可以进一步查看集群配置,并进行测试

关于redis集群高可用的简单测试

节点信息

docker搭建redis集群完成! 我们使用docker之后,所有的技术都会慢慢变得简单起来!

实际运行

1、构建SpringBoot项目

docker 19升级到23版本 docker172.17.0.1_docker_52

docker 19升级到23版本 docker172.17.0.1_mysql_53

docker 19升级到23版本 docker172.17.0.1_mysql_54

docker 19升级到23版本 docker172.17.0.1_mysql_55

配置零星

docker 19升级到23版本 docker172.17.0.1_mysql_56

docker 19升级到23版本 docker172.17.0.1_nginx_57

docker 19升级到23版本 docker172.17.0.1_mysql_58

编写程序

docker 19升级到23版本 docker172.17.0.1_nginx_59

启动测试

http://127.0.0.1:8080/hello

docker 19升级到23版本 docker172.17.0.1_mysql_60

2、打包运行

docker 19升级到23版本 docker172.17.0.1_mysql_61

docker 19升级到23版本 docker172.17.0.1_docker_62

本地测试

docker 19升级到23版本 docker172.17.0.1_mysql_63

找到文件地址

docker 19升级到23版本 docker172.17.0.1_linux_64

docker 19升级到23版本 docker172.17.0.1_nginx_65

docker 19升级到23版本 docker172.17.0.1_nginx_66

启动成功

docker 19升级到23版本 docker172.17.0.1_linux_67

安装插件

docker 19升级到23版本 docker172.17.0.1_docker_68

这里也可以链接远程仓库

docker 19升级到23版本 docker172.17.0.1_mysql_69

docker 19升级到23版本 docker172.17.0.1_linux_70

3、编写dockerfile

docker 19升级到23版本 docker172.17.0.1_linux_71

linux操作

停掉所有容器

新建目录idea

文件传输

docker 19升级到23版本 docker172.17.0.1_linux_72

上传成功

4、构建镜像

5、发布运行

测试成功

docker 19升级到23版本 docker172.17.0.1_docker 19升级到23版本_73

小讯
上一篇 2025-04-17 23:33
下一篇 2025-06-02 08:58

相关推荐

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