【docker笔记】docker理论及安装

前言

本笔记来源于尚硅谷docker教学视频
视频地址:https://www.bilibili.com/video/BV1gr4y1U7CY/?spm_id_from=333.337.search-card.all.click
纯手打笔记,来之不易,感谢支持~

Docker简介

docker为什么会出现

想象一下:一个应用在开发这可以跑起来,想要在运维那也跑起来,必须每次都要配置一模一样的环境,但是环境配置相当麻烦,换一台机器就需要重来一次,费事费力

docker给出了一个标准化方案–系统平滑移植,容器虚拟化技术(软件带环境安装,安装的时候把原始环境一模一样的复制过来)

docker是什么

是基于Go语言实现的云开源项目

通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能够做到“一次镜像、处处运行”

将应用打包成镜像,通过镜像成为运行在docker容器上面的实例,而docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器

Docker的出现使得Docker得以打破过去「程序即应用」的观念。

通过镜像(images)将作业系统核心除外,运行应用程序所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

在这里插入图片描述

Docker 借鉴了标砖集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。

docker理念

将源码+运行环境+环境配置+第三方组件 打成一个镜像文件,放在docker环境中去运行

docker相当于VMware、应用的镜像文件相当于centOS7

理念:解决了运行环境和配置问题的软件容器,方便持续继承并有助于整体发布的容器虚拟化技术。

容器与虚拟机比较

传统虚拟机技术

虚拟机(virtual machine)就是带环境安装的一种解决方案。

虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变

Win10VMWareCentos7各种cpu、内存网络额配置+各种软件虚拟机实例

虚拟机的缺点:1 资源占用多 2 冗余步骤多 3 启动慢

容器虚拟化技术

由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为 LXC)

Linux容器是与系统其他部分隔离开的一系列进程,从一个镜像运行,并由该镜像提供支持进程所需的全部文件。

容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

Linux 容器不是模拟一个完整的操作系统 而是对进程进行隔离。

有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。

容器与虚拟机不同,不需要捆绑一整套操作系统 ,只需要软件工作所需的库资源和设置。

系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

对比
  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程(操作系统中的操作系统)
    在这里插入图片描述

  • 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核 且也没有进行硬件虚拟 (操作系统中的一个进程)
    在这里插入图片描述

因此容器要比传统虚拟机更为轻便。 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

能干什么

  • 一次构建、随处运行
  • 更快速的应用交付和部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的计算资源利用

应用容器化运行后,生产环境运行的应用可于开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来的影响,产生新的bug。

当程序异常时,也可以通过测试环境的相同容器进行快读定位和修复

下载地址

官网:http://www.docker.com

Docker Hub 官网:https://hub.docker.com

Docker基本组成

docker的基本组成:镜像、容器、仓库

Docker是一个Client-Server结构的系统

服务端:Docker守护进程,负责处理Docker指令,管理镜像、容器等

客户端:通过命令或者RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令

镜像Image

Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像

Docker镜像(Image)就是一个只读的模板,也相当于是一个root文件系统,相当于容器的源代码

镜像可以用来创建Docker容器,一个镜像可以创建很多容器,容器只包含必要的运行的root文件(最小的linux内核)

docker镜像文件类似于java的类模板,而docker容器实例类似于java中new出来的实例对象

Docker面向对象
容器对象
镜像

容器Container

镜像中的应用程序运行后形成的进程就是容器

docker利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境

容器是用镜像创建的运行实例

容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台

容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和 运行在其中的应用程序

仓库Docker Hub

集中存放在镜像文件的场所

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

总结

Docker本身是一个容器运行载体或称之为管理引擎。

我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是一个image镜像文件

只有通过这个镜像文件才能生成Docker容器实例

image文件可以看作是容器的模板。Docker根据image文件生成的容器实例。

同一个image文件可以生成多个同时运行的容器实例

Docker架构及原理

Docker平台架构图解

在这里插入图片描述

Docker工作原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器 。 容器,是一个运行时环境,就是我们前面说到的集装箱。可以对比mysql演示对比讲解

在这里插入图片描述

整体架构及底层通信原理简述

Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职

Docker运行的基本流程为:

  • 用户是使用Docker Client 与Docker Daemon 建立通信,并发送请求给后者。

  • Docker Daemon 作为Docker架构中的主体部分,首先提供Docker Server 的功能时期可以接受 Docker Client的请求。

  • Docker Engine 执行Docker内部的一些列工作,每一项工作都是以一个Job的形式的存在。

  • Job的运行过程中,当需要容器镜像是,则从Docker Register中下载镜像,并通过镜像管理驱动Graph driver 将下载镜像以Graph的形式存储。

  • 当需要为Docker创建网络环境时,通过网络驱动Network driver创建并配置Docker容器网络环境。

  • 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。

  • Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体容器进行的操作。

