01-Docker概述

简介: Docker是基于Go语言的开源容器技术,实现“一次镜像,处处运行”。它将应用及依赖打包为轻量级、可移植的容器,直接利用宿主机内核,启动快、资源占用少。相比传统虚拟机,容器以进程形式运行,秒级启动,单机可支持上千个容器,大幅提升系统资源利用率。

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

相关文章
|
11月前
|
网络协议 算法 前端开发
07 | 架构设计:设计一个灵活的 RPC 框架
本文深入讲解如何设计一个灵活的 RPC 框架,从基础通信原理出发,剖析传输、协议、服务发现、连接管理等核心模块,并提出分层架构与插件化设计思想,提升系统可扩展性与维护性,助力构建高性能、易演进的分布式服务架构。
|
11月前
|
缓存 网络协议 关系型数据库
01丨核心原理:能否画张图解释下 RPC 的通信流程?
本文深入解析RPC(远程过程调用)的核心原理与通信流程,从定义、作用到实现细节,揭示其如何屏蔽网络通信复杂性,实现像调用本地方法一样调用远程服务。通过序列化、协议设计、动态代理等机制,RPC成为分布式系统中不可或缺的“经络”,支撑微服务架构的高效通信,是开发者必须掌握的基础技术。
|
11月前
|
存储 SQL 负载均衡
17 | 异步 RPC:压榨单机吞吐量
本文深入探讨如何通过异步机制提升RPC框架的单机吞吐量。重点分析影响吞吐量的核心原因——业务逻辑耗时导致CPU利用率低,并提出“异步”为关键解决方案。详细讲解调用端使用Future、服务端支持CompletableFuture实现全链路异步的原理与优势,显著提升系统性能与资源利用率。
17 | 异步 RPC:压榨单机吞吐量
|
11月前
|
存储 缓存 负载均衡
CP(强制一致性),AP(最终一致)
本文探讨RPC框架中的服务发现机制,对比DNS、ZooKeeper等方案,指出其在超大规模集群下的局限性。重点提出基于消息总线的最终一致性注册中心,通过AP模型替代CP,提升系统性能与稳定性,适用于高并发、大规模服务节点场景。
CP(强制一致性),AP(最终一致)
|
11月前
|
Ubuntu Shell Linux
04-Docker常用命令
本文介绍Docker常用命令,涵盖启动、停止、重启、查看状态及开机自启等基础操作,详解镜像的搜索、下载、删除、空间查看命令,并说明虚悬镜像处理与命令自动补全配置方法,还包含后台运行容器和使用Docker下载RPM依赖的实用技巧。
|
11月前
|
存储 XML JSON
03 | 序列化:对象怎么在网络中传输?
本讲深入讲解RPC框架中的序列化机制,介绍JDK原生、JSON、Hessian、Protobuf等常用序列化方式的特点与适用场景,分析性能、空间开销、兼容性及安全性等选型关键因素,强调在实际应用中应优先考虑稳定性与通用性,并指导如何构建简洁高效的传输对象,提升系统整体可靠性与性能。
|
11月前
|
安全
CSRF攻击
CSRF(跨站请求伪造)攻击利用用户已登录状态,诱导其发起非本意的请求。攻击者构造恶意请求,通过钓鱼网站等渠道使用户在不知情下操作目标网站,如发帖、转账等。防御手段包括:使用Token验证、SameSite Cookie属性、检查Referer、禁止第三方携带Cookie等,以保障用户安全。
|
11月前
|
存储 网络协议 API
07-nexus搭建docker私仓
本文介绍如何使用Nexus搭建Docker私有仓库。包括启用Docker仓库、创建存储、配置docker-hosted仓库及端口、防火墙开放8881端口,并设置Docker客户端允许HTTP推送镜像,完成镜像上传全过程。
|
11月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
Nexus仓库是Sonatype推出的开源制品管理工具,支持Maven、Npm、Docker等格式。本文介绍其在Linux和Docker环境下的安装配置,包括JDK部署、OSS版下载、用户权限、匿名访问设置,以及仓库创建与上传下载操作,涵盖密码重置、数据持久化及脚本批量导入等内容,助力搭建高效私有仓库。
|
11月前
|
jenkins Linux 持续交付
Jenkins的Agent服务器环境配置
本文介绍Jenkins Agent服务器的完整环境配置,涵盖Maven、Node、Ant构建工具部署,Docker及docker-compose离线安装,Kubernetes(kubectl)与Helm客户端配置,CCE连接认证,以及JDK安全策略调整以支持旧版SVN。适用于自动化编译、镜像构建与集群部署。