当前位置: 首页 > news >正文

Docker基础-自定义镜像与容器网络

(一)自定义镜像

在这里插入图片描述

一、本地目录挂载

将来我们自己开发好了java应用并且要用docker去部署,那么就需要去自行制作成镜像,也就是自定义镜像。

假设我们需要往Linux服务器上直接部署java应用而不使用docker,那么在这之前就需要给该环境安装好JRE,也就是JVM运行环境,再把jar包传上去并启动就能部署成功。
但是我们要想该系统拿到我们的jar包就能直接运行,不需要以上步骤,那么只要使用docker并向java项目镜像文件中准备好JRE、jar包就可以了吗?我们都知道java应用之所以能跨系统运行就是因为JRE与JVM,但是JVM最终是要跟操作系统交互的,不同操作系统的JVM也不一样。那么在制作镜像时就需要针对将要部署的Linux发行版来准备JRE以及该系统的全部函数库,那么它就可以不依赖于所部署的操作系统。

在这里插入图片描述
假设现在要基于Ubuntu发行版来制作自定义java镜像

  1. 准备Linux运行环境及函数库
    在这里插入图片描述
  2. 准备JRE并配置环境变量
    在这里插入图片描述
  3. 拷贝jar包
    在这里插入图片描述
  4. 编写运行脚本
    在这里插入图片描述

最终构建好java镜像
在这里插入图片描述

实际上docker是把该应用的不同部分分别打成包最后再合并在一起称为一个完整的包,也将此一份份包称之为层(Layer)

在这里插入图片描述
像这样分层后,假设我们需要针对不同Linux系统去制作java镜像,我们只需要去修改(重新制作)基础镜像层的内容即可,而不需要又去重新制作上层镜像内容,上传镜像也就只需要去上传基础镜像并共享前面几层镜像即可。
这样制作的好处:分层解耦、复用、节省空间。
假设现在我们去拉取一个Redis镜像,就能看到它分为几层来进行下载,已下载的层也不会再重复下载。
在这里插入图片描述

二、Dockerfile

可以看到在docker中把一整个镜像文件分为了多层结构,不过实际上我们并不需要亲手去制作镜像,只需要借助Dockerfile去描述清楚镜像的结构(入口、层、基础镜像),docker就可以自动帮我们完成整个镜像的构建。
在这里插入图片描述

  • From指的是希望镜像从哪开始,可以去指定需要的Linux发行版,docker就会自动去找对应的基础镜像,在此基础上去完成对应操作。
  • Entrypoint指的是入口,比如java应用的入口启动脚本就是java -jar xxx.jar。
    中间层就是要把java、jar包拷入,再来配置环境变量。

(1)案例示范

在这里插入图片描述
像这样的java应用部署过程还是有点繁琐,因为不同java应用都要用到JDK,而不同java应用变化的仅仅是jar包的名称,所以在这整个镜像结构当中将来在部署java应用时真正会变化的就是架构的名称,所以如果每次构建java应用镜像都得重新写这名字就会比较繁琐。
也就是说可以把其他不变的配置,比如JDK、环境变量等,都抽取出来,制作为一个基础镜像。
在这里插入图片描述
在这个openjdk基础镜像当中就已经配置好了所有JDK的环境,以后只需要执行拷贝jar包以及设置入口的命令即可。

三、自定义镜像

在这里插入图片描述
这个" . . . "是Linux系统中表示相对路径的写法。

(1)执行步骤

①准备dockerfile代码

在这里插入图片描述
注意还需要去配置容器内部的时区,若不做的话时区默认就不会为东八区了,而是中时区。这样与国内时间出现差异,那么它的日志及运行都会存在差异

①上传demo.jar包及openjdk基础镜像到虚拟机
  1. 上传demo.jar包
    在这里插入图片描述
  2. 上传openjdk基础镜像并加载该镜像到宿主机当中
    在这里插入图片描述
    在这里插入图片描述
  3. 构建自定义镜像
    在这里插入图片描述
    根据docker images命令就能查看到docker-demo已经成为了本地的镜像文件
    在这里插入图片描述
  4. 创建并运行docker-demo容器
    在这里插入图片描述
    根据docker ps命令就能查看到docker-demo容器的运行状态
    在这里插入图片描述
    根据docker logs命令就能查看到docker-demo容器的运行日志
    在这里插入图片描述
    能够成功进行访问
    在这里插入图片描述

(二)容器网络

一、网络介绍

分别查看mysql与dd容器的网络配置状态

  1. mysql容器
    在这里插入图片描述
    在这里插入图片描述
    还拥有自己的IP地址
  2. dd容器
    在这里插入图片描述
    在这里插入图片描述
    同样拥有自己的IP地址。