在这里插入图片描述

在这里插入图片描述

底层原理

在这里插入图片描述

docker为什么比虚拟机快?

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

docker不需要实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际的物理机的硬件资源

2、docker利用的是宿主机的内核,而不需要加载操作系统os内核

当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核

从而避免引寻、加载操作系统内核返回等比较费时,费资源的过程

Docker安装

  • 确认centos7及以上版本
  cat /etc/redhat-releasecat /etc/redhat-release
  • 卸载旧版本
  yum remove docker \
                    docker-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-engine
  • yum安装gcc相关
  yum -y install gcc

  yum -y install gcc-c++
  • 安装需要的软件包
  yum install -y yum-utils
  • 设置stable镜像仓库
  yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo ---会很慢,因为是外网

  建议:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    ---使用阿里云
  • 更新yum软件的包作为索引
  yum makecache fast     重建一下索引这样以后会快一点儿
  • 正式安装docker
  yum -y install docker-ce docker-ce-cli containerd.io
  • 启动docker
  systemctl start docker
  • 测试
  docker version   查看版本
  docker run hello-world 
  • 阿里云镜像加速
  https://bfobxhms.mirror.aliyuncs.com   加速器地址

  //配置镜像加速器
  //可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
  sudo mkdir -p /etc/docker
  sudo tee /etc/docker/daemon.json <<-'EOF'
  {
    "registry-mirrors": ["https://bfobxhms.mirror.aliyuncs.com"]
  }
  EOF
  sudo systemctl daemon-reload
  sudo systemctl restart docker
  • 那么docker如何卸载呢?
  systemctl stop docker 
  yum remove docker-ce docker-ce-cli containerd.io
  rm -rf /var/lib/docker
  rm -rf /var/lib/containerd

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web前端-JavaScript(Dom基础)

文章目录 1.1 DOM 介绍1.1.1 DOM简介1.1.2 DOM树 1.2. 获取元素1.2.1 根据ID获取元素1.2.2 根据标签名获取元素1.2.3 其它方式获取元素1.2.4 获取特殊元素 1.3 事件基础1.3.1 事件概述1.3.2 事件三要素1.3.3 执行事件步骤1.3.4 鼠标事件 1.4 操作元素1.4.1 操作元素内容1.4.2 属…

Java小案例-MusiQ音乐网站

目录 前言 项目功能 技术栈 后端 前端 开发环境 项目展示 前台-首页-展示 前台-首页-代码 前台-歌单-展示 前台-歌单-代码 前台-歌手-展示 前台-歌手-代码 前台-其他页面展示 后台-登录-展示 后台-登录-代码 后台-首页-展示 首台-首页-代码 后台-其他页面-展…

PyQt6 QColorDialog颜色对话框控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

基于Qt之QChart 图表(优美的曲线图案例)

## 项目演示 平台:ubuntu18.04 Qt版本:QT5.14.2 源码位置GitCode:https://gitcode.com/m0_45463480/QCharts/tree/main ## QChart 图表 自从 Qt 发布以来,给跨平台的用户带来很多便利。在 Qt5.7 之前,Qt 在开源社区版本里没有 Qt Charts(自带的绘图组件库)。这使得像…

SpringBoot的日志管理

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

Kubernetes api-server源码阅读2(Debug Kubernetes篇)

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes api-server源码阅读 系列第二篇&#xff0c;主要讲述如何实现 kubernetes api-server 的 debug 参考b站视频地址&#xff1a;Kubernetes源码开发之旅二 1.本篇章任务 Go-Delve&#xff1a;go语言的…

INFINI Gateway 如何防止大跨度查询

背景 业务每天生成一个日期后缀的索引&#xff0c;写入当日数据。 业务查询有时会查询好多天的数据&#xff0c;导致负载告警。 现在想对查询进行限制–只允许查询一天的数据&#xff08;不限定是哪天&#xff09;&#xff0c;如果想查询多天的数据就走申请。 技术分析 在每…

排序算法——桶排序

把数据放进若干个桶&#xff0c;然后在桶里用其他排序&#xff0c;近乎分治思想。从数值的低位到高位依次排序&#xff0c;有几位就排序几次。例如二位数就排两次&#xff0c;三位数就排三次&#xff0c;依次按照个十百...的顺序来排序。 第一次排序&#xff1a;50 12 …

