Dockerfile命令集

2023-11-17

1.什么是Dockerfile

1.1 Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

制作镜像的Dockerfile文件所在的目录为dockerfile的上下文环境。

1.2 docker build命令


docker build的使用

docker build -t [imagename:tag] [filepath]
docker build:构建镜像,-t 指定image的name和版本,指定构建镜像的Dockerfile文件。

如果当前上下文内的Dockerfile文件名就是Dockerfile,在构建镜像的时候,命令如下
dcoker build -t mycentos:01 . 
-t mycentos:表示构建的image名字为mycentos,并且指定版本为01
【 . 】 :最后的一个 点 表示指定当前上下文中的文件名为Dockerfile文件【如果是其他文件,指定文件名】

1.3 Dockerfile相关指令描述

保留字 作用
FROM 当前镜像是基于哪个镜像[第一个指定必须是FROM]
MANITAINER 维护者的姓名和邮箱地址[废弃,意义不大]
RUN 构建镜像是需要运行的指令
EXPOSE 当前容器对外 暴露的端口号
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV 用来在构建镜像的过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进容器且ADD命令会自动处理URL和解压tar包
COPY 类似于ADD,拷贝文件和目录到镜像中 将从构建上下文目录中<原路径>的文件/目录复制到新的一层镜像内的<目标路径>位置
VALUME 容器数据卷,用户数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动过程及其参数

2.Dockerfile命令详情

2.1 FROM命令

  • 基于哪个基础镜像进行构建新的镜像,在构件时会自动从docker hub拉取base进行,必须作为Dockerfile的第一个指令出现
  • 语法
FROM <image>
FROM <image>[:tag]       使用最新版本不写为latest 
FROM <image>[@<digest>]  使用摘要

注意:

构建的docker镜像,如果没有服务,在运行为容器之后,会立刻结束进程。
如果有服务在镜像运行为容器之后一直运行[阻塞系统进程],则容器不会在启动后结束进程。
在image没有服务的情况下,启动为容器,会在容器启动后结束进程。
如果想进入容器,只能在启动容器的时候加上[-it],会在容器运行之后,直接进入容器内部。
其他情况同样适用,只要是在image启动为容器后直接进入容器内部,都可以使用该方法。

2.2 RUN命令

  • RUN指令将在当前镜像智商的新层中自行任何命令并提交结果,生成的提交镜像将用于Dokcerfile中的下一步
  • 简单来说,就是构建镜像时执行的命令,或者shell脚本
  • 语法
# 语法一,在RUN 后面直接写shell脚本
RUN <command> 
#例句
RUN echo hello

#语法二,使用json格式[更像是string数组,将一条命令拆分为一个string数组]
RUN ["executable","param1","param2"]
#例句
RUN ["/bin/bash","-c","echo hello"]

2.3 EXPOSE命令

  • 用来指定构建的镜像运行为容器时对外暴露的端口
  • 语法
EXPOSE 80/tcp       如果没有显示指定则默认暴露都是TCP
EXPOSE 80/udp

2.4 CMD命令

  • 用来为启动的容器指定执行的命令,在Dockerfile中只能有一条CMD指令,如果列出多个命令,则只有最后一个命令才会生效。
  • 注意:Dockerfile中只能有一条CMD指令。如果列出多个指令,则只有最后一个命令才会生效
  • 容器启动的时候,也就是在docker run命令的最后,如果输入一条指令,将会覆盖Dockerfile中的CMD命令
  • 如果Dockerfile中没有CMD指令,那么在Docker run的时候,最后加入一条指令,可能会报错【不确定】
  • 语法:
CMD ["executable","param1","param2"]  (exec from,this is the preferred form)
CMD ["param1","param2"]               (as default parameters to ENTRYPOINT)
CMD command param1 param 2            (shel from)

2.5 WORKDIR命令

  • 用来为Dockerfile中的任何RUN,CMD,ENTRYPOINT,COPY和ADD指令设置工作目录,如果WORKDIR不存在,即使他没有在任何后续Dokcerfile指令中使用,它也将被创建
  • 语法
WORKDIR /path/to/workdir

#例句
WORKDIR /a
WORKDIR b
WORKDIR /root/home/opt

