【Docker】一文趣谈Docker

 
《RabbitMQ》《Spring》《SpringMVC》《项目实战》
文章目录
- 前言
 - 一、Docker是什么
 - Docker历史
 
- 二、Docker为什么会出现
 - 三、Docker能做什么
 - 总结
 
前言
学习一门技术首先就要了解这个技术的是做什么的,为什么会出现,才能更好的学习与理解。
一、Docker是什么
- Docker是一个容器。
 - 容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是很了不起的一项发明,大大降低了海洋贸易等运输成本。让我们来看看集装箱的好处: 
- 集装箱内物品之间相互隔离
 - 长期反复使用
 - 快速装载和卸载
 - 规格标准,在港口和船上都可以摆放,极大利用空间
 
 - 而Docker就如同一个集装箱,大家可以看到Docker的标志就是鲸鱼上背着集装箱。

 
Docker历史
- 2010年,几个搞IT的年轻人,就在美国成立了一家公司dotcloud做一些pass的云计算服务,就是一个关于Linux服务器有关的容器技术,他们将自己的技术(容器化技术)命名为Docker。
 - Docker刚诞生时没有让行业很关注,所以Docker就是不赚钱了,怎么办,要饿死了嘛,no no,创始人就决定将他开源(2013年),源代码公开出去。
 - 哪曾想,果然免费的最好用啊,越来越多人发现Docker的优点,火了!问:怎么算火?答:每个月都有版本更新。
 - Docker1.0发布(2014年4月9日)。
 - 问:为什么这么火。答:很轻巧。问:具体说说。答:别急,继续往下看。
 
二、Docker为什么会出现
模拟场景一:产品软件研发——windows开发服务器(Ubuntu/CentOs)上线
运维:小李过来,你这写的什么软件,怎么运行不了。
 程序员小李:什么!我在我的电脑上明明可以运行!!!
对于运维和开发人员来说,这就是典型的开发上线两套环境,研发人员写好后,上线的环境又要重新去配置,毕竟windows和linux还是有区别的。环境配置十分麻烦,每个机器都要部署环境(如集群Redis、ES、Hadoop等)真是费时费力,打工人大喊真实住了,狠狠共情。
那么问题来了:发布一个项目(jar+redis+MySQL+jdk+ES等等)能不能带上环境进行打包?
这不,Docker来了,新技术的出现就是有问题要解决。
对比与类比:
- 传统: 
- 开发人员windows开发jar,运维来发布到Linux。
 - java——apk——发布(应用商店)——张三使用apk包安装即可用。
 
 - 有了Docker: 
- 开发打包部署上线,一套流程全搞定。
 - java——jar(环境)——打包项目带上环境(镜像)——(Docker仓库:商店)——下载发布的镜像直接运行。
 
 
模拟场景二:水果,肉类一起运输
问:一个船一起运输,串味怎么办?
 答:使用集装箱,把水果放一个集装箱,肉类放一个,放在船上直接运走。
同样Docker就是一种集装箱技术,打包装箱,每个箱子都是互相隔离的,所以一个Docker容器出现问题也不要怕其他的容器会受到影响。
 
VMware为例
VMware大家应该很熟悉,虚拟机技术。我们经常在虚拟机装系统(如Ubuntu)每个镜像就是一个模仿真实操作系统,所以一个镜像就要一二十个G,多装几个的话,内存吃不消啊。而现在有了Docker,一个系统内可以装入多个容器,很小的空间也能压榨出来作为一个集装箱,甚至现在能装入十几个容器等。
- 虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!(很笨重)
 - 虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
 - vmware:隔离,需要开启多个虚拟机!linux centos原生镜像(一个电脑!)需要几个G内存空间,开启需要几分钟!
 - docker:隔离,镜像(最核心的环境4m内存)十分的小巧,运行镜像就可以了!小巧!几个M或KB的内存空间,秒级启动!
 
三、Docker能做什么
讲到这里,大家应该了解了,我们做一下总结。
之前的虚拟机技术
- 资源占用十分多
 - 冗余步骤多
 - 启动很慢!
 
容器化技术
- 容器化技术不是模拟的一个完整的操作系统
 - 比较Docker和虚拟机技术的不同: 
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
 - 容器内的应用直接运行在宿主机的内核中,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了。
 - 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
 
 
开发和运维
- 应用更快速的交付和部署 
- 传统:一堆帮助文档,安装程序!
 - Docker:打包镜像发布测试,一键运行!
 
 - 更便捷的升级和扩缩容 
- 使用了Docker之后,我们部署应用就和搭积木一样!
 - 项目打包为一个镜像,扩展服务器A!服务器B!
 
 - 更简单的系统运维 
- 在容器化之后,我们的开发,测试环境都是高度一致的。
 
 - 更高效的计算资源利用 
- Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
 
 
总结
以上就是对Docker的概述。
相关文章:
【Docker】一文趣谈Docker
🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录 …...
代码随想录day19(2)二叉树:二叉树的最大深度(leetcode104)
题目要求:求出二叉树的最大深度 思路:首先要区分二叉树的高度与深度。二叉树的高度是任一结点到叶子结点的距离,而二叉树的深度指的是任一节点到根节点的距离(从1开始)。所以求高度使用后序遍历(从下往上&…...
Lua中文语言编程源码-第五节,更改lcorolib.c协程库函数, 使Lua加载中文库关键词(与所有的基础库相关)
源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的lcorolib.c协程库函数,Coroutine Library:表明这个C源文件实现了Lua的协程库(Coroutine Library),即提供了…...
Docker学习之数据管理(超详解析)
Docker存储资源类型: 用户在使用 Docker 的过程中,势必需要查看容器内应用产生的数据,或者需要将容器内数据进行备份,甚至多个容器之间进行数据共享,这必然会涉及到容器的数据管理: (1ÿ…...
FDTD液晶折射率各项异性表示方法
由于FDTD的数据都是沿坐标轴的,各向异性材料的参数也需要根据坐标轴来输入。 首先要了解坐标变换。 坐标变换 这里以二维坐标变化为例。 矢量下我们可以发现OP可在两个坐标系下分别表示 接下来将两个坐标相互关联,这里以Xb举例,Yb同理 注…...
RoketMQ主从搭建
vim /etc/hosts# IP与域名映射,端口看自己的#nameserver 192.168.126.132 rocketmq-nameserver1 192.168.126.133 rocketmq-nameserver2# 注意主从节点不在同一个主机上 #broker 192.168.126.132 rocketmq-master1 192.168.126.133 rocketmq-master2#broker 192.168…...
Linux网络瑞士军刀 nc(netcat)
1.命令简介 nc(netcat)是一个短小精悍、功能实用、简单可靠的网络工具,主要有如下作用: (1)端口侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口; (2&#x…...
1.Spring入门
1.1 Spring简介 Spring是一个轻量级Java 企业级应用程序开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。 Spring Fra…...
【JavaEE Spring 项目】消息队列的设计
消息队列的设计 一、消息队列的背景知识二、需求分析核心概念⼀个⽣产者, ⼀个消费者N 个⽣产者, N 个消费者Broker Server 中的相关概念核⼼ API交换机类型 (Exchange Type)持久化⽹络通信消息应答 三、 模块划分四、 项⽬创建五、创建核心类创建 Exchange创建 MSGQUeue创建 B…...
SpringFramework学习笔记(Spring IoC,aop,tx)
SpringFramework 本篇笔记是基于尚硅谷学习资料的整理,涉及到其笔记的简化,补充,以及我在学习中遇到的与无法理解的问题及解决,如果想看完整及后续的笔记,可以去https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF查看官方…...
口腔管理平台 |基于springboot框架+ Mysql+Java+B/S结构的口腔管理平台 设计与实现(可运行源码+数据库+lw文档)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 会员功能 系统功能设计 数据库E-R图设计 lunwen参考…...
【设计模式】Java 设计模式之工厂模式(Factory Pattern)
工厂模式(Factory Pattern)深入解析 一、工厂模式概述 工厂模式是一种创建型设计模式,它提供了一种封装对象创建过程的方式,将对象的创建与使用分离。工厂模式的核心思想是将“实例化对象”的操作与“使用对象”的操作分开&…...
安卓UI面试题 36-40
36. 简述 getDimension、getDimensionPixelOffset 和 getDimensionPixelSize 三者的区别? 相同点 单位为dp/sp时,都会乘以density,单位为px则不乘不同点 1、getDimension返回的是float值 2、getDimensionPixelSize,返回的是int值,float转成int时,四舍五入 3、getDimensio…...
Java有哪些常用的集合?
1、典型回答 在 Java 中,常用的集合有以下几个: 列表(List):有序集合,可以包含重复元素。常见实现类有 ArrayList、LinkedList、 Vector 等集合(Set):无序集合,不允许包含重复元素。常见实现类有 HashSet、…...
虚拟机网络链接
在虚拟网络设置中找到如下界面: "子网 IP" 192.168.79.0/24 表示一个局域网络,它有254个可能的IP地址可供分配(192.168.79.1到192.168.79.254),255.255.255.0 是子网掩码,定义了网络和主机部分。…...
代码随想录阅读笔记-字符串【反转字符串】
题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印…...
4. Linux文件属性和目录系列
在 Linux 系统中,文件和目录是基本的文件系统组成部分。文件系统是用于组织和存储文件的一种结构,而文件和目录则是文件系统的核心元素。以下是对 Linux 文件和目录的详细解释: 1. 文件(File) 在 Linux 中,文件是数据的集合,可以是文本文件、二进制文件、设备文件等。…...
Linux第78步_使用原子整型操作来实现“互斥访问”共享资源
使用原子操作来实现“互斥访问”LED灯设备,目的是每次只允许一个应用程序使用LED灯。 1、创建MyAtomicLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyAtomicLED回车”,创建MyA…...
C++——C++11(3)
C——C11(3) lambda表达式(匿名的仿函数对象)一些注意点lambda捕捉列表[][&][this] lambda的赋值 function包装器function成员函数的包装 bind绑定参数 我们今天接着来了解一下C11一些新的特性,如果还没有看过上两…...
更改el-tabs默认样式,实现tab标签居中显示,标签对应内容使用另一个div显示
首先看效果图 如图所示,标签在浏览器窗口居中,但是下面的内容依然是默认从左到右,不会受到tab样式的影响 <template><div><div style"display: flex; justify-content: center; align-items: center;"><el-…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
Linux信号保存与处理机制详解
Linux信号的保存与处理涉及多个关键机制,以下是详细的总结: 1. 信号的保存 进程描述符(task_struct):每个进程的PCB中包含信号相关信息。 pending信号集:记录已到达但未处理的信号(未决信号&a…...
