【Docker系列】虚拟化+Docker概念(二)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【Docker系列】虚拟化+Docker概念(二)

3.5docker引擎(Docker Engine)

Docker Engine是具有以下主要组件的客户端-服务器(C/S架构)应用程序:


==server端:==服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。


==client端:==REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。


命令行界面(cLI)客户端((docker命令)


docker run


docker start


docker rm


3.6docker三要素

Docker images:镜像:统一的封装方式——>模板


Docker container:容器:==统一的运行时环境 ==——>基于镜像,运行状态/运行时状态


Docker registry:镜像仓库:放置镜像的仓库——>存放镜像模板


存储镜像的地方,默认在公共的 Docker Hub上查找,可以搞个人仓库。


仓库大类:①公共仓库—>docker hub ②私有仓库registry harbor


docker三要素

镜像——>模板

容器——>基于镜像,运行状态/运行时状态

仓库——>存放镜像模板


客户端发起各种各样的命令,给与主机


主机会调用镜像,如果有镜像直接用,运行为容器


如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器


3.7六大名称空间(namespace)

mount 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域 (同一个环境里不能又叫node1又叫node2)
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net(网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

MNT Namespace

提供磁盘挂载点和文件系统的隔离能力

比如一个宿主机是 ubuntu 的服务器, 可以在里面启动一个 centos 运行环境的容器并且在容器里面启动一个 Nginx 服务, 此 Nginx 运行时使用的运行环境就是 centos 系统目录的运行环境, 但是在容器里面是不能访问宿主机的资源, 宿主机是使用了 chroot 技术把容器锁定到一个指定的运行目录里面


IPC Namespace

提供进程间通信的隔离能力

同一个容器内的进程间通信相互可见,不同容器则不可见(不能跨容器访问)


UTS Namespace

提供主机名隔离能力

UTS提供主机名与域名的隔离,让每个docker拥有的主机名和域名,并独立于宿主机系统和其上的其他容器

docker中,每个镜像基本都以自身所提供的服务名称来命名镜像的hostname,且不会对宿主机产生任何影响


PID Namespace

提供进程隔离能力

pid 进程运行时系统随机分配的代号,程序终止后被回收,可能分配给其他程序,在linux系统中,多个容器的进程通过 PID namespace 进程隔离

对进程PID重新标号,即两个不同namespace下的进程可以有相同的PID。每个PID namespace都有自己的计数程序


Net Namespace

提供网络隔离能力

提供了关于网络资源的隔离,包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙,创建的时候添加CLONE_NEWNET标识符位,Docker 使用 network namespace 启动一个 vethX 接口, 这样你的容器将拥有它自己的桥接 ip 地址, 通常是 docker0, 而 docker0 实质就是 Linux 的虚拟网桥,网桥是在 OSI 七层模型的数据链路层的网络设备, 通过 mac 地址对网络进行划分, 并且在不同网络直接传递数据


User Namespace

提供用户隔离能力

主要隔离了安全相关的标识符和属性

允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户 UID 和 GID,把用户的作用范围限制在每个容器内,包括用户ID、用户组ID、root目录、key以及特殊权限


3.9容器特性

特性——>性能损耗10-20%


灵活:即使是最复杂的应用也可以集装箱化。


轻量级:容器利用并共享主机内核。


可互换:可以即时部署更新和升级。


便携式:可以在本地构建,部署到云,并在任何地方运行。


可扩展:可以增加并自动分发容器副本。


可堆叠:可以垂直和即时堆叠服务。


3.10容器小的架构体系

容器和虚拟机都具有相似的资源隔离和分配特点,但是功能不同,因为容器虚拟化了操作系统,而不是硬件,所以更加便携和高效


四、Docker和虚拟化的区别

4.1Docker和虚拟化的区别

比较点 容器 VM
特性 Docker容器(一个进程控制) 虚拟机虚拟化(完整的操作系统)
操作系统 主要支持Linux 几乎所有
运行性能 接近原生(直接在内核中运行)10%-20%左右的损失 50%左右损失(全虚拟化类型)
抽象层 应用程序层的抽象,将代码和依赖项打包在一起【容器是应用层面的隔离】 将一台服务器转变为多台服务器的物理硬件层的抽象【虚拟化是物理资源层面的隔离】
OS内核 多个容器可以在同一台计算机上运行,并与其他容器共享OS内核 也允许多个VM在单台计算机上运行,但需要启动单独的虚拟机 OS
OS数量 仅有一个物理机的OS,多个容器共享物理机的资源 多个OS(物理机一个OS,每个 VM 一个 OS),均独享资源
运行数 一台物理机可以运行数百个容器 一台物理机最多可以运行十来个虚拟机
大小 容器镜像的大小通常为几十 MB 包含操作系统、二进制文件、库,至少也要几个 GB
OS数量 仅有一个物理机的OS,多个容器共享物理机的资源 多个OS(物理机一个OS,每个 VM 一个 OS),均独享资源
运行数 一台物理机可以运行数百个容器 一台物理机最多可以运行十来个虚拟机
大小 容器镜像的大小通常为几十 MB 包含操作系统、二进制文件、库,至少也要几个 GB

容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。


这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制


4.2为什么 docker 比 vm 快

docker 有着比虚拟机更少的抽象层

docker 不需要 Hypervisor 实现硬件资源虚拟化

运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源


4.3HostOS 和 GuestOS 的区别

GuestOS:VM(虚拟机)里的系统

HostOS:物理机里的系统


五、Docker有哪些优势?和虚拟化比有什么优势?

docker把容器化技术做成了标准化平台,只要安装了docker引擎,就能使用docker。


使用docker有什么意义(实现了3个统一)


docker引擎统一了基础设施环境-docker环境——>image——>封装一一个简易的操作系统(3.0+G)


docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式-docker镜像——>images


docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)


实现了一次构建,多次、多处使用。


六、总结

6.1什么是docker?docker原理?

docker是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是docker引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。


cgroup资源控制与namespaces两者构成了docker底层原理


docker是一种容器技术,把linux中的==cgroups(资源管理)和namespace(名称空间)==等容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行cli、api等),这种C/S架构


