docker基础1——架构组成、安装配置

文章目录

  • 一、发展起源
    • 1.1 传统虚拟化与容器虚拟化
    • 1.2 docker底层核心技术
      • 1.2.1 命名空间
      • 1.2.2 控制组
    • 1.3 docker工作方式
    • 1.4 docker容器编排
    • 1.5 docker优劣势
    • 1.6 docker架构组成
  • 二、yum安装docker
  • 三、配置docker加速器

一、发展起源

背景了解:

  1. 容器是内核里的一项技术。最早的容器技术可以追遡到1982年Unix系列操作系统上的chroot工具。
  2. 最早的完整容器技术是LXC(LinuX Container)。它是通过一组简易使用工具和模板来实现的一个容器技术方案,虽然简化了容器技术的使用,但比起直接通过内核调用来使用容器技术,也没有那么简单,因为我们需要学习LXC的命令工具,而且LXC的隔离性也没有做的很好。
  3. 后来docker出现了。早期是通过对LXC进行二次封装,通过LXC做容器管理引擎,但在后来发现LXC不太好用,于0.9版本开始支持自研发的libcontainer,再到后面开始支持runc等引擎,功能也是越来越强大。
  4. 当然,发展到现在,也有其他容器引擎了,比如containerd等等。
    在这里插入图片描述

1.1 传统虚拟化与容器虚拟化

对比图:
在这里插入图片描述

  • 虚拟化分两类:
    1. 主机级虚拟化:全虚拟化、半虚拟化。
    2. 容器级虚拟化。
  • 主机级虚拟化有kvm、exsi等等,是在操作系统上安装软件,再在软件上安装各个虚拟机,以此进行资源隔离。
  • 容器级虚拟化docker技术是在操作系统上安装软件,直接启动docker程序,在程序里创建虚拟命名空间,每个命名空间相当于一个虚拟机,进行逻辑上的资源隔离。
  • 容器隔离开的资源:
    1. UTS(主机名与域名)
    2. Mount(文件系统挂载树)
    3. IPC
    4. PID进程树
    5. User
    6. Network(tcp/ip协议栈)

1.2 docker底层核心技术

  • 从操作系统功能上看,docker底层依赖的核心技术主要包括Linux操作系统的命名空间、控制组、联合文件系统和Linux虚拟网络支持。

1.2.1 命名空间

  • 命名空间(Namespaces)是Linux内核针对实现容器虚拟化而引入的一个强大特性。
  • 每个容器都可以拥有自己独立的命名空间,运行其中的应用都像是在独立的操作系统中运行一样。
  • 命名空间保证了容器间彼此互不影响。
namespaces系统调用参数隔离内容docker支持的内核版本
UTSCLONE_NEWUTS主机名和域名2.6.19
IPCCLONE_NEWIPC信号量、消息队列和共享内存2.6.19
PIDCLONE_NEWPID进程编号2.6.24
NetworkCLONE_NEWNET网络设备、网络栈、端口等2.6.29
MountCLONE_NEWNS挂载点(文件系统)2.4.19
UserCLONE_NEWUSER用户和用户组3.8

1.2.2 控制组

  • 控制组(CGroups)是Linux内核的一个特性,用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,Docker才能避免多个容器同时运行时的系统资源竞争。
  • 控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制。
  • 控制组功能:
    1. 资源限制(Resource Limitting)组可以设置为不超过设定的内存限制。比如:内存子系统可以为进行组设定一个内存使用上限,一旦进程组使用的内存达到限额再申请内存,就会发出Out of Memory警告。
    2. 优先级(Prioritization)通过优先级让一些组优先得到更多的CPU等资源。
    3. 资源审计(Accounting)用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间。
    4. 隔离(Isolation)为组隔离命名空间,这样一个组不会看到另一个组的进程、网络连接和文件系统。
    5. 控制(Control)挂起、恢复和重启等操作
CGroups能限制的资源释义
blkio块设备IO
cpuCPU
cpuacctCPU资源使用报告
cpuset多处理器平台上的CPU集合
devices设备访问
freezer挂起或恢复任务
memory内存用量及报告
perf_event对cgroup中的任务进行统一性能测试
net_clscgroup中的任务创建的数据报文的类别标识符

1.3 docker工作方式

  • 为了使容器的使用更加易于管理,docker采取一个用户空间只跑一个业务进程的方式,在一个容器内只运行一个进程。
  • 比如我们要在一台主机上安装一个nginx和一个tomcat,那么nginx就运行在nginx的容器中,tomcat运行在tomcat的容器中,二者用容器间的通信逻辑来进行通信。

1.4 docker容器编排

概念:

  • docker自身没有编排功能,在docker的基础上能够把应用程序之间的依赖关系、从属关系、隶属关系等等反映在启动、关闭时的次序和管理逻辑中,这种功能被称为容器编排。