二级指针的作用 -- 将变量从函数中带出

使用一级指针不能将变量带出 void test(int *p) {static int nub 10; /*使用static是保证函数结束, 变量依然存在, 不然即使将它带出来, 函数结束时这片内存已经被释放了就没有意义了*/p &nub; }int main(void) {int *p NULL;test(p);printf("%d",*p);return …

计算机网络-网络层

计算机网络-网络层 以下笔记整理为哔哩哔哩湖科大教书匠的《计算机网络微课堂》的教学视频。 链接&#xff1a;计算机网络微课堂 1. 网络层概述 1.1 网络层的主要任务是实现网络互联&#xff0c;进而实现数据包在各网络之间的传输。 1.2 要实现网络层任务&#xff0c;需要解决…

java中静态修饰符(static)的使用

static-静态 修饰属性 静态属性,也称为静态变量 类变量等 static 数据类型 属性名; 使用 静态内容独立存放在方法区 静态内容在内存中只有一份,被该类所有对象共享 普通属性所有对象在对象内容中都有一份 可以通过类名.静态属性名的方式直接访问静态属性 静态属性封装之…

Milvus数据一致性介绍及选择方法

1、Milvus 时钟机制 Milvus 通过时间戳水印来保障读链路的一致性&#xff0c;如下图所示&#xff0c;在往消息队列插入数据时&#xff0c; Milvus 不光会为这些插入记录打上时间戳&#xff0c;还会不间断地插入同步时间戳&#xff0c;以图中同步时间戳 syncTs1 为例&#xff0…

MySQL 数据库系列课程 04:MySQL Workbench的安装

Workbench 是 MySQL 官方推出的免费的强大的可视化工具&#xff0c;不熟悉命令行工具的人&#xff0c;可以安装这一款软件&#xff0c;通过编写 SQL 进行数据库中数据的增删改查操作&#xff0c;接下来我们详细说明一下 Workbench 的安装。 一、Windows安装Workbench &#x…

postgresql vacuum流程分析

概述 VACUUM是postgresql MVCC机制不可分割的组成部分。 postgresql在管理同一个元组的多个版本时&#xff0c;采取在堆表页面上从老版本到新版本放置元组的方法&#xff0c;每个元组都记录了xmax和xmin用于判断其可见性。这样的好处是&#xff08;1&#xff09;在索引键没有…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

设计模式篇---职责链模式

文章目录 概念结构实例总结 概念 职责链模式&#xff1a;避免将一个请求的发送者与接收者耦合在一起&#xff0c;让多个对象都有机会处理请求。将接收请求的对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有一个对象能够处理它为止。 比如大学期间&…

DLLNotFoundException:xxx tolua... 错误打印

DLLNotFoundException:xxx tolua... 错误打印 一、DLLNotFoundException介绍二、Plugins文件夹文件目录结构如下&#xff1a; 三、Plugins中的Android文件夹四、Plugins中的IOS文件夹这里不说了没测试过不过原理应该也是选择对应的平台即可五、Plugins中的x86和X86_64文件夹 一…

C# Onnx Yolov8 Detect yolov8n、yolov8s、yolov8m、yolov8l、yolov8x 对比

目录 效果 yolov8n yolov8s yolov8m yolov8l yolov8x 模型信息 项目 代码 下载 C# Onnx Yolov8 Detect yolov8n、yolov8s、yolov8m、yolov8l、yolov8x 对比 效果 yolov8n yolov8s yolov8m yolov8l yolov8x 模型信息 Model Properties ------------------------- d…

持续集成交付CICD:Jira 远程触发 Jenkins 实现更新 GitLab 分支

目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira新建模块 4. Jira 通过Webhook 触发Jenkins流水线 3.Jira 远程触发 Jenkins 实现更新 GitLab 分支 二、问题 1.Jira 配置网络钩子失败 2. Jira 远程触发Jenkins 报错 一、实验 1.环境 &#xff08;1&#xff09;主机 …

Python算法例26 落单的数Ⅳ

1. 问题描述 给定数组&#xff0c;除了一个数出现一次外&#xff0c;所有数都出现两次&#xff0c;并且所有出现两次的数都挨着&#xff0c;找出出现一次的数。 2. 问题示例 给出nums[3&#xff0c;3&#xff0c;2&#xff0c;2&#xff0c;4&#xff0c;5&#xff0c;5]&am…
最新文章