01-Docker概述

简介: Docker是基于Go语言的开源容器技术,实现“一次镜像,处处运行”。它通过容器化封装应用及依赖,对比传统虚拟机更轻量、高效,启动快、资源占用少。Docker利用宿主机内核,无需加载操作系统,本质是隔离进程,由镜像、容器、仓库三大核心组件构成,广泛应用于开发、测试与部署。

Docker简介

Docker是基于Go语言实现的云开源项目。


Docker的主要目标是:Build, Ship and Run Any App, Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能做到一次镜像,处处运行


传统虚拟机和容器


传统虚拟机(virtual machine):

传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如VirtualBox、VMware等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用。

缺点:资源占用多、冗余步骤多、启动慢


Linux容器(Linux Container,简称LXC):

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


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



对比:

特性

容器

虚拟机

启动

秒级

分钟级

大小

一般为Mb

一般为Gb

速度

接近原生

比较慢

系统支持数量

单机支持上千个容器

一般几十个


Docker运行速度快的原因


Docker有比虚拟机更少的抽象层:

由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker有明显优势。


Docker利用的是宿主机的内核,而不需要加载操作系统OS内核:

当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较耗时耗资源的过程。当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。


Docker容器的本质就是一个进程。

Docker软件

Docker并非一个通用的容器工具,它依赖于已经存在并运行的Linux内核环境。(在Windows上安装Docker时需要依赖WLS,也即Windows下的Linux子系统)。


Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。


Docker的基本组成部分:

  • 镜像(image)
  • 容器(container)
  • 仓库(repository)


Docker镜像


Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建多个容器。


Docker容器


Docker利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。


Docker仓库


Docker仓库是集中存放镜像文件的场所。

仓库分为公开仓库和私有仓库两种。

最大的公开仓库是Docker官方的Docker Hub:https://hub.docker.com/

Docker架构

Docker是一个 C/S(Client-Server) 结构的系统,后端是一个松耦合架构,众多模块各司其职。


Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从容器接收命令并管理运行在主机上的容器。



Docker运行的基本流程为:

  1. 用户是使用Docker Client 与 Docker Daemon 建立通信,并发送请求给后者
  2. Docker Daemon 作为 Docker 架构的主体部分,首先提供 Docker Server 的功能使其可以接收 Docker Client 的请求
  3. Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式存在
  4. Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graph Driver 将下载镜像以 Graph 的形式存储
  5. 当需要为 Docker 创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker 容器网络环境
  6. 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Exec driver 来完成
  7. Libcontainer 是一项独立的容器管理包,Network driver 以及 Exec driver 都是通过 Libcontainer 来实现具体对容器进行的操作


相关文章
|
2天前
|
缓存 Ubuntu Linux
02-Docker安装
本文介绍了在CentOS和Ubuntu系统中安装、配置及卸载Docker的完整步骤,涵盖在线与离线安装方式。内容包括:卸载旧版本、配置国内镜像源(如阿里云)、安装引擎、启动服务、运行HelloWorld测试,并详细说明如何配置systemd服务、daemon.json参数及命令补全功能,适用于生产环境部署参考。
|
2天前
|
存储 Java API
数组(顺序存储)基本原理
本文深入讲解数组的底层原理,区分静态数组与动态数组。静态数组是连续内存空间,支持O(1)随机访问,但增删效率低;动态数组在此基础上封装扩容与常用API,使用更便捷。通过手动实现动态数组,帮助理解其增删查改的时间复杂度及底层机制。
|
2天前
|
机器学习/深度学习 文字识别 算法
报关单OCR识别-进出口海关报关单识别接口返回参数-文字识别
报关单识别接口基于OCR与深度学习技术,精准提取进出口报关单关键信息,输出结构化数据。支持API调用与私有化部署,适用于智能通关、跨境物流等场景,提升申报效率与准确性。
|
2天前
|
Java API
用链表实现队列/栈
本文介绍如何用链表实现栈和队列,利用双链表头尾操作均为O(1)的特性,高效实现栈的push/pop和队列的入队/出队操作,并引出数组实现队列时的性能问题,为后续优化埋下伏笔。
|
2天前
|
存储 Java 开发工具
4.1 服务端(DevBox)-项目创建
通过Sealos在DevBox中创建SpringBoot项目zxyf-management,配置Java环境与4G内存,使用Cursor智能开发工具一键启动云端Maven工程,快速完成项目构建与部署,无需手动输入命令,实现高效开发与访问。
15 0
|
2天前
|
关系型数据库 MySQL 数据库
09-Docker安装Mysql
本文介绍如何使用Docker安装MySQL 5.7,涵盖单机部署与主从复制配置。包括镜像拉取、容器启动、中文乱码解决、数据卷映射,并详细演示主从复制的搭建步骤及同步测试,确保数据持久化与高可用。
|
2天前
|
弹性计算 应用服务中间件 异构计算
阿里云服务器新版优惠价格表(轻量应用服务器、ECS 云服务器、GPU 服务器)
阿里云服务器包含多种类型,不同类型、配置、地域及付费方式的收费标准存在差异,以下是具体信息整理:阿里云服务器新版优惠价格表(轻量应用服务器、ECS 云服务器、GPU 服务器)。
36 0
|
2天前
|
存储 缓存 算法
02 | 非线性结构检索:数据频繁变化的情况下,如何高效检索?
通过树状结构或跳表组织数据,可实现高效二分查找。二叉检索树利用有序性快速缩小搜索范围,平衡时查询效率为O(log n);跳表则通过多层指针加速链表遍历,以概率平衡实现近似O(log n)性能,二者均优于数组在频繁更新场景下的表现。
11 0
|
XML Java Docker
【面试题】2、Docker和Spring相关
【面试题】2、Docker和Spring相关
139 0
|
5天前
|
云安全 监控 安全