PCF应用切换至CAAS

刚刚开通了一个公众号,会分享一些技术博客和自己觉得比较好的项目,同时会更新一些自己使用的工具和图书资料,后面会整理一些面试资料进行分享,觉得有兴趣的可以关注一下。
在这里插入图片描述

文章目录

  • 前言
  • 打包镜像
    • Dockerfile语法
    • 项目使用
    • 遇到的问题
  • 后续继续更新


前言

公司最近切换架构,从PCF切换到CAAS,两者其实都是基于k8s的平台,PCF入手很快,使用很简单,直接有构建工具可以直接构建,但是可定制化的不够完全。
CAAS基本就是k8s那一套了,迁移最近也学习了一下k8s,颇有收获。


打包镜像

CAASPCF不一样的点,就是需要自己打包一下镜像,PCF当然也可以,但是由于基本的构建工具,只需要提供一个jar就能直接发布。但是CAAS是需要打包的。我们肯定用的是私有云,这个就暂时不透露了,私有云都差不多。
打包镜像我们肯定是需要Dockerfile的,因为后续是用在pipeline上的,自动化构建。

Dockerfile语法

关键字描述语法说明
FROMFROM <image>[:<tag> | @<digest>] [AS <name>]1.FROM指定一个基础镜像,且必须为Dockerfile文件开篇的每个非注释行,至于image则可以是任何合理存在的image镜像
2.FROM可以在一个Dockerfile中出现多次,以便于创建混合的images。如果没有指定tag,latest将会被指定为要使用的基础镜像版本。
3.AS name,可以给新的构建阶段赋予名称。该名称可用于后续FROM 和 COPY --from=<name | index>说明可以引用此阶段中构建的镜像
LABEL为镜像生成元数据标签信息LABEL = \
<KEY>=“XXXX”
多个标签写成一行,避免在镜像中额外增加layer
MAINTAINER作者信息,写在FROM后MAINTAINER “auth <email>”
COPY当复制一个目录时,并不会复制目录本身,而是会递归复制其下子目录 至目标目录下.COPY src dest文件复制准则:
1.必须是build上下言文中的路径,不能是其父目录中的文件。
2.如果src是目录,则其内部文件或子目录会被递归复制,但src目录自身不会被复制
3.如果指定了多个src,或在src中使用了通配符,则dest必须是一个目录,且必须以/结尾
4.如果dest事先不存在,它将会被自动创建,这包括其父目录路径。
ADDADD指令类似于COPY指令,ADD支持使用TAR文件和URL路径ADD <src>…<dest>
ADD [“<src>”,…“<dest>”]
1.如果<src>为URL且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>;如果<dest>以/结尾,则文件名URL指定的文件将被直接下载并保存为<dest>/<filename>
2.如果<src>是一个本地文件系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于"tar -x"命令;然而,通过URL获取到的tar文件将不会自动展开。
3.如果<src>有多个,或其间接或直接使用了通配符,则<dest>必须是一个以/结尾的目录路径;如果<dest>不以/结尾,则其被视作一个普通文件,<src>内容将被直接写入到<dest>
4.为了让镜像尽量小,最好不要使用 ADD 指令从远程 URL 获取包,而是使用 curl 和 wget。这样你可以在文件提取完之后删掉不再需要的文件来避免在镜像中额外添加一层。
WORKDIR用于为Dockerfile中所有RUN、CMD、ENTRYPOINT、COPY和ADD指令设定工作目录WORKDIR dir在Dockerfile文件中,WORKDIR指令可以出现多次,其路径也可以为相对路径,不过,其是相对此前一个WORKDIR指令指定的路径另外,WORKDIR也可调用由ENV指定定义的变量
RUN接受命令作为参数并用于创建镜像,在之前的commit层上形成新的层RUN (如同执行shell命令 /bin/sh -c) RUN [“executable”,“param1”,“param2”]1.RUN 指令将在当前image中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行Dockerfile中的下一个指令。
2.分层RUN指令和生成提交符合Docker的核心概念,其中提交很轻量,可以从image将用于Dockerfile中的下一步。
3.exec形式使得可以避免shell字符串变化,以及使用不包含指定的shell可执行文件的基本image来运行RUN命令。
4.在shell形式中,可以使用\(反斜杠)将单个RUN指令继续到下一行
CMD类似于RUN指令,CMD指令也可用于运行任何命令或应用程序CMD <command> //支持命令展开,但是不支持传递信号
CMD [“<executable>”,“<param1>”,“<param2>”] //相当于容器的第一个命令,可以接受信号
CMD [“param1”,“param2”]
CMD会在启动容器的时候执行,build时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了。这个命令就相当于在/etc/rc.d/rc.local中写命令.在Dockerfile中可以存在多个CMD指令,但仅最后一个生效
ENTRYPOINT类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一具单独的可执行程序 与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序。不过,docker run 命令的–entrypoint 选项的参数可覆盖ENTRYPOINT指令指定的程序ENTRYPOINT <command> //这种方式能接受shell命令行展开
ENTRYPOINT [“<executable>”,“param1”] //展开不了,但能接收到信号
docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用。Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效
EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互告诉Docker服务端容器对外映射的本地端口,需要在docker run 的时候使用-p 或者 -P 选项生效。
ENVENV指令可以用于docker容器设置环境变量指定一个环境变量,会被后续RUN指令使用,并在容器运行时保留。ENV设置的环境变量,可以使用 docker inspect 命令来查看。同时还可以使用 docker run --env <key>=<value>来修改环境变量

