docker容器化技术

docker容器化技术

1.docker概述

docker简单的说就是一个沙盒技术,主要目的是为了将应用运行在其中与外界隔离,方便这个沙盒可以被转移到其它宿主机器。docker虚拟化的是java app、 依赖包、环境信息、操作系统软件。先有docker后有容器化技术,docker基于linux containers。

2.docker优势

docker体积小,启动速度快。一次构建处处运行。

1.应用部署环境污染问题

1.依赖关系复杂,兼容性问题

mq,mysql,node.js 环境都不一样会有兼容性问题。

2.开发测试生产环境差异问题

开发测试都没有问题生产环境却有问题。可以把环境信息都打包到容器内部无论到哪环境都是一样的。

2.解决操作系统环境差异

不再依赖于操作系统不论是ubuntu还是centos、windows都是调用系统内核再调用操作计算机硬件。有了docker可以把服务器简单的看做是系统应用+内核+计算机硬件。docker把java app、 依赖包、环境信息、操作系统软件全部封装到了系统应用中。每次启动服务都启动一个docker-shim进程由containerd统一管理。

3.应用隔离

一台服务器可以有多个docker容器,每个docker各自占用资源互相不影响,隔离性好,不会一个应用占满整个服务器。

4.Libcontainer

自研了libcontainer摆脱了linuxcontariner 可以跨平台使用 linux windows都可以使用

3.docker架构设计

docker build/docker pull/docker run – docker deaon – registry – images – containers

1.docker 组件

1.Docker Client

是用户界面,它支持用户与 Docker Daemon 之间通信

2.Docker Daemon Docker

最核心的后台进程,运行于主机上,处理服务请求

3.Docker registry

是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份

4.Docker Containers

负责应用程序的运行,包括操作系统、用户添加的文件以及元数据

5.Docker Images

是一个只读模板,用来运行Docker容器

6.DockerFile

是文件指令集,用来说明如何自动创建Docker镜像

2.docker基本概念

1.镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含任何动态数据,其内容在构建之后也不会被改变。

1.分层存储

镜像只是一个虚拟的概念,并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。比如微服务A和微服务B他们代码不同其他运行环境都相同运行环境无需重复下载

2.union fs

联合文件系统,镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

2.容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等。

3.仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

4.docker应用

1.配置文件提取

因为我们在开发中需要频繁修改 application.yml 文件我们将配置项配置到 pom 文件中打包时自动打到配置文件,这样可以用一个 pom 文件控制多个不同的服务的配置文件项的修改。

在子项目的pom文件的 build 构建配置中使用 true 配置,这样就可以将我们的总pom中的配置编译进配置文件了,在子项目的 application.yml 配置文件中注意使用 @xxx@ 占位符来配置编译占位配置

2.镜像操作

1.镜像查找

可以去docker hub查找官方镜像

docker search

2.镜像拉取

docker pull

拉取过慢可以去阿里云找一下进行加速,配置镜像加速

3.查看镜像

docker image

4.启动容器

docker run -d -p 3306:3306

d:宿主机端口号

p:容器端口号

通过宿主机端口号访问容器端口号

停止容器:docker stop + 容器id

删除容器:docker rm + 容器id

下次启动 docker start + 容器id

暂停容器:docker pause + 容器id

恢复容器:docker unpause + 容器id

5.查看容器

docker ps -a

6.查看容器日志

docker logs -f + 容器id

7.创建Dockerfile(原始构建方式)

vi Dockerfile

1.FROM

定制的镜像都是基于 FROM 的镜像,这里的 openjdk 就是定制需要的基础镜像,后续操作都是基于openjdk

2VOLUME:

挂载一个数据卷,这里因为没有名称,所以是一个默认的数据卷

3.ADD:

添加一层镜像到当前镜像,这里就是添加SpringBootTest镜像到当前层,并改名app.jar

4.EXPOSE:

暴漏端口,因为我们的自己的端口是8003,所以我们暴漏8003

5.ENTRYPOINT:

设定容器启动时第一个运行的命令及其参数,这里就是容器以启动就执行 java -jar/app.jar

8.打包镜像

docker bulid -t 仓库名/镜像名:tag

打包镜像后docker image查看镜像 然后docker run这个镜像就可以了启动了。

9.日志挂载优化

1.存储卷

Docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部加一个读写层如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件版本仍然存在,只是已经被读写层中该文件的副本所隐藏,即写时复制。这样效率过低为了避免写时复制需要添加存储卷

卷是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某个目录绑定

Docker管理宿主机文件系统的一部分,默认在/var/lib/docker/volumes 目录中

2.bind挂载共享存储

Bind mounts模式和Volumes非常相似,不同点在于Bind mounts模式是将宿主机上的任意文件或文件夹挂载到容器,而Volumes本质上是将Docker服务管理的一块区域挂载到容器。

