| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 2021-09-21 -> 正文阅读 |
|
[系统运维]2021-09-21 |
一、Docker背景1.常见项目特点2.Docker应用场景
二、Docker基础1.Docker简介背景问题1: 某IT部门要上线一个项目。常规操作,直接去线上服务器,拷贝一个tomcat,然后改端口号,然后部署应用到webapps文件夹下,重启就好。一个服务器上可能会部署多个应用服务。如果某个应用出现问题,CPU100%,可能这个服务器上的其他应用也会出现问题。对于一个大型应用拆分为几十个微服务,分别交由不同的团队开发,不同团队之间水平参差不齐。如果还采用这种部署方式,你的应用可能会因为另一个团队的应用发生意外。因部署在了同一台服务器上,导致全部出现问题。 问题2∶ 开发和线上代码(同一套代码)问题。开发阶段部署一套软件环境,测试人员在开发中测试没有问题,运维进行部署。但是正式部署到服务器时,发生了问题(启动参数、环境问题、漏配了参数)等意外。 问题3∶ 随着微服务技术的兴起,一个大的应用需要拆分成多个微服务。多个微服务的生成,就会面临庞大系统的部署效率,开发协同效率问题。然后通过服务的拆分,数据的读写分离、分库分表等方式重新架构,而且这种方式如果要做的彻底,需要花费大量人力物力。可能需要部署很多个服务器。 问题4; 2.什么是Docker、Docker应用场景
3.docker的好处1、简化程序: Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。 2、避免选择恐惧症: 3、节省开支 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。 4、持续交付和部署 对开发和运维(Devops)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Integration)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署。而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像 5、更轻松的迁移 由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况 4.应用场景Docker的应用场景web应用的自动化打包和发布。自动化测试和持续集成、发布。 在服务型环境中部署和调整数据库或其他的后台应用。 从头编译或者扩展现有的openShift或Cloud Foundry平台来搭建自己的 PaaS环境。 云计算+大数据时代开发一套应用程序代码、服务器(Linux)、安装开发环境工具包(JDK/Tomcat/MySq1/Nginx/RabbitNQ/Redis/Solr) IaaS : (Infrastructure-as-a-Service)(基础设施即服务) 阿里云、百度云、腾讯云、华为云。
PaaS: (Platform as a Service)(平台即服务)
SaaS: (Software-as-a-Service)(软件即服务)
例子:一份西红柿炒鸡蛋, Iass:自己买锅(服务器),食材(所需软件,搭建环境),烹饪(开发); PaaS:锅和食材准备好了,做菜即可 Saas:自己花钱到外卖平台,想吃啥买啥 5.虚拟机区别架构
? 虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x、AMD-V会通过一 个hypervisor层来实现对资源的彻底隔离。而容器则是操作系统级别的虚拟化,利用的是内核的Cgroup和Namespace特性,此功能通过软件来实现,仅仅是进程本身就可以实现互相隔离,不需要任何辅助。
若需要资源的完全隔离并且不考虑资源的消耗,可以使用虚拟机.若是想隔离进程并且需要运行大量进程实例,应该选择Docker容器。 6.Docker架构Docker基本概念Docker包括三个基本概念
Docker引擎Docker使用客户端-服务器(C/S)架构模式,使用远程APlI来管理和创建Docker容器。Docker容器通过 Docker镜像来创建。 镜像、容器的类比镜像(Image )和容器( Container )的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学Docker时常常会混淆容器和虚拟机。 前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失 仓库和镜像Docker镜像是一个存入镜像的仓库。通常被部署在互联网服务器或者云端。Docker Hub( https://hub.docker.com)提供了庞大的镜像集合供使用。 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 分层存储因为镜像包含操作系统完整的 root文件系统,其体积往往是庞大的,因此在Docker设计时,就充分利用UnionFS的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个ISO那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像 三、Docker仓库Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub( https://hub.docker.com)提供了庞大的镜像集合供使用。 公有Docker Registry Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。 私有Docker Registry 除了使用公开服务外,用户还可以在本地搭建私有Docker Registry。Docker官方提供了Docker Registry镜像,可以直接使用做为私有Registry服务。 开源的Docker Registry镜像只提供了Docker Registry APl的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 Docker TrustedRegistry中,提供了这些高级功能。 除了官方的Docker Registry 外,还有第三方软件实现了Docker Registry API,甚至提供了用户界面以及一些高级功能。比如,VMWare Harbor和 Sonatype Nexus。 四、Docker安装1.官方安装网址https://docs.docker.com/install/linux/docker-ce/centos/#install-using-the-repository 2.安装要求目前,CentoS仅发行版本中的内核支持Docker。Docker运行在CentoS7上,要求系统为64位、系统内核版本为3.10以上。Docker运行在CentOS-6.5或更高的版本的CentoS上,要求系统为64位、系统内核版本为2.6.32-431或者更高版本。 3.版本从 2017年 3月开始 docker在原来的基础上分为两个分支版本:Docker CE 和Docker EE。Docker CE即社区免费版,Docker EE即企业版,强调安全,但需付费使用。 4.检测系统版本
5.移除旧版本
6.安装一些必要的系统工具安装所需的软件包。yum-utils提供了yum-config-manager应用,并device-mapper-persistent-data和lvm2由需要devicemapper存储驱动程序。
7.添加软件源信息源1:(官方推荐)
源2:(阿里云源)
更新yum缓存:
安装Docker-CE
启动Docker后台服务
重启Docker服务
安装成功后可通过查看
五、Docker配置镜像加速器鉴于国内网络问题,后续拉取 Docker镜像十分缓慢,我们可以需要配置加速器来解决使用Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用Docker的体验。因此 DaoCloud推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了Docker官方的大力推荐。如果您是在国内的网络环境使用Docker,那么 Docker 加速器一定能帮助到您。 Docker官方和国内很多云服务商都提供了国内加速器服务, 例如:.
1.修改配置编辑/etc/docker/daemon.json
2.重启服务
3.检查加速器是否生效配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行docker info,查看镜像地址是否匹配,如匹配,说明配置成功
六、Docker镜像镜像是Docker的三大组件之一。Docker运行容器前需要本地存在对应的镜像,如果本地不存在,Docker会从镜像仓库下载。 1.从仓库获取镜像
2.查找镜像我们可以从 Docker Hub网站来搜索镜像,Docker Hub网址为: https://hub.docker.com/我们也可以使用docker search命令来搜索镜像。比如我们需要一个tomcat的镜像来作为我们的web服务。我们可以通过docker search命令搜索tomcat来寻找适合我们的镜像。
3.Docker列出镜像要想列出已经下载下来的镜像,可以使用docker image ls命令或者 docker images。
4.获取镜像获取镜像 从Docker镜像仓库获取镜像的命令是docker pull其命令格式为:
具体的选项可以通过docker pull --help命令看到, Docker 镜像仓库地址:﹑地址的格式一般是〈<域名/IP>[:端口号]。默认地址是 Docker Hub。 -镜像名:这里的仓库名是两段式名称,即<用户名>/<软件名>。对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。我们需要一个tomcat的镜像来作为我们的web服务。通过docker pull获取镜像
下载nginx
指定tomcat版本号
5.列出已下载的镜像
列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。其中仓库名、标签在之前的基础概念已经介绍过了。镜像ID则是镜像的唯一标识,一个镜像可以对应多个标签。因此,如果拥有相同的ID,因为它们对应的是同一个镜像。 6.镜像体积如果仔细观察,会注意到,这里标识的所占用空间和在Docker Hub上看到的镜像大小不同。这是因为Docker Hub中显示的体积是压缩后的体积。在镜像下载和上传过程中镜像是保持着压缩状态的,因此DockerHub所显示的大小是网络传输中更关心的流量大小。而docker image ls 显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,因为镜像到本地后,查看空间的时候,更关心的是本地磁盘空间占用的大小。 7.虚悬镜像我们平时可能会看到这样一个镜像,这个镜像既没有仓库名,也没有标签,均为 :
这个镜像原本是有镜像名和标签的,原来为
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
8.管理本地主机上的镜像;Docker删除本地镜像语法:
如果要删除本地的镜像,可以使用docker image rmi / rm命令
Docker其它辅助命令 查看本地镜像的IMAGE ID
查看一个镜像的制作历程
9.Docker保存镜像备份本地仓库的镜像用save子命令将本地仓库的镜像保存当前目录下
将本地目录下的镜像备份文件导入到本地 Docker仓库 方式一(不输出详细信息)∶
方式二(输出详细信息):
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 16:23:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |