docker构建镜像命令
编写dockerfile文件
例子1;
FROM oraclelinux:7-slim
ENV release=19
ENV update=13
RUN curl -o /etc/yum.repos.d/public-yum-ol7.repo https://yum.oracle.com/public-yum-ol7.repo && \yum-config-manager --enable ol7_oracle_instantclient && \yum install -y java-1.8.0-openjdk-devel.x86_64 && \yum -y install oracle-instantclient${release}.${update}-basic oracle-instantclient${release}.${update}-devel oracle-instantclient${release}.${update}-sqlplus && \rm -rf /var/cache/yum && \echo /usr/lib/oracle/${release}.${update}/client64/lib > /etc/ld.so.conf.d/oracle-instantclient${release}.${update}.conf && \ldconfig
#install sqlhc
RUN mkdir -p /root/shell
COPY sqlhc.sh /root/shell/
COPY sqlhc.sql /root/shell/
RUN chmod +x /root/shell/sqlhc.sh#PDF
RUN mkdir -p /root/pdf
COPY asmChart.jasper /root/pdf/
COPY asmInfo.jasper /root/pdf/
COPY dataBaseTableSpaceInfo.jasper /root/pdf/
COPY indexUseAs.jasper /root/pdf/
COPY main.jasper /root/pdf/
COPY objectFragmentsInfo.jasper /root/pdf/
COPY topObjectInfo.jasper /root/pdf/
COPY dbSpaceChart.jasper /root/pdf/
RUN chmod -R 777 /root/pdf#install java deployment envirement
ENV JAVA_BASE=/usr/java
RUN mkdir -p $JAVA_BASE
ADD jre-8u331-linux-x64.tar.gz $JAVA_BASE
#RUN chown -R root:root $JAVA_BASE/jre1.8.0_331
RUN ln -s $JAVA_BASE/jre1.8.0_331 $JAVA_BASE/jdk-8
ENV JAVA_HOME=$JAVA_BASE/jdk-8#timezone setting
ENV TimeZone=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezoneENV PATH=$PATH:/usr/lib/oracle/${release}.${update}/client64/bin:$JAVA_HOME/bin
命令解读
- From 用于指定基础镜像,后续的指令都基于这个基础镜像进行构建。
From 镜像名称
# 基于 oraclelinux:7-slim 来构建新的镜像
FROM oraclelinux:7-slim#或者基于openjdk:11来构建
FROM openjdk:11
- ENV命令,在 Dockerfile 中,ENV 命令用于设置环境变量。这些环境变量可以在后续的构建步骤(即后续的 RUN 命令)以及容器运行时中使用。在使用的时候 可以使用 $符 加变量名称
#ENV 命令的基本语法如下:
ENV <key>=<value> ...
- RUN命令,用来执行在linux中的命令,比如赋权,或者安装命令,下载之类的
# 例如给文件夹增加下的文件增加读写权限
RUN chmod -R 777 /root/pdf
#下载文件的命令
RUN yum install -y java-1.8.0-openjdk-devel.x86_64
# 换行符 和 \
可以使用换行符 和 \ 来跨行编写命令
# && 符号,表示必须 && 前的命令执行成功后才会执行后面的命令,如果前面失败了后面不会执行
- COPY,表示复制
# copy 宿主机文件路径 镜像内路径
# 复制文件
COPY sqlhc.sh /root/shell/
COPY asmChart.jasper /root/pdf/
- ADD,在 Dockerfile 中,ADD 命令用于将本地文件、目录或远程文件 URL 添加到镜像的文件系统中。ADD 命令非常强大,因为它可以自动解压归档文件(如 tar、gzip、bzip2 等)到镜像中。
# ADD <src> <dest>
# <src>:要添加的源文件或目录的路径,或者远程文件的 URL。
# <dest>:目标路径在 Docker 镜像中的位置# 将tar包,复制并解压到 $JAVA_BASE这个所代表的路径中
ADD jre-8u331-linux-x64.tar.gz $JAVA_BASE
# 将当前上下文中的 myfile.txt 文件添加到镜像的 /app/ 目录下:
ADD myfile.txt /app/
#将当前上下文中的 mydir/ 目录(包括其内容)添加到镜像的 /app/ 目录下
ADD mydir/ /app/
#从远程 URL 添加一个文件到镜像中:
ADD https://example.com/myfile.txt /app/
例子2
FROM nginx:1.23
ARG APP_BIN=/usr/share/nginx/html
COPY default.conf /etc/nginx/conf.d/
COPY bin/ $APP_BIN
EXPOSE 80
- ARG 定义可以在构建时传递的变量
#使用ARG命令 定义一个名为 APP_BIN变量
ARG APP_BIN=/usr/share/nginx/html
# 将当前目录下,bin目录下的文件 复制到 APP_BIN变量所代表的路径下
COPY bin/ $APP_BIN
ARG和ENV命令在Dockerfile中各自扮演着不同的角色,它们的主要差别如下:
- 定义阶段和存在时间:
ARG命令主要用于在构建镜像的过程中设置一个构建时的环境变量。这些变量在构建过程中可以被使用,并且可以在Dockerfile中通过引用它们的名称来访问。然而,一旦镜像编译成功,ARG指定的变量将不再存在。
ENV命令则用于在容器运行时设置环境变量。这些变量在容器启动时被设置,并且可以在容器中的应用程序中使用。与ARG不同,ENV设置的环境变量在镜像构建完成后会保留在镜像中,因此当使用构建后的镜像运行容器时,这些环境变量仍然保持不变。 - 使用方式和语法:
ARG命令的格式为ARG [=]。在执行docker build时,可以通过–build-arg <参数名>=<值>来为声明的变量赋值。此外,ARG还可以引用Docker内置的一些镜像创建变量,这些变量无需用户声明即可直接使用。
ENV命令的语法允许直接设置一个或多个环境变量,如ENV MY_NAME=“John Doe” MY_DOG=Rex。它支持在指令中设置多个环境变量,并且环境变量的值可以被其他环境变量引用。 - 功能和用途:
ARG主要用于在构建过程中传递参数或设置构建时的环境,但这些变量并不会被保留到最终的镜像中。它们主要在Dockerfile的构建阶段提供灵活性和可配置性。
ENV则更关注于容器运行时的环境配置。通过设置环境变量,它可以影响容器内部应用程序的行为或配置。
总结来说,ARG和ENV在Dockerfile中各有其特定的使用场景和功能。ARG主要用于构建时的参数传递和环境设置,而ENV则关注于容器运行时的环境配置。在构建Docker镜像时,应根据具体需求选择使用合适的命令。
- EXPOSE,暴露端口,EXPOSE 命令在 Dockerfile 中用于声明容器在运行时应该监听的端口。这个命令并不实际地映射或公开任何端口到宿主机,而是作为一个元数据,告诉 Docker 容器哪些网络端口会被应用程序使用。
EXPOSE 80
例子三
基于jdk11镜像构建新的镜像
FROM openjdk:11
COPY 5gSports-app.jar /
COPY ./hikliblinux64 /lib/hik/hikliblinux64
ENTRYPOINT ["java","-jar","/5gSports-app.jar","--spring.config.location=classpath:/product.yml"]
- ENTRYPOINT 命令,配置容器启动时运行的命令。与 CMD 类似,但 ENTRYPOINT 的命令不会被 docker run 命令行参数指定的指令所覆盖,而是将这些参数当作参数传给 ENTRYPOINT 指定的命令。
ENTRYPOINT 指令应该是一个 JSON 数组,其中每个元素都是一个独立的字符串,而不是一个包含整个命令和参数的单一字符串。
正确的方式是将命令和每个参数分开成数组中的不同元素
ENTRYPOINT ["java","-jar","/5gSports-app.jar","--spring.config.location=classpath:/product.yml"]
这样,java 是命令,-jar 和 5gSports-app.jar 是传递给 java 命令的参数,–spring.config.location=classpath:/product.yml 也是另一个参数。每个参数都作为一个独立的数组元素。
相关文章:
docker构建镜像命令
编写dockerfile文件 例子1; FROM oraclelinux:7-slim ENV release19 ENV update13 RUN curl -o /etc/yum.repos.d/public-yum-ol7.repo https://yum.oracle.com/public-yum-ol7.repo && \yum-config-manager --enable ol7_oracle_instantclient && \yum in…...

每日一题——LeetCode1720.解码异或后的数组
方法一 异或运算的性质 encoded[i−1]arr[i−1]⊕arr[i] 在等式两边同时异或arr[i−1] 由于: 一个数异或它自己,结果总是0。 0异或任何数,结果都是那个数本身。 所以等式可以转化为: arr[i]arr[i−1]⊕encoded[i−1] 由于 a…...

Day47:WEB攻防-PHP应用文件上传函数缺陷条件竞争二次渲染黑白名单JS绕过
目录 文件上传与测试环境安装 1、前端 JS 2、.htaccess(apache独有的配置文件) 3、MIME类型 4、文件头判断 5、黑名单-过滤不严 6、黑名单-过滤不严 7、低版本GET-%00截断 8、低版本POST-%00截断 9、黑名单-过滤不严 10、逻辑不严-条件竞争 11、二次渲染 12、函数…...

【Android】美团组件化路由框架WMRouter源码解析
前言 Android无论App开发还是SDK开发,都绕不开组件化,组件化要解决的最大的问题就是组件之间的通信,即路由框架。国内使用最多的两个路由框架一个是阿里的ARouter,另一个是美团的WMRouter。这两个路由框架功能都很强大࿰…...

python知识点总结(九)
python知识点总结九 1、TCP中socket的实现代码实现TCP协议a、服务端b、客户端: 2、写装饰器,限制函数被执行的频率,如10秒一次3、请实现一个装饰器,通过一次调用函数重复执行5次4、写一个登录装饰器对一下函数进行装饰,…...

浅谈Linux中的软锁定(soft lockup)和硬件监视器(watchdog)
目录 1. 问题所示2. 基本知识3. 进阶知识 1. 问题所示 跑深度学习的时候遇到卡顿卡机 hostname kernel:watchdog BUG:soft lockup - CPU#16 stuck for 130s![P2PMain-72:4030570]界面如下所示: 大概意思是: watchdog_thresh参数是硬件监视器的超时阈值…...
数据库的四个特性?MySQL是如何实现的?
首先MySQL中,数据库的四个特性分为: 原子性一致性隔离性持久性 也就是我们常说的ACID。 那么这四个特性数据库是如何实现的呢? 持久性---> redo log: redo log(重做日志): redolog本身是…...

Jupyter R绘图 汉字显示乱码的解决办法
1.Jupyte中,R绘图,汉字显示乱码 2.如何解决? (1)R中安装showtext 登录linux服务器 #R > install.packages(“showtext”) … 出错 (2)退出R,安装freetype-config #apt install libfreetype6-dev 出错 (3)进入R&…...
推荐几个值得一读的Qt开源项目
VNote - 基于Qt的免费开源笔记软件,适合那些寻找跨平台笔记解决方案的用户。项目地址:https://github.com/vnotex/vnote Qt NodeEditor - 类似于UE4蓝图的节点编辑器,对于想要深入了解Qt图形编辑和节点系统的人来说,这是一个极好…...

【XR806开发板试用】使用PWM模块模拟手机呼吸灯提示功能
一般情况下,我们的手机在息屏状态,当收到消息处于未读状态时,会有呼吸灯提醒,这次有幸抽中XR806开发板的试用,经过九牛二虎之力终于将环境搞好了,中间遇到各种问题,在我的另一篇文章中已详细描述…...
Mysql——索引下推
MySQL的索引下推(Index Condition Pushdown, ICP)是一种查询优化技术,它允许MySQL在存储引擎层执行部分WHERE子句中的过滤条件,而非全部在MySQL服务器层执行。这使得在扫描索引过程中就可以剔除不满足条件的记录,从而减…...
Springboot项目之mybatis-plus多容器分布式部署id重复问题之源码解析
mybatis-plus 3.3.2 部署多个pod id冲突问题 配置: # 设置随机 mybatis-plus.global-config.worker-id: ${random.int(1,31)} mybatis-plus.global-config.datacenter-id: ${random.int(1,31)}源码解析:MybatisSqlSessionFactoryBean 重点:…...

微信答题小程序云开发--实现云函数上传题目图片 base64功能
需求功能 题目带有图片,需要支持上传图片功能。微信答题小程序云开发,实现云函数上传题目图片、存储功能、查询显示等功能。 云函数开发遇到的问题 在微信云开发环境当中,普通的用户并没有往云存储内写入文件的权限。 所以普通用户想要使用…...

学会Sass的高级用法,减少样式冗余
在当今的前端开发领域,样式表语言的进步已经显著提升了代码组织性和可维护性。Sass(Syntactically Awesome Style Sheets)作为CSS预处理器的翘楚,以其强大的变量、嵌套规则、混合宏(mixin)、循环和函数等高…...

【Java初阶(五)】类和对象
❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 目录 1. 前言2.面向对象的认识3.类的认识4. 类的实例化4.1什么是实例化4.2类和对象的说明 5.this引用6.对象初始化6.1 构造方法 7.static关键字8.代码块8.1 …...
AWTK-MODBUS 服务器
AWTK-MODBUS 服务器 1. 介绍 AWTK-MODBUS 提供了一个简单的 MODBUS 服务器,可以通过配置文件来定义寄存器和位的数量和初始值。 启动方法: bin/modbus_server_ex config/default.json2. 配置文件 配置文件使用JSON格式。 url: 连接地址auto_inc_in…...
JavaScript快速入门笔记之一(基本概念)
JavaScript快速入门笔记之一(基本概念) 前端三大语言: HTML:专门编写网页内容的语言CSS:专门美化网页样式的语言JavaScript:专门编写网页交互的语言 名词解释: 交互:输入数据&#…...

前端学习之css基本网格布局
网格布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网格布局</title><style>.a{/* grid网格布局 */display: grid;width: 400px;height: 400px;border: 1px solid red;/* 设置当前…...

[网鼎杯2018]Unfinish 两种方法 -----不会编程的崽
网鼎杯太喜欢搞二次注入了吧。上次是无列名盲注,这次又是二次注入盲注。。。不知道方法还是挺难的。哎,网鼎嘛,能理解透彻就很强了。能自己做出来那可太nb了。 又是熟悉的登录框。不知道这是第几次看见网鼎杯的登录框了。后台扫描一下&#x…...

安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法
安防监控视频平台EasyCVR具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强,支持Windows系…...

Namespace 命名空间的使用
名字空间:划分更多的逻辑空间,有效避免名字冲突的问题 1.什么是命名空间 名字命名空间 namespace 名字空间名 {...} // 名字空间 n1 域 namespace n1 {// 全局变量int g_money 0;void save(int money){g_money money;}void pay(int money){g_money - m…...

鸿蒙 Form Kit(卡片开发服务)
Form Kit(卡片开发服务) 鸿蒙应用中,Form / Card / Widget 都翻译为“卡片” Form Kit(卡片开发服务)提供一种界面展示形式,可以将应用的重要信息或操作前置到服务卡片,以达到服务直达、减少跳转…...
电子电路:深入了解CMOS技术构造和工作原理
一、CMOS的基本结构与工作原理 1. 核心结构:互补MOSFET CMOS(互补金属氧化物半导体)的核心是成对的NMOS(N沟道MOSFET)和PMOS(P沟道MOSFET)晶体管,两者共享同一硅衬底但通过阱(Well) 隔离: NMOS:构建在P型衬底上,源/漏极为N⁺掺杂区。当栅极电压(V_GS)高于阈值…...
在 ElementUI 中实现 Table 单元格合并
在 ElementUI 中实现 Table 单元格合并 在使用 ElementUI 的 Table 组件时,有时我们需要合并相邻的单元格,以提高表格的可读性和简洁性。下面是一个关于如何在 Table 中根据特定字段合并单元格的实现方法。 逻辑分析 spanMethod 方法:这是 …...

不加载PHP OpenTelemetry SDK实现Trace与Logs
目录 前言一、回到OpenTelemetry原理看问题1、数据接收(Receivers)2、数据处理(Processors)3、数据导出(Exporters) 二、不加载OpenTelemetry SDK实现Trace与Logs示例 前言 前面两篇我们分别介绍了OpenT…...
关于ffplay在macos上运行奔溃的问题
这个问题大概是由于 MacOS 的问题引起的,奔溃的地方在 SDL2 的代码中,如果直接使用 brew 安装 SDL2就会遇到这个问题,所以需要修改 SDL2源码然后再编译安装。 我这里采用的是 origin/release-2.28.x 分支,修改部分如下࿱…...

图论回溯
图论 200.岛屿数量DFS 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外ÿ…...

S32K3 工具篇9:如何在无源码情况下灵活调试elf文件
S32K3 工具篇9:如何在无源码情况下灵活调试elf文件 一,文档简介二, 功能实现2.1 代码工具准备2.2 elf修改功能实现:Fun2功能跳过2.2.1 PC越过Fun22.2.2 Fun2替换为nop 2.3 elf修改功能实现:Fun4替换Fun2入口2.3.1 link…...

桥 接 模 式
在玩游戏的时候我们常常会遇到这样的机制:我们可以随意选择不同的角色,搭配不同的武器。这时只有一个抽象上下文的策略模式就不那么适用了,因为一旦我们使用继承的方式,武器和角色总有一方会变得难以扩展。这时,我们就…...

OpenCV图像认知(二)
形态学变换: 核: 核(kernel)其实就是一个小区域,通常为3*3、5*5、7*7大小,有着其自己的结构,比如矩形结构、椭圆结构、十字形结构,如下图所示。通过不同的结构可以对不同特征的图像…...