基于Springboot搭建java项目(三十一)—— 什么是Docker

news2024/11/16 10:16:14

什么是Docker

一、容器技术

1、应用程序的部署问题

​ 还原应用程序部署的场景,开发在开发应用的时候,要自己搭建一套环境,进行本地调试,这时就需要在本地搭建一套JVM,NODE,NGNIX等一些应用程序运行的环境;等环境搭建完成并开发完成之后,就需要搭建一套同样的测试环境,以供测试进行测试,测试过程中发现问题,原来是测试应用的环境和开发环境有出入导致的。

​ 测试完成,要部署线上了,这时候又出线一个问题就是需要再搭建一套正式环境,上线之后还是会因为环境问题导致各种各样的问题。除了花费大量的时间来搭建环境之外,还会因为环境的不同导致各种各样的问题。

​ 重复搭建了三套环境还要迫使程序员转行演员浪费表演才华,典型的浪费时间和效率,于是便有人想到了,为什么不能搭建一套,其他的clone就行了,于是虚拟机就诞生了。再后来,人们想到干脆在别人的环境上运行就好了,于是就诞生了容器技术。

2、虚拟机和容器技术

和一个单纯的应用程序相比,操作系统是很笨重的

虚拟机就是每套虚拟机都要搭载一套很重的操作系统,例如JVM。一台机器上运行几个程序就会消耗多少个操作系统的内存,这些内存是没办法减少的,但是对应用程序的运行是没有什么有用的地方的。还有另一个问题,那就是启动时间问题,我们知道操作系统重启是非常慢的,因为操作系统要从头到尾把该检测的都检测了该加载的都加载上,这个过程非常缓慢,动辄数分钟。

那么有没有一种技术可以让我们获得虚拟机的好处又能克服这些缺点,如是容器技术就诞生了。

3、什么是容器

容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。让我们来看看集装箱的好处:

  • 集装箱之间相互隔离
  • 长期反复使用
  • 快速装载和卸载
  • 规格标准,在港口和船上都可以摆放

回到软件中的容器,其实容器和集装箱在概念上是很相似的。

现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案就是上面提到的虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。
在这里插入图片描述

与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。
在这里插入图片描述

们可以看到容器更加的轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式。容器是一种通用技术,docker只是其中的一种实现。

二、什么是docker

​ docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系

​ 因此我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,程序员再也无法施展表演才华了,不会再有“在我的环境上可以运行”,真正实现“build once, run everywhere”。

​ 此外docker的另一个好处就是快速部署,这是当前互联网公司最常见的一个应用场景,一个原因在于容器启动速度非常快,另一个原因在于只要确保一个容器中的程序正确运行,那么你就能确信无论在生产环境部署多少都能正确运行。

1、如何使用docker

docker中有这样几个概念:

  • dockerfile
  • image
  • container

实际上你可以简单的把image理解为可执行程序,container就是运行起来的进程。

那么写程序需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。

因此我们只需要在dockerfile中指定需要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编译”,也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命令,image运行起来后就是docker container。

后面会结合具体的程序部署进行说明。

2、docker是如何工作的

实际上docker使用了常见的CS架构,也就是client-server模式,docker client负责处理用户输入的各种命令,比如docker build、docker run,真正工作的其实是server,也就是docker demon,值得注意的是,docker client和docker demon可以运行在同一台机器上。

2.1、docker build

当我们写完dockerfile交给docker“编译”时使用这个命令,那么client在接收到请求后转发给docker daemon,接着docker daemon根据dockerfile创建出“可执行程序”image。

2.2、docker run

有了“可执行程序”image后就可以运行程序了,接下来使用命令docker run,docker daemon接收到该命令后找到具体的image,然后加载到内存开始执行,image执行起来就是所谓的container。

2.3、docker pull