项目使用

Dockerfile使用如下:

FROM openjdk:11
LABEL app=app
WORKDIR "/home/app"
ENV \PARAMS="" \JAVA_OPTS=""
COPY ./build/libs/app.jar ./
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -Djava.io.tmpdir=/home/app/tmpdir ${JAVA_OPTS} -jar app.jar ${PARAMS}"]
EXPOSE 8080

FROM可以忽略,这个涉及私有云,然后标签属性,设置工作目录,设置好环境变量,可以为不同的环境设置不同的启动参数。RUN主要用来设置时区,因为默认时间不是中国时间。最后暴露端口8080。


遇到的问题

开始没有使用sh -c,直接使用的java命令,然后加入${PARAMS}${JAVA_OPTS}完全不生效。后来才发现问题。

sudo 会给后面的 shell 命令授权, 但仅此而已. 如果后面还接有其他命令, 就会显示Permission denied, 因为后面的命令并没有被授权
sh -c "command ..." 就是对后面的一整条命令整体授权, 所以多个命令需要使用 sh -c

如果不使用这个命令,设置的这两个参数就会完全不识别。

后续继续更新

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

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

相关文章

屎里淘金,买二手显卡不翻车指南

马上五一了&#xff0c;应该也有不少小伙伴在摩拳擦掌想装机吧&#xff1f; 但是奈何最近显卡疯涨&#xff0c;装机大头显卡还没搞定&#xff0c;想一步到位吧&#xff0c;感觉目前显卡都太贵了&#xff0c;没必要。 想向现实妥协吧&#xff0c;但是好像又有点心有不甘。 那…

测试工程师——招聘分析

测试工程师 随着互联网行业的高速发展,快速高质量的产品版本迭代成为企业始终立于不败之地的迫切需求,而在短期迭代的快节奏中,传统测试工作面对更大压力,无法持续提供高效率高质量的人力支撑,所以越来越多的企业需要技术更为全面的测试开发工程师。测试开发 本质上属于测…

【MATLAB源码-第201期】基于matlab的黏菌群优化算法(SMA)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 黏菌优化算法&#xff08;Slime Mould Algorithm, SMA&#xff09;是一种新颖的启发式优化方法&#xff0c;其灵感来源于自然界中的真菌——黏菌。这种算法模拟了黏菌在寻找食物时的行为和网络形成策略。在本文中&#xff0c…

触发器的启用和禁用

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在 Oracle 数据库中&#xff0c;所创建的触发器可以根据情况&#xff0c;灵活修改它的状态&#xff0c;使其有效或者无效&#xff0c;即启用或者禁用。 其语法格式如下所示。…

社区新零售:重构邻里生活圈,赋能美好未来

新时代的邻里脉动 在城市的肌理中&#xff0c;社区作为生活的基本单元&#xff0c;正经历一场由新零售引领的深刻变革。社区新零售&#xff0c;以其独特的商业模式、创新的技术手段和以人为本的服务理念&#xff0c;重新定义了社区商业的边界&#xff0c;重构了邻里生活的形态…

CAD的DWG文件如何进行搜索文字

1.目的 想搜索CAD文件中的数字或文字是否存在DWG文件中。 2.方法 方式1:菜单栏 编辑→查找 方式2&#xff1a;指令格式 图纸的左下侧→命令处&#xff0c;进行输入find→再按回车enter 3.结果

开源AI智能名片商城小程序:深度解读IMC(IP、MarTech、Content)视角

在数字化浪潮中&#xff0c;私域流量的运营已成为企业不可或缺的增长引擎。而开源AI智能名片商城小程序&#xff0c;则是以一种全新的视角——IMC&#xff08;IP、MarTech、Content&#xff09;&#xff0c;为企业打开私域流量运营的新篇章。今天&#xff0c;我们就来一起深入解…

智慧农场系统 搭建重点,会用到哪些三方服务?

智慧农场小游戏的搭建重点主要集中在游戏设计、用户体验、数据安全和稳定性等方面。为了实现这些目标&#xff0c;可能会用到以下第三方服务&#xff1a; 游戏引擎和开发工具&#xff1a;使用成熟的游戏引擎和开发工具可以极大地简化开发流程&#xff0c;提高开发效率。例如&a…

stm32cubeMX智能小车蓝牙模块

本文使用的代码是 HAL 库。 文章目录 前言一、蓝牙模块介绍二&#xff0c;AT指令测试蓝牙模块三&#xff0c;原理图分析四&#xff0c;cubeMX 配置五&#xff0c;编写代码总结 前言 实验小车&#xff1a;STM32F103C8T6。 蓝牙模块&#xff1a;HC-05。 所需软件&#xff1a;kei…

Rust中的并发性:Sync 和 Send Traits

在并发的世界中&#xff0c;最常见的并发安全问题就是数据竞争&#xff0c;也就是两个线程同时对一个变量进行读写操作。但当你在 Safe Rust 中写出有数据竞争的代码时&#xff0c;编译器会直接拒绝编译。那么它是靠什么魔法做到的呢&#xff1f; 这就不得不谈 Send 和 Sync 这…

Spirng 当中 Bean的作用域

Spirng 当中 Bean的作用域 文章目录 Spirng 当中 Bean的作用域每博一文案1. Spring6 当中的 Bean的作用域1.2 singleton 默认1.3 prototype1.4 Spring 中的 bean 标签当中scope 属性其他的值说明1.5 自定义作用域&#xff0c;一个线程一个 Bean 2. 总结:3. 最后&#xff1a; 每…

Navicat 每次打开数据库时,总是弹出 “正在获取 ER 图表信息“

文章目录 1 问题描述2 问题截图3 解决办法 1 问题描述 使用 Navicat 打开数据库时&#xff0c;总是弹出 “正在获取 ER 图表信息”每次都弹出来&#xff0c;耗时长&#xff0c;有时候点 “取消” 还卡死&#xff0c;烦人 2 问题截图 获取表信息 解析为 ER 图&#xff08;最…

React正式更新!开始学习React 19!

本文为原创文章&#xff0c;原文链接&#xff1a;J实验室&#xff0c;未经授权请勿转载 今年2月份&#xff0c;React 发布消息确认今年发布 v19 版本&#xff0c;尘封两年的版本号终于要更新了&#xff08;详情点击&#xff1a;React 19 发布在即&#xff0c;抢先学习一下新特性…

打靶日记:midnight

前置 1. 下载靶机 前往https://www.vulnhub.com/&#xff0c;下载我们想要使用的靶机 本次实战使用的靶机是sunset: midnight 2. 导入VMware 我是用的是VM15&#xff0c;这里我们直接 点击文件-》打开-》选择我们下载完的文件&#xff08;如果是压缩包的话记得解压&#…

陪孩子终身成长

文章目录 自序 你必须成长&#xff0c;才能陪孩子成长1 理解养育的本质第1章 为什么说亲子关系决定孩子的一生亲子关系&#xff0c;决定了我们与世界的关系父母对孩子的影响是最大的所有关系都是原生家庭关系的投射我们的思维模式&#xff0c;由父母决定 第2章 远离劣质亲子…

编译工具各版本与操作系统版本号兼容性冷知识 : JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况

编译工具各版本与操作系统版本号兼容性冷知识 &#x1f9e0;: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况 文章目录 编译工具各版本与操作系统版本号兼容性冷知识 &#x1f9e0;: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号…

codePen按钮样式学习

前言 看到codepen里面有的按钮搞得很炫酷&#xff0c;但其实也不是很难&#xff0c;就学习记录一下 逐渐出现边框 大体上来说就是当鼠标悬浮的时候触发四个transition&#xff0c;用after、before和span的after和before四个伪类做hover出来的边框 <div class"btn bt…

速成python

一个只会c的苦手来总结一下py的语法。没有其他语法基础的不建议看 1. 输入输出 print自带换行&#xff0c;可以写print("Hi", end"")取消换行 a input(你好:) # 默认是str print(type(a)) # 输出a的类型 a int(input()) # 或者a int(a) print(type(…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第七套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第七套 (共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadidadidida313&#xff0c;加我备注&#x…

前端页面单元测试最佳策略:全面涵盖逻辑、组件、流程、UI及性能优化测试,全面保障软件应用的质量

页面级别的测试要求我们从更宏观的角度审视应用&#xff0c;不仅关注单个组件的正确性&#xff0c;还要确保组件间的协作无误&#xff0c;以及用户在应用中的完整体验。通过集成测试、E2E测试和场景测试&#xff0c;我们可以更全面地覆盖应用的各种使用情况&#xff0c;提高软件…