初识Docker

文章目录

  • Docker安装
  • Docker简介
    • 1.什么是虚拟化、容器化?
    • 2. 为什么需要虚拟化、容器化?
    • 3. 虚拟化的实现方式
      • 主机虚拟化的实现方式
      • 容器虚拟化实现
    • 4. 虚拟机和Docker的区别


Docker安装

基于Centos7进行安装

1.确认系统版本和CPU架构,Centos7的x86_64架构

# cat /etc/*release*
# uname -a

2.卸载旧版本

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

3.卸载历史版本

# 执行卸载
# yum remove docker-ce docker-ce-cli containerd.io dockerbuildx-plugin docker-compose-plugin docker-ce-rootless-extras
# 删除目录
# rm -rf /var/lib/docker
# rm -rf /var/lib/containerd# 根据实际情况删除配置文件和对应镜像目录
# rm -rf /data/var/lib/docker
# rm -rf /etc/docker/daemon.json

4.获取yum源,

# yum install -y yum-utils
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
配置使用国内源
# sed -i 's@//download.docker.com@//mirrors.ustc.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

5.安装并启动docker

# yum install -y docker-ce docker-ce-cli containerd.io dockerbuildx-plugin docker-compose-plugin
# systemctl start docker
# systemctl enable docker
# systemctl status docker

6.验证

# docker version
# docker info

7.修改docker安装目录和拉取镜像国内源

Docker 默认的安装目录为/var/lib/docker,这里面会存放很多很多镜像,所以我们在安装的时候需要考虑这个目录的空间,拉取镜像的时候使用国内源可以加快速度。

# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"],"data-root" : "/data/var/lib/docker"
}
# systemctl daemon-reload
# systemctl restart docker

Docker简介

1.什么是虚拟化、容器化?

  • 物理机:只的是实际的服务器或者笔记本等对实体机器的称呼,物理机器给虚拟机提供了硬件环境,有时候也称为宿主机。
  • 虚拟化:是指通过虚拟化技术将一台物理计算机虚拟为多台计算机,将一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且这多个计算机的应用程序都可以在相互独立的空间内运行且互不影响,也就是在硬件层面的虚拟化,比如腾讯云阿里云这些云服务器把一台物理机虚拟成多台计算机给用户使用。
  • 容器化:容器化是一种虚拟化技术,又称操作系统层虚拟化,虚拟的是操作系统层面,容器之间共享宿主机系统内核。

2. 为什么需要虚拟化、容器化?

  • 资源利用率高:将利用率较低的服务器资源进行整合,用更少的硬件资源运行更多的业务
  • 环境标准化:使用容器化可以让开发、测试、生产环境保持一致,Docker的镜像提供了除内核外完整的运行时环境,保证了环境的统一性。
  • 资源弹性伸缩:根据不同的场景动态调整存储、网络、计算等硬件资源,请求压力大了就扩容,等压力平稳了进行收回。
  • 差异化环境提供:同时提供多套差异化的执行环境,限制环境使用资源。比如我的服务一个以来 Ubuntu 操作系统,一个服务依赖 CentOS 操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。
  • 沙箱安全:如果在服务器执行了rm -rf /这样的危险命令,如果是在容器内就可以保证我们物理主机的安全
  • 容器对比虚拟机启动更快:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 更好的维护和复用:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得
    应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制 。

3. 虚拟化的实现方式

应用程序执行环境分层

在这里插入图片描述

  • 硬件层:提供硬件抽象,包括指令集架构、硬件设备及硬件访问接口
  • 操作系统层 :提供系统调用接口,管理硬件资源
  • 程序库层:提供数据结构定义及函数调用接口

主机虚拟化的实现方式

主机虚拟化的原理是通过在物理服务器上安装一个虚拟化层来实现。这个虚拟化层可以在物理服务器和客户操作系统之间建立虚拟机,使得它们可以独立运行。 这个虚拟化层一般通过一个软件来实现,比如说Vmware。

容器虚拟化实现

容器虚拟化实现原理
容器虚拟化,有别于主机虚拟化,是操作系统层的虚拟化。通过 namespace 进行各程序的隔离,加上 cgroups 进行资源的控制,以此来进行虚拟化。容器虚拟化基础之 NameSpace
什么是 Namespace(命名空间)
namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。 Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前namespace 里的进程,对其他 namespace 中的进程没有影响。

控制组(Control Groups)

Docker使用Linux内核的控制组功能,通过控制组可以限制容器使用的资源,如CPU、内存、磁盘IO等。这样可以确保容器之间资源的隔离和公平分配。

4. 虚拟机和Docker的区别

虚拟机Docker
磁盘占用几个G到几十个G几十M到几百M
CPU和内存占用虚拟操作系统非常占用CPU 和内存,需要通过虚拟层调用占用率高Docker 引擎占用资源极低,直接作用于硬件资源占用少
启动速度从开机到启动项目几分钟从开启容器到运行项目只需几秒
安装管理需要专门的运维技术通过镜像仓库安装、管理方便
应用部署手动部署,速度慢体系化部署,可以自动化,速度快
隔离性系统级别进程级别
封装程度打包整个操作系统打包项目代码和依赖信息

