Docker初识(Docker技术集群与应用)

news2024/11/15 18:01:25

一、基础设施即服务 IaaS(Infrastructure as a Service)

eg:购买的云服务器,就是IaaS

提供给客户的服务是对所有设施的利用,包括处理、存储、网络和其他基本的计算资源。客户能够部署和运行任意软件,包括操作系统和应用程序。客户不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如防火墙、负载均衡器等)的控制。

二、平台即服务 PaaS(Platform as a Service)

eg:购买的云数据库,就是Paas

  • 提供给客户的服务是把客户开发或收购的应用程序部署到供应商的云计算基础设施上。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置。

三、软件即服务 SaaS(Software as a Service)

eg:实际上,我们几乎每天都在和SaaS云服务打交道,比如使用百度云盘,使用某管理软件

  • 提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问。客户不需要管理或控制任何云计算基础设施。

补充:云计算服务除了提供计算服务外,还必然提供了存储服务。但是云计算服务当前垄断在私人机构(企业)手中,而他们仅仅能够提供商业信用。对于政府机构、商业机构(特别像银行这样持有敏感数据的商业机构)对于选择云计算服务应保持足够的警惕。一旦商业用户大规模使用私人机构提供的云计算服务,无论其技术优势有多强,都不可避免地让这些私人机构以“数据(信息)”的重要性挟制整个社会。对于信息社会而言,“信息”是至关重要的。另一方面,云计算中的数据对于数据所有者以外的其他用户云计算用户是保密的,但是对于提供云计算的商业机构而言确实毫无秘密可言。所有这些潜在的危险,是商业机构和政府机构选择云计算服务、特别是国外机构提供的云计算服务时,不得不考虑的一个重要的前提。

Docker,作为当今云计算领域的一颗璀璨明星,已经深刻改变了我们对软件开发、部署和运维的认识。从简单的容器化概念出发,Docker不仅仅是一种技术实现,它更是一种服务于云原生时代的哲学和实践。Docker的普及和成功,部分归功于它所提供的轻量级、可移植、自给自足的容器环境,这种环境为应用的快速迭代、灵活部署和高效运维提供了坚实基础。

在云服务架构的演变过程中,Docker的角色不可小观。以其独特的方式,Docker解决了传统虚拟化所面临的资源冗余和效率低下问题,实现了更加高效的资源利用和更快的部署速度。此外,Docker容器的隔离性和安全性,使得它成为多租户环境和微服务架构的理想选择。

从Docker的技术特性来看,它通过容器、镜像和仓库等核心组件,为开发者和运维人员提供了一套完整的解决方案。Docker容器的轻量级特性,意味着在同等硬件条件下,可以运行更多的实例。这不仅提高了资源的利用率,也使得应用的扩展变得更加灵活和迅速。

在实际应用案例中,例如在互联网公司中,Docker的应用可谓是革命性的。许多大型互联网公司,如Netflix、Alibaba和Google,都在其大规模的云服务中广泛采用了Docker容器技术。这些公司利用Docker来打包和部署应用,实现了服务的快速扩展和高效管理。例如,Netflix通过Docker容器实现了其全球服务的高可用性和弹性伸缩,极大地提高了用户体验。

此外,随着云原生技术的发展,Docker也在不断进化。新兴的技术如Kubernetes、Docker Swarm等,都是在Docker的基础上发展起来的,用于更高效地管理容器化应用。这些技术不仅加强了容器的编排和管理能力,也推动了云原生生态系统的成熟和发展。

综上所述,Docker不仅仅是技术层面的革新,更是一场思维和方法论的革命。它通过简化部署、提高效率、支持微服务等方式,极大地推动了云计算和云服务架构的发展。随着技术的不断成熟和应用的深入,Docker将继续在云服务领域扮演重要角色,引领未来技术的发展潮流。

镜像:简单来说是把系统或者程序封装起来的一个文件;且这个文件是不可编辑的,是只读属性的;

  1. Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。

例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。

可以把它称为一个Apache镜像。镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

 Docker容器

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。可以把容器看作一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

注意镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

Docker仓库

Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。

有时候我们会将Docker仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,被称为Ubuntu仓库,其中可能包括16.04、18.04等不同版本的镜像。仓库注册服务器的示例如图2-1所示。

根据所存储的镜像公开分享与否,Docker仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。