运行容器时 -v 指定挂载路径。

Volumes是docker文件系统管理。bind是服务器自己管理。

5.docker网络

1.docker网络原理

docker使用linux桥接(依据OSI网络模型的链路层的地址,对网络数据包进行转发)在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关,因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信

1.docker网络模式
1.host模式

比较少用服务器的端口很珍贵

2.container模式

比较少用,借助容器的网络

3.none模式

不需要网络连接

4.overlay模式

跨主机网络,多台主机跨主机通信的时候使用这个网络模式通信

5.bridge模式(默认)

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。

2.服务器上的docker网络优化

比如我们一台服务器上有docker构建的微服务与docker构建的mysql常规docker通信:

docker中微服务网卡 – 宿主机网卡 – docker中mysql网卡

使用桥接后:

docker中微服务网卡 – docker中mysql网卡

创建网桥:docker network create demo

docker启动nacos接入网桥 docker run --network+创建的网桥

docker启动mysql接入网桥 docker run --network+创建的网桥

配置文件配置的时候直接配置名字就可以docker会帮我们填充ip地址

宿主机中的多个docker内部互通,宿主机对外暴露端口。

生产中高并发的组件尽量不要用docker来安装。

6.docker集群管理

1.docker仓库

主要用来管理和发布容器。没有docker镜像仓库,多台服务器我们一个个复制有了仓库后打包完成后直接push上传仓库 其他服务器使用直接pull就ok了。

docker login 输入用户名密码登录docker仓库 没有用户需要去dockerhub官网注册。

2.docker私服Registry

docker registry 就是管理 docker 镜像的服务。没有图形化管理界面

3.harbor仓库管理

harbor相对于registry就强大很多,它有图形化管理界面基于角色的访问控制,日志审计并提供基本运维操作。基于registry2次包装。推荐这种仓库管理方式。

4.docker打包jib

Jib插件可以不写Dockerfile就能实现Docker打包可以直接集成到 Maven 和 Gradle中 只需要将插件添加到构建中,就可以立即将Java 应用程序容器化。

5.任务编排工具

编排指的是容器的集群化和调度,也泛指的是容器管理,负责管理容器化应用和组件任务

1.docker-compose

适合单机环境的容器编排,不太适合集群

1.项目

由一组关联的应用容器组成的一个完整业务单元

2.服务

指的就是docker容器

3.使用

在项目文件夹下创建 docker-compose.yml文件

在文件中声明配置包括需要哪些docker容器组件、桥接网络名称,以及组件的版本名称、容器名称、桥接网络、日志挂载目录、环境配置信息。

1.启动

docker-compose up -d

2.查看

容器信息:docker-compose ps

日志:docker-compose logs -f + 容器id

3.停止

docker-compose down 结束容器并删除存储卷

docker-compose stop 只结束容器

2.K8S

大规模集群的容器编排,比较主流。服务器多的时候用

3.openshit

收费,在K8S基础上增加了一些功能

4.docker swarm

docker官方的集群化编排工具。使docker-compose支持集群化部署。安装docker就具备docker swam 如果服务器比较少用这个就可以。

1.swarm节点
1.manager节点

管理节点docker swarm至少需要一个manager节点主要用来管理集群

2.work节点

启动容器的节点

3.docker-compose.yml文件

通过在一个YAML文件中来定义一个stack里面多个service。

2.图形化管理工具portainer

用Portainer来管理swarm集群。

3.网络

使用swarm的networks要配置为overlay

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升测试效率,轻松并行运行测试——探秘Pytest插件pytest-xdist

在软件开发中,测试是确保代码质量的重要一环。然而,随着项目规模的增大,测试用例的数量也随之增多,测试的执行时间可能成为一个瓶颈。为了解决这个问题,Pytest提供了丰富的插件生态系统,其中 pytest-xdist …

[C#]调用tesseact-ocr的traineddata模型进行ocr文字识别

【框架地址】 https://github.com/charlesw/tesseract 【算法介绍】 Tesseract OCR是一个开源的光学字符识别引擎,它可以将图像中的文字转换成可编辑和可搜索的文本格式。Tesseract由惠普实验室于1985年开始开发,并在2005年被Google收购后成为了开源项…

api网关-kong

选型 api网关相关功能 服务的路由 动态路由负载均衡 服务发现 限流 熔断、降级 流量管理 黑白名单反爬策略 控制台:通过清晰的UI界面对网关集群进行各项配置。 集群管理:Goku网关节点是无状态的,配置信息自动同步,支持节点水…

7.云原生之jenkins集成SonarQube

1. 私有云实战之基础环境搭建 2. 云原生实战之kubesphere搭建 3.云原生之kubesphere运维 4. 云原生之kubesphere基础服务搭建 5.云原生安全之kubesphere应用网关配置域名TLS证书 6.云原生之DevOps和CICD 7.云原生之jenkins集成SonarQube 8.云原生存储之Ceph集群 文章目录 搭建 …

JS 深克隆(深克隆不考虑函数)深拷贝deepClone

js封装方法实现深拷贝 1.新建名为tools.js的文件,添加内容: export const deepClone (obj, result) > { var result result || {}; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { if (typeof obj[prop] object && obj[prop] …

二维0-1背包问题

题目来源:8. 二维费用的背包问题 - AcWing题库 题目: 有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。 每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。 求解将哪些物品装入背包,可…

SpringSecurity 密码加密登录

SpringSecurity 密码加密登录 1.前端所需文件2.后端所用工具类3.登录代码4.灵魂一问 1.前端所需文件 import JSEncrypt from jsencrypt/bin/jsencrypt.min// 密钥对生成 http://web.chacuo.net/netrsakeypairconst publicKey MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqz…

BGP公认任意属性——MED(二)

BGP公认任意属性有两个,分别是:Local-preference 和 MED,本期介绍MED。 点赞关注,持续更新!!! MED 特点 MED (多出口鉴别器),也称为BGP COST,…

usb静电防护芯片选择

方案1 USBLC6-2SC6 优缺点 优点:进出使用不同的焊盘,如果没有焊接好信号必定不能通过。有效的避免了虚焊导致故障。 缺点:不能省略,调试时也不能省略。 原理图 参考价格 参考来源 USB切换方案,多电脑共用USB方案…

高级路由学习试题

文章目录 高级路由学习试题一.高级路由题目答案 二.OSPF 相关答案 三.基础知识答案 高级路由学习试题 一.高级路由题目 1.以下属于ITOIP特性的有() A、智能 B、开放 C、融合 D、标准 2.层级化网络模型将网络划分为() A、汇…

“掌握家庭收支,轻松规划未来,记录日常开销的利器!“

你是否经常对家庭开支感到困惑,不知道钱都花在哪里了?或者想要更好地规划家庭的财务,却无从下手?现在,有了我们的收支明细工具,这些问题都将迎刃而解! 第一步:首先我们要进入晨曦记账…

Mxnet导出onnx模型

Mxnet导出onnx模型 requirements mxnet1.9.1python3.8onnxsim 导出模型 import os import mxnet as mx import numpy as np import onnx from onnx import checker from mxnet.onnx import export_model from mxnet.gluon.model_zoo import vision from onnxsim import sim…

java 常⽤的线程池模式CachedThreadPool

线程池中的线程数量是可变的。 当提交一个新任务时,如果线程池中的线程都在运行,新任务就会被放入任务队列中等待执行。 如果线程池中的所有线程都在运行,且任务队列已满,那么线程池会创建新的线程来处理新任务。 使用场景&#x…

遗传算法 (Genetic Algorithm, GA) 详解与实现

文章目录 基本思想基本概念基本操作算法基本步骤代码实现参考文献基本思想 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则,它最初由美国Michigan大学的J. Holland教授于1967年提出。 遗传算法是从代表问题…

02.构建和使用的大型语言模型(LLMs)阶段

我们为什么要建立自己的LLMs?LLM从头开始编码是了解其机制和局限性的绝佳练习。此外,它还为我们提供了必要的知识,可以保留或微调现有的开源LLM架构,以适应我们自己的特定领域的数据集或任务。 研究表明,在建模性能方面,定制(LLMs为特定任务或领域量身定制的)可以胜过…

如何在 Flutter 中使用 Tree Shaking 功能优化应用程序的性能

Tree Shaking 是 Fl​​utter 中的一项关键优化技术,可最大限度地减少应用程序 JavaScript 包的大小。它有助于减少应用程序的初始加载时间,提高运行时性能,并确保您的应用程序仅包含实际需要的代码。在本文中,我们将探讨什么是 T…

#华为nova12#系列带你解锁新年第一拍

这一次,华为nova 12 Ultra及nova 12 Pro为可变光圈赋予全新定义,让你无论是记录日常生活,自拍、还是捕捉萌宠、大合影、拍风景或者夜景光源都能轻松驾驭。 智能物理可变光圈让每一个场景都有适宜的光圈选择。可变光圈,全方位出圈…

民安智库(第三方公众满意度调查):物业满意度调查问卷调查实施中,关键问题不容忽视

在开展物业满意度调查问卷调查时,实施过程中需要注意一些关键问题,以确保调查的可靠性和有效性。本文将分享民安智库在物业满意度调查方面的实践经验,探讨在问卷调查实施中需要注意的问题。 在实施问卷调查之前,要明确调查的目标…

Python流程控制语句

目录 一、分支结构 (一)单分支语句 (二)双分支语句 (三)多分支语句 (四)嵌套的分支语句 二、循环结构 循环结构概述 (一)for循环 (二&am…

产品经理须知 | 电商API接口接入知识小结

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…