注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前的WORKDIR路径相对

2.6 ENV命令

  • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。
  • 语法
ENV <key> <value>
ENV <key>=<value> ... 


注意:在dockerfile中其他地方引用ENV定义的环境变量,可以使用$key来使用
例如:定义一个路径,在WORKDIR命令中引用
ENV BASE_DIR=/data/opt
WORKDIR $BASE_DIR

2.7 ADD命令

  • 用来从context上下文复制新文件、目录或者远程文件URL,并将它们添加到位于指定路径的镜像文件中
  • ADD命令如果是从宿主机上复制压缩文件到镜像,会自动解压缩
  • ADD命令可以自动下载URL远程文件,但是下载的文件不能自动解压缩
  • 语法:
ADD hom* /mydir                     通配符添加多个文件
ADD hom?.txt /mydir                 通配符添加[?站位一个字符]
ADD test.txt  /relativeDir/         可以指定相对路径
ADD test.txt /absoluteDir/          可以指定绝对路径
ADD url

2.8 COPY命令

  • 用来将context目录中指定文件复制到警醒的指定目录中
  • 语法:
COPY src dest
COPY ["<src>",...,"<dest>"]

2.9 VALUME命令

  • 用来定义容器运行时可以挂载到宿主机的目录
  • 语法
VALUME ["/data"]

3 Dockerfile打包SpringBoot项目

3.1 创建一个简单的SpringBoot项目

省略创建SpringBoot应用

3.2 将SpringBoot应用通过maven打包成jar包
3.3 将jar包上传到Dockerfile所在的上下文目录
3.4 编写Dockerfile文件

# 基于jre8镜像
FROM openjdk:8-jre 

#工作目录,在这里定义工作目录,下面所有的操作都是基于当前目录[目录不存在时,Dockerfile会地总创建]
WORKDIR /app  

#将Dockerfile上下文目录中的SpringBoot应用jar包拷贝到镜像的工作目录
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar 

#容器可以向外暴露的端口
EXPOSE 8080

#镜像启动为容器时需要执行的命令,ENTRYPOINT 为必须要执行的命令
ENTRYPOINT ["java","-jar"]