目前,最大的公开仓库是官方提供的Docker Hub,其中存放着数量庞大的镜像供用户下载。国内不少云服务提供商(如腾讯云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。

当然,用户如果不希望公开分享自己的镜像文件,Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

当用户创建了自己的镜像之后就可以使用push命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上pull下来就可以了。

注意: 可以看出,Docker利用仓库管理镜像的设计理念与Git代码仓库的概念非常相似,实际上Docker设计上借鉴了Git的很多优秀思想。

本次实验只涉及到一台服务器,大家看到本帖可以自行安装六七台以供后续使用;

先部署阿里的仓库;

rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

yum clean all

再将防火墙和内核安全机制关闭并且永久关闭;

这里直接使用国内阿里提供的镜像文件及仓库安装docker;

# step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3

sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# Step 4: 更新并安装Docker-CE

sudo yum makecache fast

sudo yum -y install docker-ce

出于国家工信部不让使用外国的镜像资源,对镜像仓库进行一些优化;

如果不做优化,默认是从docker官方下载的,是行不通的;

创建一个目录用于存放下载的镜像文件;

cd到该目录;

创建一个文件,用于指定镜像服务器的地方和k8s的一些东西;

指定控制组对管理对cpu、内存、等资源的使用;(分配、限制、隔离)

docker支持的控制组:

cgroupfs;默认的控制组

systemd;但是k8s建议使用systemd作为控制组;

指定代理的链接;

指定不安全的、未经官方授权的,非可信的自己仓库的链接;


启动docker;且设置成永久启动;

查询docker的版本;C/S架构;

如果能够正常的启动起来,应该能查看到两个版本信息;

一个是用户端,一个是服务器端;

打开内核的配置文件对docker进行优化;

当用docker主机生成了一个容器,这个容器要访问外部网络,而外部网络的用户也要通过docker主机访问这个容器,所以内外要通信;

因此,docker主机的内核要提供转发的功能;

对docker来讲,装出一个容器后,容器要访问外部,外部要访问容器,可以有一个地址转发,但是在转发的时候,流量是要经过过滤的,既然有过滤,那么就要有防火墙做这个过滤的规则,但这个规则不需要我们去写,其实意义上我们是可以手动书写防火墙的规则的,但是如果docker主机安装了上千个容器,甚至更多,就没办法手动书写了。

当创建出一个容器后,docker会根据创建的容器的参数自行生成转发的规则,比如说映射的有端口,有地址,自己会生成转发的规则。iptables防火墙;

因为不确定容器用的IPV4的地址还是IPV6的地址,所以直接针对IPV4和IPV6;

然后检查语句的错误且同时让语句即可生效,否则要重启系统;

这里给大家提供脚本的方式快速安装docker及优化的方式;

将这两个文件拉去到服务器中运行下面的脚本即可;

接下来讲解docker容器如何使用;

如何快速地使用docker生成一些平台;

例如:LAMP;

以下所看到的每一个镜像都是包含LAMP的镜像;

第一列是镜像的名称;

第二列是镜像的描述;

第三列是镜像的星级;(根据好评度获取星级:STARS)

如何把镜像拉取到本地???

docker pull +镜像的名称和标签即可;

这个过程会有些慢,因为使用的是“代理”的方式拉取的镜像;

那么如何使用国内提供的镜像呢???

浏览器打开这个网站;这个网站就是国内提供的镜像源;

https://atomhub.openatom.cn

这个网站的成员单位如下:

例如要拉去nginx的镜像,可以搜索nginx;

然后点击要拉去的镜像,会获得拉取的链接;

粘贴命令到命令行即可;

尝试下载centos7的镜像;

如何查看本机的镜像???

第一列镜像的名称;

第二列镜像的标签;

第三列镜像的ID;

第四列镜像的创建时间;

第五列镜像的大小;

如何给镜像修改名字???

如果标签栏(TAG)是latest那么修改的时候可以不用指定原标签名;

然后再去查看就会发现多了一个镜像;

比如说要删除镜像可以引用镜像名字加标签列,或者ID列;

用ID的时候只要保证ID的前几位不重复即可,但是可以发现,重命名出来的ID是重复的,这时就不能使用ID引用的方式了。

如何删除镜像???

i:image(镜像的意思)

注意:镜像名和标签用引号(:)隔开;

在生产环境中,尽量避免现用现拉取的方式,首先耽误的时间较久,且如果提供镜像服务器的网站如果请求忙是很让人头疼的一件事;

因此,可以提前将经常使用的镜像拉取下来,然后做一个导出的动作,然后每次用的时候导入即可;

命令:

如何导出???

注意:

该命令和以往的不同,先指定导出之后的名称,然后再指定被导出的镜像的名字及标签;

那么被导出到了哪个地方呢???

会放置在当前目录下;

注意:是当前目录下;

如果想用的时候怎么导入呢???

此时可以模拟场景,删除本地的镜像,然后将导出的镜像导入进去;

如何导入???

因为是在当前目录下存放的所以直接引用即可,如果是其他目录,需要指定绝对路径;

再去查看;

且会发现,镜像的ID不会因为导出和导入的动作而改变;

因此,这样就解决了现用现拉取的场景,可以将经常使用的镜像提前拉取,然后做一个导出,用的时候可以直接导入即可;

如何"运行镜像"???

就是把镜像生成一个容器,因为镜像本身是静态的,容器才是运行起来的一个程序;(镜像只是一个只读的模版,利用这个模版可以生成若干个容器。)

创建容器:

只是一个创建的过程,不代表容器是运行状态的。

简单介绍下create创建时加的选项;

i:保持运行打开状态,让容器的输入环境保持一个打开的状态。

比如说要登录这个容器,仅仅是create的话,是不运行该容器的。

t:为该容器分配一个终端,如果不分配终端,登录进去没地方输入命令。

d:以守护进程的方式运行该容器。

但仅仅是创建的动作,所以选项“d”不能加上去,加上去会报错的。

这样一个容器就被创建了出来。

前面提到如果容器的标签为latest的话,就可以省略。

latest:最新的,最近的。

查看本机任何状态的容器;

-a:所有;

然而容器的名称也是可以在创建的时候指定出来的;

加--name的选项,再加上创建出来容器的名字即可。

注意:容器的名字不能重复,如果创建同一个名字的容器系统会报错。

当前容器的状态是创建好的(未启动的)

启动容器:

可以指定容器的ID;

此时容器的状态就为UP了,且会显示容器运行的时间。

注意:什么时候容器会出入UP的状态呢???

该容器里面有一个正在运行的程序,不论是什么程序,才会处于UP的状态。

简例说明:

水杯里面得有水,才可以被称作为水杯,水杯里面没有水就不叫水杯。

如何直接让容器创建之后直接运行起来,而不是创建以后再手动的启动该容器。

-d:以守护进程的方式运行;

while循环,让该容器运行bash解释器,且进入“死循环”

这样容器内就会永远运行一个程序了。

另外一种同样效果的方式;

-d:让容器在后台以守护进程的方式运行。

-i:让容器保持持续打开的状态。

-t:提供终端。

centos镜像生成容器的时候自动运行/bin/bash程序,所以该容器会自动运行。

如果有一个镜像里面没有直接运行/bin/bash这个程序,那么可以在创建的时候直接手动指定/bin/bash程序。

如何登录到容器的内部???

但是不建议登录到容器内部修改东西,因为容器是封装好的。

修改参数,可能会导致容器不能正常运行。

指定/bin/bash作为解释器。

exit退出。

如果有多个容器,而且这些容器可以正常的运行,那么能否针对容器进行导出呢???

还是放置在了当前目录下。

如何针对容器进行导入呢???

但是注意写法为镜像的格式。

那么得出,容器导出再导入进去就变成了镜像了。

这里再次提供导出脚本和导入脚本;

以及打包好的镜像包;

直接使用xftp的方式拉取即可;

运行导出镜像的脚本,会把本机已有的镜像全部导出到该脚本同目录下。

运行导入的脚本,会把该脚本所在的目录下导出的镜像文件导入到系统中。

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

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

相关文章

LLM大模型学习:探索LLM的精髓-理解Prompts概念与LangChain快速应用技巧”

LLM 中什么是Prompts?如何使用LangChain 快速实现Prompts 一 Prompt是一种基于自然语言处理的交互方式,它通过机器对自然语言的解析,实现用户与机器之间的沟通。 Prompt主要实现方式是通过建立相应的语料库和语义解析模型,来将自…

《A Few Useful Things to Know about Machine Learning》论文导读

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl机器学习作为人工智能领域的重要分支,近年来得到了广泛的关注和应用。Pedro Domingos的经典论文《A Few Useful Things to Know about Machine Learning》为我们提供了对机器学习深入且全面的理解…

Java方法的定义,即“函数“的定义!

方法的作用 提高代码的复用性,写一次,你需要的时候直接去调用即可。 定义一个函数方法 [修饰符1 修饰符2 ...] 返回值类型 方法名(形参){Java语句;... ... ... }初次接触方法的举例:两个整数的求和方法 根据上面的例子我们来分…

虚拟机扩充磁盘空间

本人使用的VMware首先关闭虚拟机在设置中进行磁盘扩展,输入扩展的空间 具体扩展步骤 fdisk /dev/sda输入p,查看分区情况输入n新建一个分区,还有之后两步,全部默认输入w保存分区fdisk -l使用vgdisplay查看卷组信息:vgdi…

动手学深度学习(pytorch)学习记录26-卷积神经网路(LeNet)[学习记录]

目录 LeNet模型训练 LeNet 总体来看,LeNet(LeNet-5)由两个部分组成: 卷积编码器:由两个卷积层组成; 全连接层密集块:由三个全连接层组成。 每个卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均…

Docker 清理和查看镜像与容器占用情况

查看容器占用磁盘大小 docker system df 查看单个image、container大小: docker system df -v 清理所有废弃镜像与Build Cache docker system prune -a

【解决内存泄漏的问题】 Qt 框架中的父子对象关系会自动管理内存,父对象会在其销毁时自动销毁所有子对象。

修改前的代码 这段代码可能会出现内存泄漏问题,主要原因是构造函数中创建的 LoginDialog 和 RegisterDialog 对象未在合适的地方被正确释放。具体分析如下: 1. 构造函数中的问题 _login_dlg new LoginDialog(); setCentralWidget(_login_dlg); _login…

【北京迅为】《STM32MP157开发板使用手册》- 第十二章 编译Linux内核

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

运算放大器中的反馈

运算放大器中的反馈:原理、类型与应用 运算放大器(Operational Amplifier, 简称Op-Amp)是现代电子电路中的重要组成部分,被广泛应用于信号处理、放大、滤波等场合。而反馈技术则是运算放大器电路的核心之一,直接影响其…

代码随想录算法训练营第二十二天| 491. 递增子序列、46. 全排列、47. 全排列Ⅱ

今日内容 Leetcode. 491 递增子序列Leetcode. 46 全排列Leetcode. 47 全排列Ⅱ Leetcode. 491 递增子序列 文章链接:代码随想录 (programmercarl.com) 题目链接:491. 非递减子序列 - 力扣(LeetCode) 本题也是一个子集问题&#…

【AI绘画】Midjourney后置指令--seed、--tile、--q、--chaos、--w、--no详解

博客主页: [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney后置指令--seed测试1测试2如何获取未指定种子图片的随机种子注意点 💯Midjourney后置指令--tile测试 💯Midjourney后置指令--q(or-…

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用&a…

chrome浏览器如何设置自动播放音视频

使用场景: 有些场景需要打开页面后,自动播放视频或者视频流,这时候发现无法播放,打开浏览器控制台发现有下面的错误提示:NotAllowedError: play() failed because the user didnt interact with the document first 。…

顶级出图效果!免费在线使用FLux.1 模型,5s出图无限制!

最近发现一个可以在线免费使用 FLux.1 模型 生成图片的AI工具。 先看效果图: 工具不需要登录即可使用,目前还是完全免费的,国内可以直接使用。 在提示词输入框直接输入提示词即可,选择图片比例之后,直接生图。 出图的…

安全运营之浅谈SIEM告警疲劳

闲谈: 刚开始学习SIEM、态势感知这类产品的时,翻阅老外们的文章总是谈什么真阳性,假阳性告警、告警疲劳,当时在国内资料中没找到很合理的解释,慢慢就淡忘这件事了。随着慢慢深入工作,感觉大概理解了这些概念…

‌技术人必看!如何科学规划,从需求出发打造完美技术方案

引言 在互联网架构师的角色中,我们面临的挑战不仅仅是编写代码,更重要的是深入理解需求、设计系统,并确保我们的解决方案能够稳定、高效地运行。本文将详细介绍从新需求提出到技术方案发布的全过程。 1. 理解现有需求和场景 在开始一个新的…

信息学奥赛初赛天天练-87-NOIP2014普及组-完善程序-矩阵、子矩阵、最大子矩阵和、前缀和、打擂台求最大值

1 完善程序 最大子矩阵和 给出 m行 n列的整数矩阵,求最大的子矩阵和(子矩阵不能为空)。 输入第一行包含两个整数 m和 n,即矩阵的行数和列数。之后 m行,每行 n个整数,描述整个矩阵。程序最终输出最大的子矩阵和。 (最…

SAP中mmpv自动过账—附带源码

想省事儿的直接拖到后面查看代码 思路分析 实现逻辑:初版 前台测试:选择屏幕确认公司代码。必要情况手动开账勾选前台执行按钮 1.1去marv表找公司代码的当前账期,简单运算获取下一个账期。1.2执行bdc,模拟前台手动开账期1.3执行的必要信息存日志表。例:修改人(开账期的人…

FastAPI 进阶:使用 BackgroundTasks 处理长时间运行的任务

在 FastAPI 中,BackgroundTasks 是一个功能,它允许你在发送响应给客户端之后执行后台任务。这些任务对于不需要客户端等待的操作非常有用,比如发送电子邮件通知或处理数据。然而,当服务器重启时,由于 BackgroundTasks …

C++: set与map容器的介绍与使用

本文索引 前言1. 二叉搜索树1.1 概念1.2 二叉搜索树操作1.2.1 查找与插入1.2.2 删除1.2.3 二叉搜索树实现代码 2. 树形结构的关联式容器2.1 set的介绍与使用2.1.1 set的构造函数2.1.2 set的迭代器2.1.3 set的容量2.1.4 set的修改操作 2.2 map的介绍与使用2.2.1 map的构造函数2.…