docker registry 可以用来存放各种image,公共的可以供任何人下载image的仓库就是docker Hub。这个时候就可以使用docker pull,这个命令的实现也很简单,那就是用户通过docker client发送命令,docker daemon接收到命令后向docker registry发送image下载请求,下载后存放在本地,这样我们就可以使用image了。

2.4、docker的底层实现

docker基于Linux内核提供这样几项功能实现的:

  • NameSpace
    我们知道Linux中的PID、IPC、网络等资源是全局的,而NameSpace机制是一种资源隔离方案,在该机制下这些资源就不再是全局的了,而是属于某个特定的NameSpace,各个NameSpace下的资源互不干扰,这就使得每个NameSpace看上去就像一个独立的操作系统一样,但是只有NameSpace是不够。
  • Control groups
    虽然有了NameSpace技术可以实现资源隔离,但进程还是可以不受控的访问系统资源,比如CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker采用control groups技术(也就是cgroup),有了cgroup就可以控制容器中进程对系统资源的消耗了,比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。

有了这两项技术,容器看起来就真的像是独立的操作系统了。

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

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

相关文章

【大唐杯备考】——5G系统勘察设计(学习笔记)

📖 前言:本期介绍5G系统勘察设计。 目录🕒 1. 概述🕘 1.1 5G网络预规划🕤 1.1.1 5G建网需求确认🕤 1.1.2 4G现网评估🕤 1.1.3 站点规模估算🕤 1.1.4 5G仿真评估🕘 1.2 5G…

新年首捷 | 全息网御入选《CCSIP 2022中国网络安全产业全景图(第五版)》

2023年2月1日,FreeBuf咨询正式发布 《CCSIP(China Cyber Security Panorama)2022 中国网络安全行业全景册(第五版)》,旨在帮助企业更好地了解中国网络安全技术与市场的发展趋势,并为企业安全建设…

Python接口测试实战5(下) - RESTful、Web Service及Mock Server

本节内容REST及RESTful APIWeb ServiceXML解析Mock ServerREST及RESTful APIREST:表述性状态转移或表现层状态转移,“表现”及每个接口地址(URI)都表现为(视为)一个资源对象(文本资源、图片资源、服务资源)…

请问软件设计师、网络工程师、软件评测师还是系统集成项目管理师,哪个好考?

软件设计师、网络工程师、软件评测师还是系统集成项目管理师?这些都是属于软考中级科目,看自己是想从事哪个方向咯。都可以备考啊,毕竟含金量都差不多的! 因为自己备考的是网工,就说说网工的备考如何吧 一、中级网络…

Quest Pro降价和Vive XR Elite之我见

本来没打算写Vive XR Elite,作为HTC首个支持VST透视的VR头显,它也引起了业内关注,尤其是去年10月份Meta Quest Pro重磅发布之后,大家就会看到,领域内的玩家都在朝着VST发力。那为什么现在来写Vive XR Elite呢&#xff…

即时通讯开发之TCP/IP中的TCP 协议概述

终于看到了 TCP 协议,这是 TCP/IP 详解里面最重要也是最精彩的部分,要花大力气来读。前面的 TFTP 和 BOOTP 都是一些简单的协议,就不写笔记了,写起来也没啥东西。 TCP 和 UDP 处在同一层---运输层,但是 TCP 和 UDP 最不同的地方是,TCP 提供了一种可靠的数据传输服务,TCP 是面向…

从零开始手写基于Web Components组件

前言 本文将详细讲解如何用最基本的typescript,vite,less构建基于Web Components的组件,目前已实现Button,Icon,Image,Tabs,Input,Message组件。首先介绍项目的整体架构&#xff0c…

新C++(6):继承那些事儿

"你在酒杯还未干的时间里,收藏这份情谊"一、回顾继承什么是继承?继承是面向对象编程语言的三大特征之一。通过继承机制,面向对象的程序设计可以很大限度地对代码进行复用。它允许程序员在保持原有类特性的基础上进行扩展&#xff0…

scrapy_redis概念作用和流程

