Docker学习——②

文章目录

  • 1、Docker是什么
    • 1.1 Docker本质
    • 1.2 Docker的引擎迭代
    • 1.3 Docker和虚拟机的区别
    • 1.4 Docker 为什么比虚拟机资源利用率高,启动快?
    • 1.5 Docker 和 JVM 虚拟化的区别?
  • 2、Docker架构
  • 3、Docker生态
    • 3.1 新时代软件诉求
    • 3.2 Docker 解决方案
  • 4、Docker 安装

1、Docker是什么

1.1 Docker本质

Docker 本质其实是 LXC 之类的增强版,它本身不是容器,而是容器的易用工具。容器是 linux 内核中的技术(namespace做资源隔离,cgroup做资源限制),Docker 只是把这种技术在使用上简易普及了。Docker 在早期的版本其核心就是 LXC 的二次封装发行版。

Docker 作为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。Docker 是基于 Go 语言实现的一个开源项目,它的主要目标是“Build,Ship andRun Any APP,Anywhere”,即通过对组件的封装、分发、部署、运行等生命周期的管理,使得用户的应用及其运行环境能够做到**“一次封装,到处运行”。**

早期 Docker 利用 LXC 做容器管理引擎,但是在创建容器时,不再使用模板去安装生成,而是通过镜像技术(把一个操作系统用户空间所需要使用到的组件事先编排好,并整体打包成一个文件,image 文件),镜像文件集中放在一个仓库中。当需要创建容器时,Docker 调用 LXC 的工具 lxc-create,但不再通过 lxc 的模板去安装,而是连接到镜像服务器上下载匹配的镜像文件,而后基于镜像启动容器。所以,Docker 极大的简化了容器的使用难度。以后我们创建启动容器,只需要一个命令,docker-run,docker-stop 就可以启动停止一个容器了。

在这里插入图片描述

1.2 Docker的引擎迭代

Docker 早期是基于 LXC 容器管理引擎实现,当后来成熟之后,Docker 自建了一个容器引擎叫 libcontainer,后来 CNCF 的介入,Docker 又研发了一个工业化标准的容器引擎 runC,目前所使用的新版 Docker,所使用的容器引擎就是 RunC

1.3 Docker和虚拟机的区别

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

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

在这里插入图片描述
docker 有比虚拟机更少的抽象层。docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的是实际物理机的硬件资源。因此在 cpu、内存利用率上 docker 将会在效率上有明显的优势。docker 利用的是宿主机的内核,而不需要Guest OS,节省了 Guest OS 占用的资源

docker 不需要 Guest OS,创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 Guest OS,返回新建过程是分钟级别的。而新建一个docker 容器只需要几秒钟。

1.5 Docker 和 JVM 虚拟化的区别?

JVMDocker 容器
性能Jvm 需要占用一定的的CPU 和内存基本没有损失
虚拟层面基于 JVM 虚拟机,更加上层基于操作系统,更加通用
代码无关性一个特定代码的执行平台,它是运行时才存在的,只能支撑特定代码的执行,并且必须是在 jvm 进程内模拟了一个操作系统,它是静态存在的,可以支撑任何相同平台的应用程序
主机隔离性jvm 不隔离主机通过命名空间实现隔离

2、Docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建

这是官方的架构图:

在这里插入图片描述

Docker 仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。DockerHub 供了庞大的镜像集合供使用

Docker daemon:Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它为守护进程

Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信

Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器

Docker 镜像:Docker 镜像是用于创建 Docker 容器的模板

Docker 容器(Container):容器是独立运行的一个或一组应用

上面概念比较难以理解,我们列举个生活中的案例,以一家人去旅游入住酒店为例

我们一家人和朋友一块旅游去酒店,我们就是 Docker Client

到酒店办理入住,办理退房,缴费需要酒店前台提供各种服务,酒店前台就是我们的Docker Daemon,Docker 的核心服务端酒店是建在美丽的海边,酒店的宅基地和大楼就是我们实际的物理服务器或者虚拟服务器,也就是 Docker Host

酒店就 1000 多个房间,每个房间里面不一样,有标间、大床房、家庭房等,这就是Docker 镜像仓库

酒店的标准的房间豪华大床房和双人标间,这个就是 Docker 镜像,我们客户是没有办法修改的

我们办理完入住了一个豪华大床房,然后把行李,个人物品带到了一个具体的房间号,比如 9527,那么这个房间我们可以使用了,朋友也开了一间豪华大床房,虽然豪华大床房一样,当时我们携带的物品,我们的洗漱时间,睡觉时间都不一样,这个就是容器 Docker Container

容器的销毁,也就是我们一周后旅游结束了,搬出了酒店,酒店把我们的房间恢复了镜像原来的样子

3、Docker生态

3.1 新时代软件诉求

我们来考虑 2 个问题,Docker 为什么要设计镜像,然后又搭建个 Docker Hub,搞个镜像仓库呢?

我们来看下现在的时代发生了什么

数据量疯狂增长
随着物联网、边缘计算等智能终端设备不断普及,受到来自物联网设备信号、元数据、娱乐相关数据、云计算和边缘计算的数据增长的驱动,全球数据量呈现加速增长。根据 IDC 分布的《数据时代 2025》预测,全球数据量将从 2018 年的 33ZB 增至 2025年的 175ZB,增长超过 5 倍;中国平均增速快于全球 3%,预计到 2025 年将增至48.6ZB,占全球数据圈的比例由 23.4%提升至 27.8%。其中,中国企业级数据量将从2015 年占中国数据量的 49%增长到 2025 年的 69%

在这里插入图片描述

处理能力快速增加
腾讯云全球服务器数量 100w+,数据量 EB+;2020 年阿里云:在全国已建成 5 大超级数据中心,阿里云在全球 22 个地域部署了上百个数据中心,服务器的总规模数已经接近 200 万台。

某省疾控中心疫苗预约系统、全员核酸检测系统、健康码系统共 300 余台服务器,并为核酸检测系统快速扩容计算和存储资源。

软件需求爆发式增长
软件发布频繁
(1)研发模式从瀑布开发演变为敏捷开发,原来 3 个月上一次新功能,现在两周一次,
而开发过程中我们也经常遇到需要修改需求,然后变更再发布的情况
在这里插入图片描述

(2)软件上线有问题需要快速回滚,对软件有着极强的版本管理和回滚诉求

软件需要共享
软件的研发人员、研发公司在设计、研发好一款软件的时候,如何方便的共享给他人,而又能快速的使用起来

环境搭建复杂,技术种类繁多
每个项目组使用的语言不一样,需要不同的环境,每个都得搞一套。每次都要从 yum开始一个个完成部署安装,每次都有各种奇怪的问题,运维成本很高

3.2 Docker 解决方案

云时代需要我们针对这些诉求有一套针对的解决方案

我们要处理海量的数据,如何处理呢?

购买大量的服务器,并研发对应软件

开发的需求需要频繁的变更上线,如何才能将修改的代码快速的分发到几百或者几千台服务器呢?如何共享软件呢?

搞一个中心仓库,让各个服务器去下载软件包,安装,所以 CentOS 搞了 yum 仓库,docker 设计了镜像仓库,docker hub 是公共的托管仓库

软件设计好以后,怎么快速安装启动,有问题回滚呢?

将 docker 需要的所有信息设计一套软件格式,把所有的依赖搞进去,并打上版本标签,这样不会换一个服务器各种问题,所以 Docker 设计了镜像

不同的开发环境怎么搭建呢,一会 java,一会 c++?

docker 设计了镜像来应对,镜像里面存放了需要运行的环境,就像我们的 iPhone 内置 ios,我们的华为 mate 50 内置鸿蒙一样,一条命令就可以完成某个环境的搭建

4、Docker 安装

这里主要讲在CentOS 上安装 Docker

Docker支持的操作系统

CentOS 7
CentOS 8 (stream)
CentOS 9 (stream)

Docker支持的CPU

ARM/X86_64

确认操作系统
在这里插入图片描述

确认CPU架构

在这里插入图片描述

如果安装了Docker,不嫌麻烦的,可以删掉,再安装一次

卸载旧版本
因为Docker在发展过程中,改过名,以前就叫Docker,现在叫Docker-engine,我把以前的版本称为旧版本,现在的称为历史版本

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

卸载历史版本

#删除机器上的包
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin dockercompose-plugin docker-ce-rootless-extras#执行卸载,这下面的目录或文件都是存放的数据,也要删除
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker/daemon.json

确认是否删除完成

