Dockerfile文件参数配置和使用
天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
文章目录
- 一、Dockerfile介绍
- 二、Dockerfile常用参数
- 三、配置Dockerfile
- 四、使用Dockerfile
- 1. 构建镜像命令语法
- 2. 举例
K8S自动化部署JAVA项目(Gitlab CI/CD)请参考文章:
K8S部署Java项目(Gitlab CI/CD自动化部署)
一、Dockerfile介绍
官网参考文档
https://docs.docker.com/engine/reference/builder/
参数截图
二、Dockerfile常用参数
Dockerfile文件中的关键字不区分大小写,大写小写都可以
以下为常用参数(关键字)
关键字 | 描述 |
---|---|
FROM | 指定基础镜像 如FROM docker:latest |
MAINTAINER | 指定文件作者 如李白 |
ENV | 配置环境变量 如ENV JAVA_HOME=/root/local/java/jdk1.8-.0.121 |
ARG | 用于定义变量后面引用 如JAR_FILE=target/*.jar 后面可用${JAR_FILE}方式引用 |
WORKDIR | 工作目录,即后续RUN、ADD等命令执行位置的路径 |
COPY | 拷贝本地文件到指定目录 如COPY ./tomcat-8.0 /root/tomcat,不支持压缩文件自动解压,文件只会被复制为普通文件 |
ADD | 与COPY相似,但除了复制本地文件和目录外,还有几点高级功能,1会在将压缩文件复制到目标目录前自动解压,2还支持使用url作为源路径从网络下载文件并复制到容器中,3在构建上下文中添加的文件可以是一个url,他会自动下载并复制到容器中,tips:建议用COPY,更简单直接 |
RUN | 执行linux的shell命令 如RUN mkdir -p /root/project |
EXPOSE | 指定容器运行时坚挺的端口,镜像使用者可看到 如EXPOSE 8800 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 如ENTRYPOINT java -jar app.jar |
三、配置Dockerfile
配置举例
以java项目为例使用Dockerfile文件打包并构建镜像
#关键字和值之间可以是空格" "也可以是等号"="
#指定基础镜像,以此镜像为基础构建
FROM openjdk:8-jdk-alpine#作者
MAINTAINER hs#设置环境变量
#JAVA_HOME环境变量定义,即配置jdk安装目录路径,需是jdk文件全路径名
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-4.0.3.al8.x86_64
#MAVEN环境变量定义,即maven安装的位置,需是maven全路径名
ENV MAVEN_HOME=/usr/share/maven
#配置环境变量
ENV PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
#指定容器的时区
ENV TZ=Asia/Shanghai
#应用参数
#ENV ARGS=""
#target是jar包默认的位置,但是我们在CICD打包阶段已经将jar复制到了/root/jar/k8s-project目录中
#ARG JAR_FILE=target/*.jar#创建工作目录,此目录在CICD打包阶段已经创建
#RUN mkdir -p /root/jar/k8s-project#设置工作目录,后续命令默认执行位置为该路径,不设置的话后续会默认当前路径为工作路径
WORKDIR /root/jar/k8s-project#复制文件到镜像中,将本地文件或目录复制到镜像指定位置
#COPY app.jar /root/jar/k8s-project/app.jar
#COPY ${JAR_FILE} /root/jar/k8s-project/app.jar#将app.jar添加到指定文件夹中,并自动解压缩(与COPY类似,二选一即可)
#同时因为我们已经在.gitlab-ci.yml文件中的打包阶段执行了将jar复制到/root/jar/k8s-project目录的操作,故本文件中省略复制COPY或ADD命令
#ADD target/app.jar /root/jar/k8s-project/app.jar
#ADD ${JAR_FILE} /root/jar/k8s-project/app.jar#时区配置,可省略
#RUN ln -snf /usr/share/zonginfo/$TZ /etc/localtime && echo $TZ > /etc/timezone#容器入口,该命令应该是将每个字符串组合起来,nohub java -jar app.jar
ENTRYPOINT ["nohup","java","-jar","app.jar"]#声明要监听的端口(暴露端口,容器内部的端口,这里暂时不用)
#EXPOSE 8080
四、使用Dockerfile
在docker中可直接构建镜像,操作如下
准备一个项目
和一个Dockerfile
文件
1. 构建镜像命令语法
打标签,注意最后一个.
表示在当前位置执行,如果Dockerfile文件不在当前目录中,需要使用-f
指定Dockerfile文件位置
docker build -t 镜像名:镜像标签 .
或指定Dockerfile位置构建
docker build -t 镜像名:镜像标签 . -f /root/Dockerfile
推送镜像
docker push 镜像名:镜像标签
2. 举例
镜像名为springboot
镜像标签为v20240204
docker build -t springboot:v20240204 .
docker push springboot:v20240204
执行后即可生成镜像
后续可通过该镜像部署项目,如docker run命令部署或者k8s的yaml文件部署
当配合gitlab ci/cd的.gitlab-ci.yml文件进行项目自动化部署时,Dockerfile文件最好与.gitlab-ci.yml一样存放在项目根目录
详情可参考:.gitlab-ci.yml文件参数配置和使用
感谢阅读,祝君暴富!
相关文章:

Dockerfile文件参数配置和使用
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

Java实现婚恋交友网站 JAVA+Vue+SpringBoot+MySQL
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…...
React16源码: React中详解在渲染阶段Suspend的源码实现
Suspend 挂起详解 1 )概述 在react的更新过程当中,它的任务是可以被挂起的,也就是 Suspend关于 Suspend 字面意思就是挂起在某次更新的任务更新完成之后,暂时不提交 在 react更新中,分为两个阶段,首先是re…...
mac电脑风扇控制软件:Macs Fan Control Pro for mac 激活版
Macs Fan Control 是一款专门为 Mac 用户设计的软件,它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度,以提高设备的散热效果,减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温度和…...
easyexcel解析跨多行的数据
在使用easyexcel解析excel文件的时候,存在某列横跨多行,那么存在解析出的对象的某些属性是没有值的,那么我们要怎么处理呢?代码如下 定义实体对应excel文件 public class EtcParkingReconciliationDailyImportModel implements S…...

双目相机立体匹配基础
双目匹配就是用左相机和右相机去拍摄同一个点,目的是找到三维世界的同一个点,也就是在左相机和右相机中的成像点之间的像素差(视差),根据视差去求解深度,那么找到左相机点到右相机的同一个对应点这个过程就…...
【图论】网络流
网络流目前只整理模板,学习的话这篇博客可能不太适合 代码参考下方博客,加了一些自己的注释 算法学习笔记(28): 网络流究级的最大流算法:ISAP与HLPP FF 和 EK 仅用作理解代码,赛时请使用 Dinic 或 ISAP 下文建图方式都基于链式…...

【Matplotlib】figure方法 你真的会了吗!?
🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:matplotlib 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...

[C++]继承(续)
一、基类和派生类对象赋值转换 在public继承时,父类和子类是一个“is - a”的关系。 子类对象赋值给父类对象/父类指针/父类引用,我们认为是天然的,中间不产生临时对象,也叫作父子类赋值兼容规则(切割/切片ÿ…...

恒创科技:服务器内存不足影响大吗?
服务器在为网站、应用程序和在线服务提供支持方面发挥着关键作用。这些服务器需要提供最佳性能,以确保正常无缝的用户体验,而RAM是显著影响服务器性能的关键配置之一。 RAM 是一种随机存取存储器,计算机和服务器使用它来临时存储正在使…...

深入理解网络通信和TCP/IP协议
目录 计算机网络是什么? 定义和分类 计算机网络发展简史 计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 TCP/IP 网络传输中的数据 地址和端口号 MAC地址 IP 地址 端口号 为什么端口号有65535个? 综述 TCP 特性 TCP 三次握…...

Open CASCADE学习|分割曲线
1、通过参数进行分割 分别获得曲线的 FirstParameter 和 LastParameter ,然后对参数进行分割,获得n个ui,并对每个ui调用D0(获得这个点的坐标值)或D1(获得这个点的坐标值和切向量)。这个方法的优…...

vulhub中Adminer远程文件读取漏洞复现(CVE-2021-43008)
Adminer是一个PHP编写的开源数据库管理工具,支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle、Elasticsearch、MongoDB等数据库。 在其版本1.12.0到4.6.2之间存在一处因为MySQL LOAD DATA LOCAL导致的文件读取漏洞。 参考链接: https://gith…...

MOS管驱动电流估算-Qg参数
MOS管驱动电流估算 例:FDH45N50F如下参数: 有人可能会这样计算: 开通电流 带入数据得 关断电流 带入数据得 于是乎得出这样的结论,驱动电流只需 250mA左右即可。仔细想想这样计算对吗? 这里必须要注意这样一个条件细…...

Vision Transfomer系列第一节---从0到1的源码实现
本专栏主要是深度学习/自动驾驶相关的源码实现,获取全套代码请参考 这里写目录标题 准备逐步源码实现数据集读取VIt模型搭建hand类别和位置编码类别编码位置编码 blocksheadVIT整体 Runner(参考mmlab)可视化 总结 准备 本博客完成Vision Transfomer(VIT)模型的搭建和flowers数…...

【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头
需求 前三条数据以走马灯形式展现,指示器 hover 时可以切换到对应内容 实现 <template><div v-loading"latestLoading"><div class"upload-first" v-show"latestThreeList.length > 0"><el-carousel ind…...
Ubuntu 22.04 上安装和使用 Go
1.下载 All releases - The Go Programming Language //https://golang.google.cn/dl/wget https://golang.google.cn/dl/go1.21.6.linux-amd64.tar.gz 2.在下载目录下执行,现在,使用以下命令将文件提取到 “/usr/local ” 位置 sudo tar -C /usr/…...
ES6-const
一、基本用法 - 语法:const 标识符初始值;注意:const一旦声明变量,就必须立即初始化,不能留到以后赋值 - 规则:1.const 声明一个只读的常量,一旦声明,常量的值就不能改变2.const 其实保证的不是变量的值不…...
Android消息通知Notification
Notification 发送消息接收消息 #前言 最近在做消息通知类Notification的相关业务,利用闲暇时间总结一下。主要分为两部分来记录:发送消息和接收消息。 发送消息 发送消息利用NotificationManager类的notify方法来实现,现用最普通的方式发…...

2V2无人机红蓝对抗仿真
两架红方和蓝方无人机分别从不同位置起飞,蓝方无人机跟踪及击毁红方无人机 2020a可正常运行 2V2无人机红蓝对抗仿真资源-CSDN文库...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...