scrapy_redis概念作用和流程 学习目标 了解 分布式的概念及特点了解 scarpy_redis的概念了解 scrapy_redis的作用了解 scrapy_redis的工作流程 在前面scrapy框架中我们已经能够使用框架实现爬虫爬取网站数据,如果当前网站的数据比较庞大, 我们就需要使用分布式来更快的爬取数…

制药行业中各种化合物的净化,大孔吸附净化氨基酸

基于吸附功能的聚苯乙烯特种树脂 Tulsimer ADS-600 是一款没有离子官能基的,由交联聚苯乙烯合成的功能强大的吸附型树脂。 Tulsimer ADS-600 主要应用于水溶液中吸附酚及其化合物,氯代烃等含氯物质,表面活性剂,氨基酸&#…

【C++修炼之路】C++入门(中)—— 函数重载和引用

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:C修炼之路 文章目录一、前言二、函数重载1、重载规则2、函数名修饰规则三、引用1、区分2、本质3、特性4、应用a、做参数b、做返回值5、效率比较6、常…

windows安装cnpm

文章目录1 cnpm简介2 cnpm 安装步骤1 cnpm简介 npm下载速度比较慢,可以通过cnpm下载node包 2 cnpm 安装步骤 找到nodejs的安装路径: 使用nvm安装和管理node 直接安装node的方式 直接通过安装包安装node的方式,node会被安装在某个实际目录下…

docker pull nginx

取最新版的 Nginx 镜像 docker pull nginx:latest 查看本地镜像 使用以下命令来查看是否已安装了 nginx: $ docker images 运行容器 安装完成后,我们可以使用以下命令来运行 nginx 容器: $ docker run --name nginx-door -p 8080:80 -…

VS code的使用指南

VS code的使用指南 VS code的安装与下载 VS Code的安装地址的 在下面选择版本的位置进行安装(一般选择Stable进行安装,这个软件是跨系统的安装与设置相关的内容信息)。 插件安装 直接点击这个位置,选择自己需要的相应的插件 这些都是常用的…

软件工程(四)——结构化设计、模块独立性、面向对象设计、软件测试与维护

目录 一、界面设计 二、结构化设计 1.概要设计 2模块独立性 三、面向对象设计 1.面向对象设计的五大基本原则(SOLID)和其他5个原则 2.设计模式 三、软件测试与维护 1.白盒测试和黑盒测试 2.测试的阶段 3.软件维护阶段 四、系统演化策略 一、界面设计 人机界面设计&…

50条必背JAVA知识点(一)

1.编写:编写的Java代码保存在以“.java”结尾的源文件中。 2.编译:使用javac.exe命令编译java源文件,生成字节码文件。格式:javac 源文件名.java 3.运行:使用java.exe命令解释运行字节码文件。格式:java …

深入浅出PyTorch-PyTorch的主要组成模块

目录1.基本配置2.数据读入3.模型构建3.1神经网络的构造3.2神经网络中常见的层常见网络层的构造常见的网络层3.3模型示例卷积神经网络(LeNet)深度卷积神经网络(AlexNet)4.模型初始化5.损失函数6.训练和评估深度学习和机器学习在流程…

python小游戏——塔防小游戏代码开源

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

TCP/IP网络编程——优雅的断开套接字的连接

完整版文章请参考: TCP/IP网络编程完整版文章 文章目录第 7 章 优雅的断开套接字的连接7.1 基于 TCP 的半关闭7.1.1 单方面断开连接带来的问题7.1.2 套接字和流(Stream)7.1.3 针对优雅断开的 shutdown 函数7.1.4 为何要半关闭7.1.5 基于半关闭…

AST入门与反混淆初体验

文章目录1.什么是AST?2. AST反混淆的目的3. babel库安装4. 直观的理解AST5.如何用AST解混淆?思路是什么?6. babel库的学习7. AST反混淆初体验-常量折叠1.什么是AST? ​ 在计算机科学中,抽象语法树(Abstrac…