【docker笔记】docker理论及安装

news2024/10/2 12:25:24

前言

本笔记来源于尚硅谷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.coloradmin.cn/o/1332529.html

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

相关文章

若依vue如何展示一个HTML页面(或者展示Markdown文档)

一. 前言 ⚠ 本文是展示Markdown的方法,不能直接前端编辑Markdown文档. 二. 准备部分 用Typora编辑器打开需要导出html页面,我这里使用Typora来导出 1. 先将md文件导出成html 2. 将导出好的文件放在若依vue的pubilc下(文件可以是中文) 三. 代码部分 1.使用v-html来展示HT…

【算法】利用双指针解决算法题(C++)

文章目录 1. 前言2. 双指针法引入283.移动零 3. 使用双指针法解决算法题1089.复写零202.快乐数11.盛最多水的容器[611.有效三角 形的个数](https://leetcode.cn/problems/valid-triangle-number/description/)LCR179.查找总价格为目标值的两个商品15.三数之和 1. 前言 双指针并…

AcWing 889. 满足条件的01序列(卡特兰数应用)

满足条件的01序列 假设长度为n个序列要求满足题意1的前缀0的个数不能超过1的个数 将问题抽象为从(0, 0)到(n, n) 向上走一个代表这一步对应序列中的值是1&#xff0c;向右走代表序列中的值是0 要想满足1的前缀0的数量大于1的数量就需要满足所有路过的途径在y x这个函数个下面…

java进阶学习笔记

学习java深度学习&#xff0c;提升编程思维&#xff0c;适合掌握基础知识的工作者学习 1.反射和代理1.1 概念介绍1.2应用场景1.3 反射-reflect1.3.1 获得类-Class1.3.2 获得类的字段-Field1.3.3 动态访问和修改对象实例的字段1.3.4 获得类方法-Method1.3.5 调用方法.invoke1.3.…

SpringBoot多模块项目下的包和组件扫描

问题阐述&#xff1a;为了简化项目代码&#xff0c;我们通常会使用多模块化代码进行开发&#xff0c;但是会出现如下问题&#xff1a;写代码时能够正常扫描或注入其他模块的Service&#xff0c;但是启动类一启动就报错Consider defining a bean of type com.xiaoqian.common.se…

【MATLAB第85期】基于MATLAB的2023年智能进化算法/元启发式算法合集(持续更新)

【MATLAB第85期】基于MATLAB的2023年智能进化算法/元启发式算法合集&#xff08;持续更新&#xff09; 1.海象进化算法&#xff08;Walrus Optimization Algorithm&#xff09; 作者&#xff1a;Pavel Trojovsk and Mohammad Dehghani 2.暴龙优化算法&#xff08;Tyrannosa…

java设计模式学习之【责任链模式】

文章目录 引言责任链模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用日志示例代码地址 引言 在现实生活中&#xff0c;常常会遇到这样的场景&#xff1a;一个请求或命令需要经过多个层级的处理。例如&#xff0c;一个行政审批流程可能需要通过多个部门的审…

H5 cryptojs加密算法

1. cryptojs是什么&#xff1f; 有时候项目涉及到的敏感数据比较多&#xff0c;为了信息安全&#xff0c;我们常常需要对一些数据进行接口加密处理&#xff0c;如编码、将明文转化为暗文、加密比对、AES BASE64 算法加密等。 接下来我们就分别说一下 CryptoJS 常用的一些方法。…

爬虫是什么?起什么作用?

【爬虫】 如果把互联网比作一张大的蜘蛛网&#xff0c;数据便是放于蜘蛛网的各个节点&#xff0c;而爬虫就是一只小蜘蛛&#xff0c;沿着网络抓取自己得猎物&#xff08;数据&#xff09;。这种解释可能更容易理解&#xff0c;官网的&#xff0c;就是下面这个。 爬虫是一种自动…

jvm对象探究

hostpot虚拟机对象探究 jvm虚拟机创建对象的流程 ava虚拟机&#xff08;JVM&#xff09;创建对象的过程包括以下步骤&#xff1a; 类加载&#xff1a; 首先&#xff0c;JVM会检查对象的类是否已经被加载。如果该类还没有被加载&#xff0c;JVM会通过类加载器加载该类的字节码…

TCP服务器的演变过程:多进程实现一对多的TCP服务器

使用多进程实现一对多的TCP服务器 一、前言二、新增使用的fork()函数三、实现步骤四、完整代码五、TCP客户端5.1、自己实现一个TCP客户端5.2、Windows下可以使用NetAssist的网络助手工具 小结 一、前言 手把手教你从0开始编写TCP服务器程序&#xff0c;体验开局一块砖&#xf…

【C++】unordered_set/unordered_multiset/unordered_map/unordered_multimap

我们下面来学习C的另外两个容器&#xff1a;unordered_set和unordered_map 目录 一、unordered系列关联式容器 二、unordered_map 2.1 unordered_map的介绍 2.2 unordered_map的接口说明 2.2.1 unordered_map的构造 2.2.2 unordered_map的容量 2.2.3 unordered_map的迭…

室内设计品牌网站搭建的作用是什么

随着人们生活质量日益提升&#xff0c;对其自身的居住环境也有了较高要求&#xff0c;每个人审美不一样&#xff0c;无论自己居住的房屋还是公司办公/商场等场景都需要设计不同的内容&#xff0c;还有各种设施的摆放及类别等都有讲究&#xff0c;尤其对公司及商场等环境&#x…

动态规划算法练习题

45. 跳跃游戏 II 中等 2K 相关企业 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j &…

EasyExcel 导出文件的格式化

阿里开源的这个库&#xff0c;让 Excel 导出不再复杂&#xff08;既要能写&#xff0c;还要写的好看&#xff09; 之前聊了 EasyExcel 的内容导出&#xff0c;本文主要说一下导出文件的格式化&#xff0c;格式化包括工作表/单元格样式和内容格式化。毕竟&#xff0c;有时候还是…

【leetcode21】合并两个有序链表Java代码讲解

12.22 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2…

Appium Server 启动失败常见原因及解决办法

Error: listen EADDRINUSE: address already in use 0.0.0.0:4723 如下图&#xff1a; 错误原因&#xff1a;Appium 默认的4723端口被占用 解决办法&#xff1a; 出现该提示&#xff0c;有可能是 Appium Server 已启动&#xff0c;关闭已经启动的 Appium Server 即可。472…

音视频类App广告变现如何破局,最大化广告变现收益,让应用增收?

音视频App已然成为了我们日常获取、发布和交换信息的重要方式&#xff0c;在音视频行业不断的拓展中&#xff0c;用户的渗透率提升。 据数据显示&#xff0c;我国网络视听用户的规模已达9亿人次&#xff0c;网民使用率也突破了90%。庞大的市场规模和用户需求吸引了大批开发者和…

SRE - 监控建设

监控⽂档 随着信息技术的迅速发展及其在商业和工业环境中的广泛应用,系统的可靠性成为了组织的生存之本。Site Reliability Engineering(SRE)作为一种实践的结合体,广泛地用于确保和提升软件系统的可靠性。其中,它的一个重要组成部分是制定和监控服务的关键性能指标(Ser…

行为型设计模式(五):访问者模式 观察者模式

访问者模式 Visitor 1、什么是访问者模式 访问者模式允许定义一些不改变数据结构的前提下的操作。通过这种方式&#xff0c;可以在不修改元素类的情况下定义新的操作。访问者模式常用于对复杂对象结构进行操作&#xff0c;而又不希望在这些对象上破坏封装性。 2、为什么使用…