ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker概述

2022-07-04 23:37:03  阅读:100  来源: 互联网

标签:容器 仓库 概述 镜像 Docker docker 运行


Docker容器概述

Docker是什么
是一种轻量级的“虚拟机”,Docker是一个用于开发,交付和运行应用程序的开放平台。

在Linux容器里运行应用的开源工具(容器引擎),让开发者可以打包大门的应用及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者window机器中。

 

Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。

这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

 

使用docker有什么意义

把容器化技术做成了标准化平台

docker引擎统一了基础设施环境——docker环境
docker引擎统一了程序打包(装箱)方式——docker镜像(把引擎放在镜像中,带着镜像到处跑)
docker引擎统一了程序部署(运行)方式——docke容器(利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了)

 Docker的使用场景
①打包应用程序部署简单

②可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了。

③适合做微服务的部署

④适合持续集成和持续交付(CI/CD):开发到测试发布

 

 Docker引擎(Docker Engine)

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

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

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

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

docker run

docker start

docker rm

 

传统虚拟技术的区别 Docker类似虚拟机的概念,但是与虚拟化技术的不同点在于下面几点: 1. 虚拟化技术依赖物理CPU和内存,是硬件级别的;而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行    2. 虚拟化系统一般都是指操作系统镜像,比较复杂,称为“系统”;而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。    3. 传统的虚拟化技术使用快照来保存状态;而docker在保存状态上不仅更为轻便和低成本,而且引入了类似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。    4. 传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile可以手动编写,这样应用程序开发人员可以通过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。    5. Dockerfile可以基于已经构建好的容器镜像,创建新容器。Dockerfile可以通过社区分享和下载,有利于该技术的推广。Docker会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中,这个虚拟容器可以运行在任何一种 Linux服务器上。这大大地提高了程序运行的灵活性和可移植性,无论需不需要许可、是在公共云还是私密云、是不是裸机环境等等。

 

Docker特性 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。 资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。    网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。    写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。    日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。    变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。    交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互 shell。   Docker的优势
  • 更快速的交付和部署
Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。 例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
  • 高效的部署和扩容
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。 Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。
  • 更高的资源利用率
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
  • 更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。 Docker架构 Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。 Dorcker核心概念
  • 镜像(image)
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
  • 容器(container)
Docker 利用容器(Container)独立运行的一个或一组应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
  • 仓库(repository)
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 时速云 、网易云 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。 Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。  

Docker 三要素(核心组件)
Docker images:镜像:统一的封装方式               (模板)

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

Docker registry:镜像仓库:放置镜像的仓库       (存放镜像模板)

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

仓库大类:

①公共仓库docker hub

②私有仓库registry harbor

 

客户端发起各种各样的命令,给与主机
主机会调用镜像,如果有镜像直接用,运行为容器
如果镜像里没有会到registry公共仓库去拉去镜像,拉到本地后再运行为容器

六大名称空间
namespace资源隔离——用容器技术封装

mount 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录

user 操作进程的用户和用户组

pid 进程编号

uts 主机名和主机域 (同一个环境里不能又叫node1又叫node2)

ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)

net(网络资源) 网络设备、网络协议栈(在同一个网络名称空间中的网络规则)、端口等

 

资源控制——cgroups

六种名称空间是由cgroups管理的

 

 

容器特性
特性         运行性能损耗10-20%

灵活:即使是最复杂的应用也可以集装箱化。
轻量级:容器利用并共享主机内核。
可互换:可以即时部署更新和升级。
便携式:可以在本地构建,部署到云,并在任何地方运行。
可扩展:可以增加并自动分发容器副本。
可堆叠:可以垂直和即时堆叠服务。

 

三、Docker和虚拟化的区别
特性                               Docker容器(一个进程控制)                                     虚拟机虚拟化(完整的操作系统)
启动速度                        秒级                                                                                   分钟级
运行性能                        接近原生(直接在内核中运行)                                    10%-20%左右的损失 50%左右损失(全虚拟化类型)
磁盘占用                        50-100MB                                                                       3-5G
数量                               成百上千,每个进程可控制一个容器                                  几十个
隔离性                             进程级别                                                                         操作系统(更彻底,安全级别高)
操作系统                        主要支持Linux                                                                  几乎所有
封装程度                      只封装目标代码和依赖关系,共享宿主机内核                    完整的操作系统,与宿主机隔离

四、总结
1、什么是docker?docker原理?
docker是一种封装和运行的开源平台,他统一了封装方式,统一了运行方式,开源平台指的是docker引擎,统一的封装方式指的是镜像,统一的运行方式指的是容器。
cgroup资源控制与namespaces两者构成了docker底层原理
docker是一种容器技术,**把linux中的cgroups(资源管理)和namespace(名称空间)等**容器底层技术进行完美封装,并抽象为用户创建和管理容器的便捷界面(命令行cli、api等),这种C/S架构
2、简述Docker主要使用的技术?
Cgroups:资源控制,管理一些系统资源
Namespace:资源隔离(名称空间)
rootfs:文件系统隔离(使用内核提供的rootfs)
容器引擎(用户态工具) :生命周期控制
docker本质就是宿主机的一个进程, docker是通过namespace(命名空间)实现资源隔离,通过cgroup,实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘50og)

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

4、Docker有哪些优势?和虚拟化比有什么优势?
docker把容器化技术做成了标准化平台,只要安装了docker引擎,就能使用docker。

使用docker有什么意义(实现了3个统一)
docker引擎统一了基础设施环境-docker环境
docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式
docker引擎统—了程序部署(运行)方式

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

5.如何把多个目录挂载到同一个目录下?
(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加式文件系统

 

 

 

 

 

 

 

         
   

标签:容器,仓库,概述,镜像,Docker,docker,运行
来源: https://www.cnblogs.com/xhx1991874414/p/16444828.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有