使用命令docker,如果出现以下结果,则说明删除完成

在这里插入图片描述

配置仓库

sudo yum install -y yum-utils
sudo 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

安装最新版本

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动docker

#配置加载
sudo systemctl daemon-reload 
#启动服务
sudo systemctl start docker 
#开启自启
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker

在这里插入图片描述

检查安装结果查看版本

docker version

在这里插入图片描述

也可以用以下命令,查看更详细的信息

docker info

执行 hello-world 可以看到 Hello from Docker,表明 docker 服务正常

在这里插入图片描述

Docker 镜像源修改

因为docker的镜像源是在国外的,所以平时拉去镜像时,速度比较慢,所以我们需要将镜像源改为国内,这样速度就会很快

在配置文件/etc/docker/daemon.json 中加入:

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://registry.docker-cn.com"]
}

加载配置

sudo systemctl daemon-reload

重新启动 docker:

sudo systemctl restart docker

参考:https://mirrors.ustc.edu.cn/help/dockerhub.html

重启完成后,通过docker info 产看是否配置成功

在这里插入图片描述

Docker 目录修改

Docker 默认的安装目录为/var/lib/docker,这里面会存放很多很多镜像,所以我们在安装的时候需要考虑这个目录的空间,有三种解决方案。
(1)将/var/lib/docker 挂载到一个大的磁盘,这种一般我们能控制挂载目录,像腾讯云这种云厂商在安装 K8s 的节点的时候提供了挂载选项,可以直接挂载这个目录过去
(2)安装之前挂载一个大的磁盘,然后创建一个软链接到/var/lib/docker,这样就自动安装到我们空间比较大的磁盘了
(3)安装了 docker,然后发现忘了配置这个目录,我们需要修改 docker 的配置文件

#假定我们磁盘的大的目录为 /data
mkdir /data/var/lib/docker -p
# 编辑配置文件
vim /etc/docker/daemon.json
# 输入下面的 json
{"data-root": "/data/var/lib/docker"
}
# 加载配置
sudo systemctl daemon-reload 
# 重启 docker
sudo systemctl restart docker 
#查看 docker 状态
sudo systemctl status docker

在这里插入图片描述

通过docker info 产看是否配置成功

在这里插入图片描述

如果需要卸载docker,也别忘了卸载这个目录下的数据

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

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

相关文章

C#知识总结 基础篇(下)

目录 5类和继承 5.1类继承 5.2访问继承的成员 5.3屏蔽基类的成员 5.4访问基类的成员 5.5虚方法与覆写方法 5.6构造函数的执行顺序 5.7成员访问修饰符 5.8抽象类 5.9密封类与静态类 6.表达式与运算符 6.1运算符和重载 7.结构 7.1结构体的感念。 7.2结构构造函数与…

C++笔记之动态数组的申请和手动实现一个简单的vector

C笔记之动态数组的申请和手动实现一个简单的vector code review! 文章目录 C笔记之动态数组的申请和手动实现一个简单的vector1.C语言中动态数组的申请与使用1.动态数组的申请使用new和delete使用std::vector 1.std::vector的底层实现2.手动实现一个简单的vector:使用一个指向…

Rocky 安装jdk17

1)检测jdk是否安装: #运行 java -version如果提示安装,则输入N,跳过 2)检测cpu 类型 若未安装查看linux处理器架构: #运行 hostnamectl #或运行 arch 3)去官网下载相应的编译版本的Jdk Or…

CCLINK IEFB总线转ETHERNET/IP网络的协议网关使欧姆龙和三菱的数据互通的简单配置方法

想要实现CCLINK IEFB总线和ETHERNET/IP网络的数据互通。 捷米JM-EIP-CCLKIE是一款ETHERNET/IP从站功能的通讯网关,该产品主要功能是实现CCLINK IEFB总线和ETHERNET/IP网络的数据互通。本网关连接到ETHERNET/IP总线和CCLINK IEFB总线上都可以做为从站使用。网关分别…

C++笔记之lambda捕获列表中的‘this‘指针

C笔记之lambda捕获列表中的’this’指针 code review! 捕获this指针的lambda表达式在C中有多种应用场景。以下是一些示例: 异步编程:当您需要在异步操作中访问类的成员变量或成员函数时,可以使用捕获this指针的lambda表达式。例如&#xf…