Docker 为什么比虚拟机资源利用率高,启动快?

  1. 轻量级:Docker容器是基于操作系统级别的虚拟化,而虚拟机是基于硬件级别的虚拟化。Docker容器共享宿主机的操作系统内核,因此不需要额外的操作系统启动和资源消耗,相比之下,虚拟机需要独立的操作系统和资源管理。
  2. 资源隔离:Docker使用Linux内核的命名空间和控制组来实现资源隔离。每个Docker容器都可以被限制在一定的资源范围内,如CPU、内存和磁盘等。这种细粒度的资源控制使得Docker容器可以更有效地利用宿主机的资源。
  3. 共享文件系统:Docker使用联合文件系统来构建容器的文件系统。联合文件系统允许多个容器共享相同的基础镜像,并在其上添加自己的文件系统层。这种共享文件系统的机制使得容器的启动速度更快,因为不需要为每个容器复制完整的操作系统文件。
  4. 镜像管理:Docker使用镜像来构建容器。镜像是一个只读的文件系统,包含了运行一个容器所需的所有文件和配置。镜像可以通过分层的方式进行管理,每个镜像层都可以被共享和重用。这种镜像管理的机制使得容器的启动速度更快,因为只需要加载和启动必要的镜像层。
  5. docker 有比虚拟机更少的抽象层。 docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 cpu、内存利用率上 docker 将会在效率上有明显的优势。 docker 利用的是宿主机的内核,而不需要Guest OS,节省了 Guest OS 占用的资源。
  6. docker 不需要 Guest OS,创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS,返回新建过程是分钟级别的。而新建一个docker 容器只需要几秒钟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/110421.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档,在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

从实时监控到智能洞察:Grafana 和 CnosDB 的无限潜力

在今天的数字化世界中,监控系统对于维护应用程序和基础设施的稳定性至关重要。本文将介绍如何使用 Grafana 和 CnosDB 构建强大的监控体系,以便实时监视性能、发现问题并采取及时的措施。 CnosDB已正式上架Grafana插件市场 Grafana:开源监控和…

(手撕)数据结构--->堆

文章内容 目录 一:堆的相关概念与结构 二:堆的代码实现与重要接口代码讲解 让我们一起来学习:一种特殊的数据结构吧!!!! 一:堆的相关概念与结构 在前面我们已经简单的学习过了二叉树的链式存储结…

虚拟化和容器

文章目录 1 介绍1.1 简介1.2 虚拟化工作原理1.3 两大核心组件:QEMU、KVMQEMUKVM 1.4 发展历史1.5 虚拟化类型1.6 云计算与虚拟化1.7 HypervisorHypervisor分为两大类 1.8 虚拟化 VS 容器 2 虚拟化应用dockerdocker 与虚拟机的区别 K8Swine 参考 1 介绍 1.1 简介 虚…

stm32---定时器输入捕获

一、输入捕获介绍 在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种。 STM32F1除了基本定时器TIM6和TIM7,其他定时器都具有输入捕获功能 。输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获&#xf…

Linux中swap几乎耗尽,但物理内存还有空余的现象

故障现象: 产生此现象的原因: swappiness 配额设置了偏高的值。 还有一个潜在的因素是某个程序因其自身对内存管理的缺陷,形成了zombie进程、且为及时关闭的处理任务还在持续消耗Mem及swap。 解决办法: 调低swappiness 配额值&…

C++ - 异常介绍和使用

前言 我们在日常编写代码的时候,难免会出现编写错误带来程序的奔溃,或者是用户在使用我们编写的程序时候,使用错误所带来程序的奔溃。 在C 当中 可以对你觉得可能发生 错误 的地方在运行之前进行判断,发生错误可以给出提示。 C…

PDF 工具箱

PDF 工具箱 V9.0.0.1 程序:VB.net 运行库:NET Framework 4.5 功能简介: 1、PDF文件多文件合并,可调整顺序。 2、PDF文件拆分,将每页拆分成独立的PDF文件。 3、PDF文件添加水印,文字或图片水印&…

解决中国科大 USTC 邮箱系统的超大附件上传的邮箱控件安装问题

USTC邮箱系统上传超过 48M 的附件的步骤: 从文件中转站上传文件,会提示下载邮箱控件 cmplugin_setup.exe ,默认安装C盘即可 2. 安装好之后依然无法上传超大文件,因为只有 IE 浏览器支持该功能,所以可以使用 Edge 浏览…

opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4

博客【opencv dnn模块 示例(3) 目标检测 object_detection (2) YOLO object detection】 测试了yolov3 及之前系列的模型,有在博客【opencv dnn模块 示例(15) opencv4.2版本dnn支持cuda加速(vs2015异常解决)】 说明了如何使用dnn模块进行cuda…

C语言实现通讯录 (附完整代码)

C语言实现通讯录 🍀实现一个通讯录:🍀通讯录的功能:🍀多文件实现💮设计结构体——保存人的信息💮初始通讯录💮封装通讯录💮define宏定义修改通讯录的最大容量初始化通讯录…

掌握这5种方法,让你的新AirPods充电盒更耐用!

每次AirPods充电盒落地时,你都会呼吸急促吗?无论我使用的是旧一代的AirPods还是最新的AirPod Pro 2,我都关心它们的保存状况,并尽力保护这些脆弱设备的安全。我想我对AirPods Pro 2的新充电盒也会有同样的感受,它在9月…