




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
构建高效的容器镜像容器镜像的构建及最佳实践掌握容器镜像构建技巧教学目标构建高效的容器镜像目录通常所说的容器化改造是对应用整体微服务架构改造,再容器化,这样做可以带来如下好处。单独扩展:拆分为微服务后,可单独增加或缩减每个微服务的实例数量。提升开发速度:各微服务之间解耦,某个微服务的代码开发不影响其他微服务。通过隔离确保安全:整体应用中,若存在安全漏洞,会获得所有功能的权限。微服务架构中,若攻击了某个服务,只可获得该服务的访问权限,无法入侵其他服务。隔离崩溃:如果其中一个微服务崩溃,其它微服务还可以持续正常运行。一个容器只运行一个进程为了降低复杂性、减少依赖、减小文件大小、节约构建时间,你应该避免安装任何不必要的包。例如,不要在数据库镜像中包含一个文本编辑器。apt-getupgrade会使得镜像构建非常不确定,在构建时不确定哪些包会被安装,此时可能会产不一致的镜像。如果基础镜像中的某个包过时了,你应该联系它的维护者。如果你确定某个特定的包,比如foo需要升级,使用apt-getinstall-yfoo就行,该指令会自动升级foo包。不要在构建中升级版本FROMubuntuADD./appRUNapt-getupdateRUNapt-getupgrade-yRUNapt-getinstall-ynodejsRUNcd/app&&npminstallCMDnpmstart容器镜像是分层的,类似于洋葱,它们都有很多层,为了修改内层,则需要将外面的层都删掉。容器镜像有如下特性:Dockerfile中的每个指令都会创建一个新的镜像层。镜像层将被缓存和复用。Dockerfile修改后,复制的文件变化了或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效。某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效。镜像层是不可变的,如果我们在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,只是这个文件在容器中不可见。将变化频率一样的RUN指令合一(1)将变化频率一样的指令合并在一起,目的是为了更好的将镜像分层,避免带来不必要的成本。如本例中将node.js安装与npm模块安装放在一起的话,则每次修改源代码,都需要重新安装node.js,这显然不合适。将变化频率一样的RUN指令合一(2)FROMubuntuADD./appRUNapt-getupdate\&&apt-getinstall-ynodejs\&&cd/app\&&npminstallCMDnpmstartFROMubuntuRUNapt-getupdate&&apt-getinstall-ynodejsADD./appRUNcd/app&&npminstallCMDnpmstart当镜像没有指定标签时,将默认使用latest标签。因此,FROMubuntu指令等同于FROMubuntu:latest。当镜像更新时,latest标签会指向不同的镜像,这时构建镜像有可能失败。使用特定的标签FROMubuntu:16.04RUNapt-getupdate&&apt-getinstall-ynodejsADD./appRUNcd/app&&npminstallCMDnpmstart假设我们更新了apt-get源,下载解压并安装了一些软件包,它们都保存在/var/lib/apt/lists/目录中。但是,运行应用时容器镜像中并不需要这些文件。因此最好将它们删除,因为它会使容器镜像变大。示例Dockerfile中,删除/var/lib/apt/lists/目录中的文件。删除多余文件FROMubuntu:16.04RUNapt-getupdate\&&apt-getinstall-ynodejs\&&rm-rf/var/lib/apt/lists/*ADD./appRUNcd/app&&npminstallCMDnpmstart在示例中,我们选择了ubuntu作为基础镜像。但是我们只需要运行node程序,没有必要使用一个通用的基础镜像,node镜像应该是更好的选择。更好的选择是alpine版本的node镜像。alpine是一个极小化的Linux发行版,只有4MB,这让它非常适合作为基础镜像。选择合适的基础镜像FROMnode:7-alpineADD./appRUNcd/app&&npminstallCMDnpmstartWORKDIR指令可以设置默认目录,也就是运行RUN/CMD/ENTRYPOINT指令的地方。CMD指令可以设置容器创建时执行的默认命令。另外,您应该将命令写在一个数组中,数组中每个元素为命令的每个单词。设置WORKDIR和CMDFROMnode:7-alpineWORKDIR/appADD./appRUNnpminstallCMD["npm","start"]ENTRYPOINT指令并不是必须的,因为它会增加复杂度。ENTRYPOINT是一个脚本,它会默认执行,并且将指定的命令作为其参数。它通常用于构建可执行的容器镜像。使用ENTRYPOINT(可选)FROMnode:7-alpineWORKDIR/appADD./appRUNnpminstallENTRYPOINT["./entrypoint.sh"]CMD["start"]在前文的entrypoint脚本中,使用了exec命令运行node应用。不使用exec的话,我们则不能顺利地关闭容器,因为SIGTERM信号会被bash脚本进程吞没。exec命令启动的进程可以取代脚本进程,因此所有的信号都会正常工作。在entrypoint脚本中使用execCOPY指令非常简单,仅用于将文件拷贝到镜像中。ADD相对来讲复杂一些,可以用于下载远程文件以及解压压缩包。优先使用COPYFROMnode:7-alpineWORKDIR/appCOPY./appRUNnpminstallENTRYPOINT["./entrypoint.sh"]CMD["start"]将变化最少的部分放在Dockerfile的前面,这样可以充分利用镜像缓存。示例中,源代码会经常变化,则每次构建镜像时都需要重新安装NPM模块,这显然不是我们希望看到的。因此我们可以先拷贝package.json,然后安装NPM模块,最后才拷贝其余的源代码。这样的话,即使源代码变化,也不需要重新安装NPM模块。合理调整COPY与RUN的顺序FROMnode:7-alpineWORKDIR/appCOPYpackage.json/appRUNnpminstallCOPY./appENTRYPOINT["./entrypoint.sh"]CMD["start"]运行容器时很可能需要一些环境变量。在Dockerfile设置默认的环境变量是一种很好的方式。另外,我们应该在Dockerfile中设置映射端口和数据卷。示例如下:设置默认的环境变量、映射端口和数据卷FROMnode:7-alpineENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENTRYPOINT["./entrypoint.sh"]CMD["start"]EXPOSE指令用于指定容器将要监听的端口。因此,你应该为你的应用程序使用常见的端口。例如,提供Apacheweb服务的镜像应该使用EXPOSE80,而提供MongoDB服务的镜像使用EXPOSE27017。对于外部访问,用户可以在执行dockerrun时使用一个标志来指示如何将指定的端口映射到所选择的端口。使用EXPOSE暴露端口FROMnode:7-alpineENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENVAPP_PORT=3000EXPOSE$APP_PORTENTRYPOINT["./entrypoint.sh"]CMD["start"]VOLUME指令用于暴露任何数据库存储文件、配置文件或容器创建的文件和目录。强烈建议使用VOLUME来管理镜像中的可变部分和用户可以改变的部分。下面示例中填写一个媒体目录。使用VOLUME管理数据卷FROMnode:7-alpineENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENVMEDIA_DIR=/media\APP_PORT=3000VOLUME$MEDIA_DIREXPOSE$APP_PORTENTRYPOINT["./entrypoint.sh"]CMD["start"]你可以给镜像添加标签来帮助组织镜像、记录许可信息、辅助自动化构建等。每个标签一行,由LABEL开头加上一个或多个标签对。使用LABEL设置镜像元数据运行容器时,可以指定--restartalways选项。这样的话,容器崩溃时,dockerdaemon会重启容器。对于需要长时间运行的容器,这个选项非常有用。但是,如果容器的确在运行,但是不可用怎么办?使用HEALTHCHECK指令可以让容器引擎周期性的检查容器的健康状况。我们只需要指定一个命令,如果一切正常的话返回0,否则返回1。当请求失败时,curl--fail命令返回非0状态。示例如下:添加HEALTHCHECKFROMnode:7-alpineLABELcom.example.version="0.0.1-beta"ENVPROJECT_DIR=/appWORKDIR$PROJECT_DIRCOPYpackage.json$PROJECT_DIRRUNnpminstallCOPY.$PROJECT_DIRENVMEDIA_DIR=/media\APP_PORT=3000VOLUME$MEDIA_DIREXPOSE$APP_PORTHEALTHCHECKCMDcurl--failhttp://localhost:$APP_PORT||exit1ENTRYPOINT["./entrypoint.sh"]CMD["start"].dockerignore的作用和语法类似于.gitignore,可以忽略一些不需要的文件,这样可以有效加快镜像构建时间,同时减少容器镜像的大小。构建镜像时,容器引擎需要先准备context,将所有需要的文件收集到进程中。默认的context包含Dockerfile目录中的所有文件,但是实际上,我们并不需要.git目录等内容。编写.dockerignore文件构建高效的容器镜像总结主流超融合产品理解超融合的基本概念了解主流的超融合产品理解超融合产品的核心竞争力教学目标超融合的概念主流的超融合产品超融合产品的核心竞争力体现目录超融合是一种IT基础架构构建方式,其核心思想是使用通用硬件,用软件定义来实现IT基础架构的各项服务,包括:计算,存储,灾备,运维管理等,并且这些服务都在统一的平台上。超融合基础架构(Hyper-ConvergedInfrastructure,或简称“HCI)是实现“软件定义数据中心的终极技术途径超融合的概念超融合的特点超融合的概念软件定义统一平台使用通用硬件010203超融合的发展历史国内超融合市场正处于发展初期,2017年整体规模就已经达到3.79亿美元且每年增速极快,随着云架构需求的释放,将有效支撑超融合的高速发展,特别是企业级私有云领域,超融合有望凭借极佳的性能、偏低的价格、良好的体验,在该市场上实现广泛应用。随着云计算的应用从游戏、电商和社交等互联网行业,转向政府、医疗和教育等行业,超融合应用于行业云的成长空间十分广阔。
超融合的市场价值超融合的概念主流的超融合厂家超融合产品的核心竞争力体现目录主流的超融合产品厂家Smartx华为H3CNutainxEMCVMware深信服超融合的概念主流的超融合厂家超融合产品的核心竞争力体现目录超融合产品的核心竞争力体现分布式存储的实现虚拟化计算的实现运维管理平台的实现分布式存储的价值体现自主研发,如:NutanixNDFS,VMwareVSAN,SmartXZBS,华为FusionStorage;采用开源的分布式存储或在开源基础上改造,如,Ceph,GlusterFS;超融合产品的核心竞争力体现虚拟化计算虚拟化平台的支持能力是否支持虚拟化的特殊接口各厂商分布式块存储的资源消耗情况超融合产品的核心竞争力体现存储与虚拟化的整合可以看成三种类型:类型一:存储服务作为内核模块运行在Hypervisor内部。最典型的代表是VxRail,存储服务VSAN作为ESXi/vSphere内核模块被整合。这种架构下存储服务不经过Hypervisor直接访问存储设备,几乎无性能损耗,理论上本地I/O性能可以充分发挥。超融合产品的核心竞争力体现存储与虚拟化的整合可以看成三种类型:类型一:超融合产品的核心竞争力体现存储与虚拟化的整合可以看成三种类型:类型二:存储服务运行于Hypervisor上独立的虚拟机里,该虚拟机实际起到虚拟存储设备VSA(VirtualStorageApplicance)的作用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中药透析技术操作规范
- 德隆集团行业研究
- 合租房财产分配协议
- 商品质量检查及复核合同(2篇)
- 内部转让协议
- 2025年统编版小学道德与法治二年级下册《挑战第一次》说课课件
- 拍卖活动反馈协议
- 学校防汛知识演练
- 阿合奇县2025年数学四年级第二学期期末检测试题含解析
- 陇南师范高等专科学校《英汉互译》2023-2024学年第一学期期末试卷
- 2024-2030年中国光伏建筑一体化(BIPV)行业发展模式及十三五规划分析报告
- 信息化战争课件
- 海口市标准劳动合同范本
- 新入职员工设备培训
- 2024年中国林蛙油市场调查研究报告
- PANTONE潘通色卡TPX颜色在线查询(1-2部分)
- 静脉治疗护理技术操作标准解读
- 2021《超星尔雅》舞蹈鉴赏章节测试答案
- 2024年江西省高考物理试卷真题(含答案解析)
- 精益生产知识学习考试复习题库300题(含答案)
- 第三单元第1课 标志设计 课件 2024-2025学年人教版(2024)初中美术七年级上册
评论
0/150
提交评论