STM32H750之FreeRTOS学习--------(四)中断管理

四、FreeRTOS中断管理 中断的概念不再过多叙述,学习过逻辑的都知道 中断的执行过程 中断请求 外设产生中断请求(GPIO外部中断、定时器中断等)响应中断 CPU停止执行当前程序,转而去执行中断处理程序(ISR)…

linux centos7安装colmap

centos安装colmap 一、安装依赖 sudo yum install \gflags-devel \glog-devel \glew-devel \atlas \atlas-devel \lapack-devel \blas-devel \flann-devel \lz4-devel \sqlite-devel \metis-devel \qt5-qtbase-devel二、编译安装colmap git clone https://github.com/colmap/…

nvm 下载 nodejs 速度慢问题解决

1、找到 nvm 的下载目录,在目录下找到 settings.txt 文件 2、打开 settings.txt 文件 ,添加以下代码: node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/添加完成后再去下载即可。

Webpack的入口(entry)和出口(output)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Windows 下编译 TensorFlow 2.9.1 CC库

参考 Intel 的 tensorflow 编译指导,不过项目还是可以用 TF原本的,不是一定要选择Intel 的TF版本。 安装 MSVC 2019 安装 Intel OneDNN OneMKL 似乎也可以不安装 ( & ) https://www.intel.cn/content/www/cn/zh/developer/articles/tool/one…

Technology strategy Pattern 学习笔记1-Context: Architecture and Strategy

Context: Architecture and Strategy 1 Architect and Strategist 1.1 three primary concerns of the architect 1.1.1 Contain entropy(熵-混乱程度,不确定性,惊奇程度,不可预测性,信息量等等) The architect wh…

Python|Pyppeteer获取威科先行文章链接(21)

前言 本文是该专栏的第21篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 本文以“威科先行”的信息库为例,笔者将详细介绍使用pyppeteer“自动滑动页面并翻页”获取威科先行的文章链接。如果对pyppeteer的使用以及知识点不太熟悉的同学,可往前查看本专栏前面…

Modelsim 使用教程(5)——Analyzing Waveforms

一、概述 Wave窗口允许我们以HDL波形和数据的形式查看仿真结果。Wave窗口被划分为多个窗格。通过单击并在任意两个窗格之间拖动该条,可以调整路径名窗格、值窗格和波形窗格的大小。 二、加载一个设计(Loading a Design) 1、打开modelsim 2、…

SQL左连接实战案例

要求:用表df1和表df2的数据,得到df3 一、创建表 CREATE TABLE df1 (姓名 varchar(255) DEFAULT NULL,年龄 int DEFAULT NULL,部门 varchar(255) DEFAULT NULL,id int DEFAULT NULL );CREATE TABLE df2 (部门 varchar(255) DEFAULT NULL,年龄 int DEFAU…

C++ Qt QLineEdit如何响应回车事件

在Qt开发中,回车键的处理很常见,本篇博客介绍在QLineEdit里回车键的处理方法,例如下面的界面: QLineEdit回车键的处理有方式,一是链接returnPressed信号,二是用事件过滤。下面分别介绍这两种方式。 一、returnPressed信号 可以查看QLineEdit的头文件声明,有如下信号:…

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可,进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时,消费者常常感到困惑,不知道如何选择。面对众多选择,选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…

扩容一个新节点

1.删除nodes rm -rf nodes/ 2.挂载本地文件与创建节点 bash build_chain.sh -f ipconf -e /root/tools/fisco-bcos 3.部署节点 bash nodes/127.0.0.1/start_all.sh 4.把共享的gen_node_cert.sh文件下载到本地 cp /root/Desktop/共享文件夹/tools/gen_node_cert.sh ./…

java毕业设计基于springboot+vue的村委会管理系统

项目介绍 采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化&#xf…

初学Flutter:swiper实现

效果展示: flutter swiper 1、安装 card_swiper 2、引入card_swiper import package:card_swiper/card_swiper.dart;3、使用 这里我主要是对官网例子进行实践,主要是5种常用的swiper 1、普遍的swiper //custom swiper class CustomSwiper extends S…

css 图片好玩的一个属性,添加滤镜

鼠标经过效果对比: 上图是改变了图片的饱和度,代码如下: .img-box .v-image:hover {filter: saturate(1.75); }其他滤镜说明如下图: