PCF应用切换至CAAS

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


前言

公司最近切换架构,从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

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

后续继续更新

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PCF8563是一款实时时钟芯片,广泛应用于各种需要时间和日期功能的电子设备中。它采用I2C总线通信协议,方便与主控器件进行数据传输。 PCF8563应用电路主要包括芯片连接电源电路、I2C总线连接电路和时钟电路。 首先,芯片连接电源电路包括电池电源和外部电源两种方式。电池电源使得PCF8563可以在没有外部电源的情况下继续运行,以保持准确的时间和日期。外部电源则用于供电和充电。同时,还有稳压电路确保芯片能够在电压波动的情况下正常工作。 其次,I2C总线连接电路用于将PCF8563与主控器件连接起来。由于PCF8563采用I2C总线通信协议,主控器件可以通过I2C总线与PCF8563进行数据传输,包括获取时间和日期、设置闹钟等功能。I2C总线连接电路由SCL时钟线和SDA数据线组成,通过连接电阻和电容进行信号滤波和稳定,保证数据传输的可靠性。 最后,时钟电路使用外部晶体振荡器作为主频源,保证了精确的时间计算和显示。振荡器的频率可以调整,根据需要来选择合适的频率,例如通过变频电路实现秒、分、时、日、月、年等时间单位的显示。 总之,PCF8563应用电路的主要组成部分是芯片连接电源电路、I2C总线连接电路和时钟电路。通过这些电路的构建和连接,PCF8563能够在各种电子设备中提供准确的时间和日期功能。 ### 回答2: PCF8563是一种高性能实时时钟和定时器集成电路芯片。它通过I2C总线与外部器件进行通信,具有广泛的应用。 在电子设备中,PCF8563常用于计时、时间显示和日期记录等功能。其内部集成了一个实时时钟,可以精确计时,并且具有非常低的功耗。它可以供给电池作为备份电源,即使在断电情况下,也能保持准确的时间。 PCF8563还具有日期功能,可以记录年、月、日和星期,有助于记录和跟踪时间信息。这在一些需要时间戳的应用中非常有用,例如数据采集和事件记录。 此外,PCF8563还集成了一个定时器功能,可以用来实现任务的定时执行。通过设置一定的时间间隔,可以实现定时触发一些操作,例如闹钟、定时器、定时浇花等。 对于电子产品制造商和工程师来说,PCF8563具有易于集成和使用的优点。它仅需连接到I2C总线,并通过简单的命令进行配置和读取。此外,它具有小尺寸和低功耗的特点,非常适合嵌入式设备和电池供电的应用场景。 综上所述,PCF8563是一款功能强大且易于使用的实时时钟和定时器集成电路芯片。它的应用广泛,包括计时、日期记录和定时器功能等。无论是在家电、电子设备还是工控设备中,PCF8563都能提供准确的时间和定时控制功能。 ### 回答3: PCF8563是一款高性能、低功耗实时时钟(RTC)芯片,广泛应用于各种电子设备中。 PCF8563应用电路的主要特点为以下几点: 首先,PCF8563具有极低的功耗。在典型操作条件下,PCF8563芯片的工作电流仅为0.22μA,这使得它非常适合依赖电池供电的设备应用。例如,智能手表、医疗设备、仪器仪表等设备可以通过PCF8563来实现精确的时间测量和计时功能。 其次,PCF8563具有高精度的时钟和日历功能。它能够提供精确到秒级别的时间显示,并支持闹钟功能。此外,它还可以存储日期和星期信息,如年、月、日、小时、分钟、秒以及星期几,这在各种计时和用户提醒应用中非常有用。 此外,PCF8563具备了外部电源监测功能。当主电源由于某些原因中断或失效时,PCF8563芯片可以自动切换到备用电源,并保持存储的时间不变。这在电力不稳定或电池更换时能够确保设备的可靠性和时间的连续性。 最后,PCF8563还具备了I2C总线接口,使得其与其他微控制器或外部设备的通信变得非常方便。通过I2C总线,可以轻松地设置和读取PCF8563的状态和计时信息,实现与其他模块的集成和数据传输。 总而言之,PCF8563应用电路在各种电子设备中都极具价值。它可广泛应用于具有实时计时需求的产品,如智能手表、电子钟表、温湿度记录仪等。它的低功耗、高精度和灵活性使得PCF8563成为实时时钟应用中的理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻D开始

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值