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中各自扮演着不同的角色,它们的主要差别如下:

  1. 定义阶段和存在时间:
    ARG命令主要用于在构建镜像的过程中设置一个构建时的环境变量。这些变量在构建过程中可以被使用,并且可以在Dockerfile中通过引用它们的名称来访问。然而,一旦镜像编译成功,ARG指定的变量将不再存在。
    ENV命令则用于在容器运行时设置环境变量。这些变量在容器启动时被设置,并且可以在容器中的应用程序中使用。与ARG不同,ENV设置的环境变量在镜像构建完成后会保留在镜像中,因此当使用构建后的镜像运行容器时,这些环境变量仍然保持不变。
  2. 使用方式和语法:
    ARG命令的格式为ARG [=]。在执行docker build时,可以通过–build-arg <参数名>=<值>来为声明的变量赋值。此外,ARG还可以引用Docker内置的一些镜像创建变量,这些变量无需用户声明即可直接使用。
    ENV命令的语法允许直接设置一个或多个环境变量,如ENV MY_NAME=“John Doe” MY_DOG=Rex。它支持在指令中设置多个环境变量,并且环境变量的值可以被其他环境变量引用。
  3. 功能和用途:
    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 也是另一个参数。每个参数都作为一个独立的数组元素。

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

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

相关文章

Git:分布式版本控制系统

目录 Git的特点和功能常见的功能和对应的命令 Git的特点和功能 Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理项目的代码变更。它是由Linus Torvalds在2005年创建的&#xff0c;旨在管理Linux内核的开发。Git具有以下特点和功能&#xff1a; 分布式版本控制&#xf…

企业数字化问题,一个系统能否解决?

在企业数字化转型的过程中&#xff0c;很多企业都会遇到各种各样的问题。有时候&#xff0c;这些问题并不仅仅是技术上的挑战&#xff0c;而更多地涉及到企业管理和运营的主要问题。贪大求全、策略失误、软件公司的“上游路线”等现象&#xff0c;都可能成为企业数字化建设失败…

java并发编程之 volatile关键字

1、简单介绍一下JMM Java 内存模型&#xff08;Java Memory Model 简称JMM&#xff09;是一种抽象的概念&#xff0c;并不真实存在&#xff0c;指一组规则或规范&#xff0c;通过这组规范定义了程序中各个变量的访问方式。java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问…

快速区分清楚图形渲染中的AABB,KD树和BVH这些概念

快速区分清楚图形渲染中的AABB&#xff0c;KD树和BVH这些概念 主要想形象去区分好这些术语&#xff0c;目的是扫盲&#xff0c;先开好坑&#xff0c;内容持续填充。 0.先摆出这些词的全称 AABB&#xff1a; 原名&#xff1a;axis aligned bounding box&#xff1b;中文直译名…

流畅的 Python 第二版(GPT 重译)(二)

第三章&#xff1a;字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins&#xff0c;早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中&#xff0c;也是间接的&#xff0c;因为dict类型是 Python 实现的基本部分。…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展&#xff0c;我们正逐渐步入数字化智能时代&#xff0c;这个时代不仅为企业带来了无限的机遇&#xff0c;也让其面对前所未有的挑战。在这个快速变革的时代&#xff0c;企业必须不断调整自己的经营策略&#xff0c;适应数字化转型的浪潮&#xff0c;以…

使用appuploder上架App Store流程

使用appuploder流程笔记 1.如何没有账号去apple官网注册一个&#xff0c;地址&#xff1a;https://developer.apple.com/account 2.下载解压appuploder&#xff0c;双击打开&#xff0c;用刚刚注册的账号登录&#xff0c;下载地址&#xff1a;http://www.applicationloader.n…

PHP连接达梦数据库