常见容器编排工具:

  1. machine+swarm(把N个docker主机当一个主机来管理)+compose(单机编排)。
  2. mesos(实现统一资源调度和分配)+marathon
  3. kubernetes --> k8s

1.5 docker优劣势

  1. 删除一个容器不会影响其他容器。
  2. 调试不便,占空间(每个容器中都必须自带调试工具,比如ps命令)。
  3. 分发容易,真正意义上一次编写到处运行,比java的跨平台更彻底。
  4. 部署容易,无论底层系统是什么,只要有docker,直接run就可以了
  5. 分层构建,联合挂载
    在这里插入图片描述

注意事项:

  1. 在容器中有数据称作有状态,没有数据称作无状态。在容器的使用中,我们应以有状态为耻,以无状态为荣。数据不应该放在容器中,而应放置于外部存储中,通过挂载到容器中从而进行数据的存储。

1.6 docker架构组成

  • docker有两个版本,商业版docker-ee和社区版docker-ce。
  • 安装了docker服务端的叫做docker服务器,安装docker客户端的叫做client,一般情况下都是安装在一台服务器上。
  • 客户端使用docker命令时,会把指令发送给服务端的守护进程,有它去拉取远程仓库中的镜像并创建启动容器。
  • 镜像是静态的,容器是动态的,容器存在生命周期的概念,镜像与容器的关系类似于程序与进程的关系。镜像类似于文件系统中的程序文件,而容器则类似于将一个程序运行起来的状态,也即进程。在这里插入图片描述

二、yum安装docker

  • 清华大学开源网站。

1.下载安装源。

//修改成国内清华地址,不然拉取默认的官网速度很慢。
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo --no-check-certificate
sed -i 's@https://download.docker.com@https://mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo    
sed -i 's@$releasever@7@g' /etc/yum.repos.d/docker-ce.repo

2.安装。

yum -y install docker-ce

3.安装Docker后,在/sys/fs/cgroup/memory/目录下看到对Docker组应用的各种限制项。
在这里插入图片描述

三、配置docker加速器

  • docker-ce的配置文件是/etc/docker/daemon.json,此文件默认不存在,需要我们手动创建并进行配置,而docker加速器就是通过配置此文件来实现的。
  • 配置加速器是为了提高干活效率,不然默认使用的是国外官网的很慢。

docker加速方式:

  1. docker cn
  2. 中国科技大学加速器
  3. 阿里云加速器(需要通过阿里云开发者平台注册帐号,免费使用个人私有的加速器)

1.启动docker。

systemctl enable --now docker

2.配置加速器。

cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

3.重启服务,查看加速器。

systemctl restart docker
docker info

在这里插入图片描述
4.也可以配置多个加速器。这里添加一个阿里云加速器,中间用逗号隔开。

cat /etc/docker/daemon.json 
{"registry-mirrors": ["https://registry.docker-cn.com","https://11vuihex.mirror.aliyuncs.com"]
}//重启服务。
systemctl  restart docker
//查看详细信息。
docker info

在这里插入图片描述

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

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

相关文章

上市公司前端开发规范参考

上市公司前端开发规范参考 命名规则通用约定文件与目录命名HTML命名CSS命名JS命名 代码格式通用约定HTML格式CSS格式JS格式注释 组件组件大小单文件组件容器组件组件使用说明Prop指令缩写组件通讯组件的挂载和销毁按需加载第三方组件库的规定 脚手架使用规范移动端脚手架PC端脚…

前端 Jenkins 自动化部署

由于公司使用自己搭建的 svn 服务器来进行代码管理&#xff0c;因此这里 Jenkins 是针对 svn 服务器来进行的配置&#xff0c;其实跟Git 配置基本一致。 在没有自动化部署前 之前项目每次修改之后都需要本地 ​​npm run build ​​一次手动发布到服务器上方便测试和产品查看…

Jenkins | 获取凭证密码

目录 方法一&#xff1a;查看所有账号及密码 方法二&#xff1a;查看指定账号密码 方法一&#xff1a;查看所有账号及密码 Jenkins > 系统管理 > 脚本命令行 com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{i…

nginx基础1——工作原理、安装配置、命令参数

文章目录 一、基本了解1.1 特性优点1.2 功能应用1.3 工作模块分类1.4 模块配置方法 二、工作原理三、安装与配置四、常用命令 一、基本了解 nginx简介&#xff1a; nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#x…

前端学习——ajax (Day1)

AJAX 概念和 axios 使用 axios 使用 练习 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

SpringBoot 整合 RabbitMQ demo

