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

一、基础设施即服务 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的方式拉取即可;

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

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

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值