PDO是一种在PHP中连接数据库的接口&#xff0c;可以通过PDO接口使用PHP连接达梦数据库。 1、安装PHP环境 检查当前环境是否安装PHP [rootlocalhost ~]# php -v 当前环境并未安装PHP&#xff0c;需要进行安装&#xff0c;选择安装PHP7.3版本。 2、安装 epel-release源和源管…

人工智能时代的引领者:AI提示工程激发大语言模型的无限潜能

文章目录 一、AI提示工程的概念与定义二、AI提示工程的应用领域三、AI提示工程的技术创新与突破四、AI提示工程的未来发展趋势《AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型》亮点内容简介作者简介目录 一、AI提示工程的概念与定义 在当今日新月异的科…

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…

mysql四种事务隔离级别,2024金三银四

TransactionDefinition.PROPAGATION_MANDATORY&#xff1a;如果当前存在事务&#xff0c;则加入该事务&#xff1b;如果当前没有事务&#xff0c;则抛出异常。 TransactionDefinition.PROPAGATION_NESTED&#xff1a;如果当前存在事务&#xff0c;则创建一个事务作为当前事务的…

数据结构 二叉树 力扣例题AC——代码以及思路记录

LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录&#xff0c;请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …

利用matplot绘制折线图(详细版-有示例数据)

对于五组数据&#xff0c;绘制折线图&#xff0c;添加有图例、不同折线的颜色等&#xff0c;如下图所示&#xff1a; python代码&#xff1a; import matplotlib.pyplot as plt import numpy as np# 定义数据 data [[1, 2, 3, 4, 5, 6, 7, 8], # 数据1[2, 2, 4, 4, 5, 5, 6,…

MySQL 运算符

MySQL 运算符主要包括 3 大类&#xff1a;比较运算符、算术运算符、逻辑运算符。 算术运算符 加 、减 - 、乘 * 、除 / 、求余 % 比较运算符 运算符 语法 说明 ab 如果参与计算的两个操作数相等则为 true &#xff0c;否则 false ! 或者 <> a!b 或者 a<>b 如…

【Godot 3.5组件】简单血条组件HealthBar

说明 本文原文写自2022年&#xff0c;内容基于Godot3.5。是本人早期进行Godot组件化和自定义节点探索时的产物&#xff0c;当时的代码和思想可能不太成熟&#xff0c;但贴出来&#xff0c;供需要学习组件化基础思路的同学食用。 概述 血条作为一个非常基础和常见的组件&…

C语言易错知识点:二级指针、数组指针、函数指针

指针在C语言中非常关键&#xff0c;除开一些常见的指针用法&#xff0c;还有一些可能会比较生疏&#xff0c;但有时却也必不可少&#xff0c;本文章整理了一些易错知识点&#xff0c;希望能有所帮助&#xff01; 1.二级指针&#xff1a; parr是一个指针数组&#xff0c;其中每…

速盾:cdn加速后真实ip会暴漏吗?

CND&#xff08;内容分发网络&#xff09;是一种通过将内容分发到全球各地的服务器来加速网站访问的技术。当用户请求访问一个网站时&#xff0c;CDN会将静态资源&#xff08;如图片、视频、脚本等&#xff09;缓存在离用户最近的服务器上&#xff0c;从而提高网站的加载速度。…

uniapp中使用mixins控制横屏竖屏

概念 mixins概念和用法同vue在此不在赘述。 在根目录下创建mixins目录&#xff0c;在mixins目录下创建lockScreen.js export default {data() {return {};},onLoad() {// #ifndef H5plus.screen.lockOrientation(portrait-primary);// #endif},onShow: function() {},onUnload…

国创证券|上市公司破产了手里的股票怎么办?

上市公司破产了&#xff0c;那只能等候公司破产清算补偿。 上市公司破产后&#xff0c;公司的财物将进行清算&#xff0c;还完债款假如还有剩下财物&#xff0c;就会分给持有股票的股民。一般优先偿还借主、再偿还优先股东&#xff0c;最终才是一般股东&#xff0c;假如资不抵…