快速了解Docker(概念+基本组成)

Docker概述

Dokcer概念

容器虚拟化技术,系统平滑移植,解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

Docker意义

Docker的出现使得Docker得以打破过去程序即应用的观念,透过镜像将作业系统核心除外,运作应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作

Docker主要目标

Docker的主要目标就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能够做到"一次镜像,处处运行",只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

容器与虚拟机比较

1.传统虚拟机技术

**虚拟机****就是带环境安装的一种解决方案,它可以在一种操作系统里面运行另一种操作系统,比如在Window10系统里面运行Linux系统CentOS7。**应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删除,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序、操作系统和硬件三者之间的逻辑不变。

虚拟机的缺点:1.资源占用多 2.冗余步骤多 3.启动慢

2.容器虚拟化技术

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件,容器提供的镜像包含了应用的所有依赖性项,因而在从开发到测试再到生产的整个过程中,都具有可移植性和一致性。

Linux容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所悟的库资源和设置,系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现在启动速度快、占用体积小。

Docker基本组成

三要素:镜像文件、容器实例、仓库

镜像文件

image文件生成的容器实例,本身也是一个文件,称为镜像文件。 Docker镜像就是一个只读的模板,Docker镜像可以用来创建Docker容器,一个镜像可以创建很多容器。Docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

容器实例

一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。

从面向对象的角度看,Docker利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例,容器是镜像运行时的实体,容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

仓库

是集中存放镜像文件的场所。仓库就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了。

Docker公司提供的官方仓库被称为Docker Hub(https://hub.docker.com/),存放各种镜像模板的地方。

Docker优势

由于docker不需要跟虚拟机一样实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显优势(docker利用的是宿主机的内核,而不需要加载操作系统OS内核)

|-------|----------------|-----------------|
| | Docker容器 | 虚拟机VM |
| 操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
| 存储大小 | 镜像小,便于存储与传输 | 镜像庞大 |
| 运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
| 移植性 | 轻便、灵活,适用于Linux | 笨重,与虚拟化技术耦合度高 |
| 硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
| 部署速度 | 快速,秒级 | 较慢,10s以上 |

相关推荐
_Evan_Yao6 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd7 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼7 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
thefool1122668 小时前
TCP 1
java·1024程序员节
金銀銅鐵10 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手10 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
paopaokaka_luck12 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_322414280412 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
考虑考虑13 小时前
JDK26的JEP 500属性
java·后端·java ee
LMT流氓兔13 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节