#CMD的参数可以在镜像运行的时候被替换掉,并且成为ENTRYPOINT命令的参数
CMD ["app.jar"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile命令集 的相关文章

随机推荐

  • 【Matlab】常用函数汇总(二)

    Matlab 是矩阵实验室 Matrix Laboratory 的英文缩写 是用于科学与工程计算的工具 Matlab 提供了许多常用的数学函数 本文主要介绍 Matlab 与统计 排序 求和与乘积 以及随机数相关的函数 目录 1 统计函数
  • Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例

    最近我们被客户要求撰写关于支持向量回归的研究报告 包括一些图形和统计输出 支持向量回归 SVR 是一种回归算法 它应用支持向量机 SVM 的类似技术进行回归分析 正如我们所知 回归数据包含连续的实数 为了拟合这种类型的数据 SVR模型在考虑
  • 软件工程学习日记(4)----面向数据流的设计方法

    用面向数据流的方法设计下列系统的软件结构 问题回顾 为方便储户 某银行拟开发计算机储蓄系统 储户填写的存款单或取款单由业务员输入系统 如果是存款 系统记录存款人姓名 住址 存款类型 存款日期 利率等信息 并印出存款单给储户 如果是取款 系统
  • 四元组与旋转矩阵

    转自 https blog csdn net linuxheik article details 49129927 引用 四元组与旋转矩阵 2011 09 22 17 13 39 分类 DirectX资料 举报 字号 订阅 下载LOFTER
  • halcon起步

    halcon起步 安装 软件介绍 安装 下载地址 管理员方式运行 选择安装 否 复制dll文件 D Program Files MVTec HALCON 12 0 bin x64 win64 重启计算机 软件介绍 打开药品识别例程 导出为c
  • vue3报错:‘xxxx‘is declared but its value is never read.Vetur(6133)

    原因 因为vue3不支持vetur了 解决办法 1 禁用或者删除vscode中的vetur扩展 2 下载Vue Language Features 3 重新打开项目 完美解决
  • 医学图像相关的数据集

    医学图像相关的数据集 1 Camelyon 乳腺病理 数据集获取 参考 博文地址 相关文章推荐 预处理
  • Qt QString字符串分割、截取的3种方法

    Qt QString字符串分割 截取 在做项目中不可避免的会使用到一串字符串中的一段字符 因此常常需要截取字符串 有两种方式可以解决这个问题 方法一 QString分割字符串 QString date dateEdit toString y
  • Log4Net使用实例(VS2008 App)

    准备工作 首先要去http logging apache org log4net 下载log4net的源代码 将log4net sln载入Visual Studio NET 编译后可以得到log4net dll 也可以直接在网上搜索下载别人
  • CI/CD(持续集成/持续交付/持续部署)

    CICD流程图 代码管理仓库gitlab gitlab是个私有的代码管理仓库 可以运行在企业内部的网络中 使企业开发人员可以保持代码的私有性 同时也方便自行管理代码 gitlab有很多CI功能 但是通常还是采用Jenkins 原因就是Jen
  • 淘宝用户日志数据集的用户行为分析与用户分群

    文章目录 数据集描述 一 数据清洗 1 读取并查看数据基本信息和数据的完整性 2 查看数据集中行的重复情况并删除 3 处理缺失值 4 合并month和day列组成时间类型的date列 5 划分子数据集 二 数据分析 1 访问量与访客量的情况
  • 嵌入式开发4(I.MX6U串口实验与ubuntu串口调试助手)

    在学习正点原子6UL嵌入式开发板的时候 串口UART是一个很重要的点 在以后的实验中会经常遇到 但是教学中是在windows环境下搭建ubuntu虚拟机来编译代码的 串口调试助手使用的是windows版本的 而我是安装了双系统 所以研究了一
  • visual studio中配置OpenCVsharp

    只能在线下载 每次新建项目就要下载一次 没找到离线下载的方式 很可恶 visual studio2019 C 语言 配置OpenCVsharp当前最新版 4 6 0 在浏览界面搜索OpenCVsharp 下载OpenCVsharp4和对应r
  • unity 路径

    IOS Application dataPath Application xxxxxxxx xxxx xxxx xxxx xxxxxxxxxxxx xxx app Data Application streamingAssetsPath A
  • 使用 .net + blazor 做一个 kubernetes 开源文件系统

    背景 据我所知 目前 kubernetes 本身或者其它第三方社区都没提供 kubernetes 的文件系统 也就是说要从 kubernetes 的容器中下载或上传文件 需要先进入容器查看目录结构 然后再通过 kubectl cp 指令把文
  • linux系统 在python3.6/CUDA 11环境下安装tensorflow 1.15

    今天在实验室服务器 3090 上跑别人用tensorflow写的代码 CPU使用率飙高 吓得我赶紧停了QAQ 后来发现是因为GPU无法使用 其原因是官网中cuda11 X 仅支持tf2 X 不支持tf1 X 通过查阅资料 参考大佬的方法 最
  • 力扣-912题 排序数组(C++)- 快排必须烂熟于心

    题目链接 https leetcode cn com problems sort an array 题目如下 class Solution public vector
  • vue3中百度地图的使用

    在vue3中使用百度地图 vue3 百度地图 文章目录 在vue3中使用百度地图 前言 一 百度地图在vue3中的引入 二 页面内容 注意事项 三 异步加载文件 四 图 前言 具体为百度地图引入 如何使用点位和自定义点位信息窗口 提示 以下
  • 2015蓝桥杯——密文搜索

    题目描述 标题 密文搜索 福尔摩斯从X星收到一份资料 全部是小写字母组成 他的助手提供了另一份资料 许多长度为8的密码列表 福尔摩斯发现 这些密码是被打乱后隐藏在先前那份资料中的 请你编写一个程序 从第一份资料中搜索可能隐藏密码的位置 要考
  • Dockerfile命令集

    Dockerfile与docker build命令 1 什么是Dockerfile 1 1 Dockerfile 1 2 docker build命令 1 3 Dockerfile相关指令描述 2 Dockerfile命令详情 2 1 FR