Rabbit Windows安装教程 本文只做Demo案例的分享&#xff0c;具体只是需自行百度 一、生产者 1.application.properties 配置Rabbit的基本信息 #rabbit 主机IP spring.rabbitmq.host127.0.0.1 #rabbit 端口 spring.rabbitmq.port5672 #rabbit 账号 可自行创建 这里是默认的 …

网络知识整合——Web页面请求的历程

Web页面请求的历程 内部涉及知识&#xff1a;一、准备:DHCP、UDP、IP 和以太网二、仍在准备&#xff1a;DNS和ARP三、仍在准备&#xff1a;域内路由选择到DNS服务器四、Web客户-服务器交互&#xff1a;TCP和HTTP五、HTTP请求响应格式Requests部分Responses 部分 下载一个Web页面…

ES6迭代器、Set、Map集合和async异步函数

目录 迭代器 Iterator 的作用 Iterator 的遍历过程 Set Map集合 map和对象区别? async异步函数 迭代器 迭代器&#xff08;Iterator&#xff09;就是这样一种机制。它是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&…

介绍性能压力测试的重要性

在当今数字化时代&#xff0c;软件和应用程序的性能对于用户体验和业务成功至关重要。为了确保系统在面临高负载和压力时能够正常运行&#xff0c;性能压力测试成为一项不可或缺的活动。本文将介绍性能压力测试的重要性。 性能压力测试是一种通过模拟实际场景中的负荷和用户访问…

2023-7-19-第二十式迭代器模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

React native 已有项目升级兼容web

基础 概念 | webpack 中文文档 | webpack 中文文档 | webpack 中文网 深入理解Webpack及Babel的使用 - 掘金 Introduction to React Native for Web // React Native for Web Webpack 是一个现代的 JavaScript 应用程序的静态模块打包工具&#xff0c;它将应用程序所依赖的各…

【C++】STL---vector基本用法介绍

个人主页&#xff1a;平行线也会相交&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…

五十、Spring

1.Spring概述 1.1 Spring是什么 Spring是分层的 Java SE/EE应用 full-stack(全栈式) 轻量级开源框架。 提供了表现层 SpringMVC和持久层 Spring JDBC Template以及 业务层 事务管理等众多的企业级应用 技术&#xff0c;还能整合开源世界众多著名的第三方框架和类库&#xf…

4个顶级WooCommerce商城多站点库存同步WordPress插件

经营几家网上商店是令人兴奋的。但是&#xff0c;这也是一项艰巨的工作&#xff0c;尤其是当您意识到需要同步这些商店的库存时。好消息是&#xff0c;有 WooCommerce 多站点库存同步插件和选项可以加快速度。 WooCommerce 多站点网络可让您将所有在线商店无缝地安置在一个屋檐…

【Tauri + React 实战】VCluster - 了解技术选型与开发环境配置

VCluster A React Tauri App as visualizer of apps cluster on windows. 背景介绍 VCluster是一个在开发环境下&#xff0c;用以对一系列应用集群&#xff08;如分布式、微服务&#xff09;进行可视化管理的桌面应用程序&#xff0c;目标是实现类似 docker-compose 那样的集…

TabBar和TabBarView实现顶部滑动导航

home.dart子页面主要代码&#xff1a; import package:flutter/material.dart;class HomePage extends StatefulWidget {const HomePage({super.key});overrideState<HomePage> createState() > _HomePageState(); }class _HomePageState extends State<HomePage&…

windows环境hadoop报错‘D:\Program‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

Hadoop版本为2.7.3&#xff0c;在环境配置好后&#xff0c;检查hadoop安装版本&#xff0c;报如标题所示错误&#xff0c;尝试网上主流的几种方法均无效。 错误&#xff1a;windows环境hadoop报错’D:\Program’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 错误方…

【技巧】Maven重复依赖分析查找

【技巧】Maven重复依赖分析查找 遇到奇葩的错误可以考虑是不是依赖冲突了 比如同一段代码 再这个项目中好好的 另一个项目中不能用等 idea安装插件 maven helper 打开pom文件 输入要查找的依赖 将不用的排除掉 右键排除即可

在阿里云平台注册一个域名

我们访问阿里云官网 阿里云 然后 我们右上角点击登录 然后 按正常操作流程登录 登录成功后 我们点击控制台 我们将鼠标 移入 右上角 图片指向的位置 我们点击域名 进入界面后点击注册域名 在输入框中输入域名内容 然后 按回车 然后弹出的列表 我们可以选一个未注册的 点击…

Druid-排查conditionDoubleConstAllow配置问题(double const condition)

Druid-排查conditionDoubleConstAllow配置问题(double const condition) 报错信息 Caused by: java.sql.SQLException: sql injection violation, dbType postgresql, druid-version 1.2.18, double const condition : SELECT * FROM test where 11 AND TRUE AND TRUE关键词&…