当前位置:网站首页 > Vue.js开发 > 正文

docker最新版本(docker 19.03)



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

到此这篇docker最新版本(docker 19.03)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue项目反编译(vue打包的代码反编译)2025-08-24 23:00:04
  • map转jsonobject对象 gson(map转jsonstring)2025-08-24 23:00:04
  • map 转 json(map转json)2025-08-24 23:00:04
  • 登陆ip为192.168.0.1 登陆密码admin(登陆ip地址192.168.31.1)2025-08-24 23:00:04
  • vue2父子组件传值(vue3.0父子组件传值)2025-08-24 23:00:04
  • 安装node环境 vue npm(vue node modules安装)2025-08-24 23:00:04
  • vue2生命周期函数(vue生命周期函数详解)2025-08-24 23:00:04
  • 前端跨域解决方案vue(前端跨域解决方案cors设置星号)2025-08-24 23:00:04
  • list转换成string(List转换成json字符串)2025-08-24 23:00:04
  • vuex安装 报错(vuecli安装不成功)2025-08-24 23:00:04
  • 全屏图片