我们可以发现这两个IP地址非常相似,只有最后一位不相同,说明这两个容器其实是在同一个网段当中,也就意味着它们之间可以互相访问。但是前面提到docker容器之间都是自己独立的隔离空间,为什么还有相同网段可以互相访问,这是因为他们都有相同的网关"Gateway"。
在这里插入图片描述
在我们安装docker时,它会在虚拟机内创建一张虚拟网卡,名字默认为docker0,它拥有自己的范围地址。并且还会给该网卡创建一个虚拟的网桥,前面mysql与dd容器的IP地址都在docker0的地址范围内,也就说明它们都与docker0通过网桥连上了,也说明它们被分配了一个在该范围内的IP地址。

通过ip addr命令就能查看到当前虚拟机上的网卡。
在这里插入图片描述
可以看到docker0的网卡。

此时进入到dd容器当中再来ping mysq容器的IP地址,发现能成功ping通。
在这里插入图片描述
但是并不能说明该dd服务就能与mysql数据库连接,因为前面说到该IP地址是由docker网桥进行分配的,若该服务重新启动,那么它的IP地址就会改变或被其他服务占用。说明以后在java项目当中若要配置MySQL的地址就不能直接配置为该固定地址。

因此原来这种IP地址连接的方式并不靠谱,也就需要去用到自定义网络了。

二、网络的命令

在这里插入图片描述
自定义网络也就是一个新的网桥,它的网段与原有网卡的网段不同,将来加入该网桥之间的容器就能实现互连了。因为自定义网络中是通过容器名实现互连的,并不需要知道对方的IP地址。

  1. docker network ls查看所有网络
    在这里插入图片描述
    可以看到这里面有一个bridge网络,也就是网桥
  2. docker network create创建网络
    在这里插入图片描述
    再次查看所有网络,就能看到新创建的网络
    在这里插入图片描述
    也能发现虚拟机中多了一个新的网卡
    在这里插入图片描述
  3. 指定容器加入网络
    在这里插入图片描述
    先写网络名再写容器名。
    再通过docker inspect mysql命令来查看Mysql容器中的详细信息。
    发现他成功连上了heima网络:
    在这里插入图片描述
    但是也会发现Mysql容器此时的network有两个,另外一个是默认网桥
    在这里插入图片描述
  • 通过在创建并运行容器的命令中加上 --network 参数来实现容器在创建时的一刻直接加入网络。
    在这里插入图片描述
    再通过docker inspect dd命令来查看dd容器中的详细信息。
    此时会发现它只剩下了一个网络。
    在这里插入图片描述
    因为容器在创建时指定了需要连接的网络那么它就不会再加入默认网络了。

  • 这时就可以在dd容器中轻松连接至mysql容器。
    在这里插入图片描述
    若去访问不在同一网桥中的地址则无法连通。
    在这里插入图片描述

相关文章:

  • 【MySQL】(3) 数据类型
  • 韩国互联网巨头 NAVER 如何借助 StarRocks 实现实时数据洞察
  • 【系统架构设计师】软件架构的重要性
  • STM32——串口通信 UART
  • Gartner:数据安全平台DSP提升数据流转及使用安全
  • 大白话css第九章主要聚焦于前沿技术整合、生态贡献与技术传承
  • 一文了解Conda使用
  • 数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解
  • 《HarmonyOS赋能的智能影像诊断系统安全架构与临床实践》
  • 轻松部署 Stable Diffusion WebUI 并实现局域网共享访问:解决 Conda Python 版本不为 3.10.6 的难题
  • 软件工程与实践(第4版 新形态) 练习与实践1
  • Power Settings Explorer官网下载地址: Windows电源选项设置管理工具
  • 自由学习记录(41)
  • Hive-03之传参、常用函数、explode、lateral view、行专列、列转行、UDF
  • Hive-优化(参数优化篇)
  • 下拉单选(选择后高亮)测试用例
  • llama.cpp: GGUF格式及模型量化参数介绍
  • 数据结构基础之《(19)—矩阵处理》
  • 并发编程(线程池)面试题及原理
  • Matlab实现车牌识别
  • 商城建设开发/seo网站优化公司
  • 专用主机网站建设/如何进行网络推广
  • 图片转文章转wordpress/seo关键词怎么选择
  • 集团微网站建设/信息流推广的竞价机制是
  • cms开发是什么意思/江苏seo外包
  • 做mip网站需要多钱/廊坊关键词快速排名