6.2简述Docker主要使用的技术?

Cgroups:资源控制,管理一些系统资源


Namespace:资源隔离(名称空间)


rootfs:文件系统隔离(使用内核提供的rootfs)


容器引擎(用户态工具) :生命周期控制


docker本质就是宿主机的一个进程, docker是通过namespace(命名空间)实现资源隔离,通过cgroup,实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘50og)


Namespace:资源隔离(名称空间)


mount 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域 (同一个环境里不能又叫node1又叫node2)
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net (网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

6.3简述Docker体系架构

Docker客户端 - Docker


docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。


Docker服务端-Docker Daemon资源限制


docker服务端是一个服务进程,管理着所有的容器。


Docker镜像一Imagefont>


Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码。运行时间,库,环境变量,和配置文件


Docker容器-Docker Container


Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。


Docker镜像仓库-- Registryfont>


Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private、常用)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。


Docker的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 目录下。


6.4如何把多个目录挂载到同一个目录下?

(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加式文件系统

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
11天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
67 24
|
13天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
82 6
|
1月前
|
Kubernetes 负载均衡 调度
Docker Swarm 核心概念及详细使用
Docker Swarm 是 Docker 的原生集群管理工具,用于将多个 Docker 主机整合成一个虚拟主机,提供集群管理和调度功能。其核心特点包括集群管理、容错与高可用性、负载均衡、声明式服务模型、服务发现和安全性。本文档详细介绍了 Docker Swarm 的安装配置、服务部署、节点管理、网络配置及故障模拟等关键操作,适用于中小型项目或对 Kubernetes 复杂性有所顾虑的用户。
95 6
|
4月前
|
存储 运维 虚拟化
Docker技术概论(1):Docker与虚拟化技术比较
Docker技术概论(1):Docker与虚拟化技术比较
185 17
Docker技术概论(1):Docker与虚拟化技术比较
|
4月前
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
4月前
|
Linux 持续交付 虚拟化
在Linux中,Docker和容器虚拟概念是什么?
在Linux中,Docker和容器虚拟概念是什么?
|
4月前
|
Linux KVM 虚拟化
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
|
4月前
|
监控 安全 Linux
Docker——基础概念与操作
Docker——基础概念与操作
55 0
|
6月前
|
Java Linux Shell
Docker核心概念与使用
Docker学习笔记和总结,涵盖了Docker的核心概念、基本操作和实战应用。
146 10
|
7月前
|
监控 测试技术 虚拟化
Docker的介绍及与传统虚拟化技术的区别
Docker是开源的容器化平台,用于构建、分发和运行容器化应用。它包含Docker镜像(只读模板)、容器(运行实例)和引擎(运行时环境)。Docker提供灵活性、轻量级、隔离性和可扩展性,便于应用在不同环境一致运行。其拥有活跃的开源生态系统和丰富的资源。
71 1