当前位置: 首页 > news >正文

【Docker】 08-Dockerfile

在这里插入图片描述

什么是Dockerfile

Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的教程,主要作用是用来构建docker镜像的构建文件。

Dockerfile解析过程

在这里插入图片描述

Dockerfile的保留命令

保留字作用
FROM当前镜像是基于哪个镜像的 第一个指令必须是FROM
MAINTAINER镜像维护者的姓名和邮箱地址
RUN构建镜像时需要运行的指令
EXPOSE当前容器对外暴露出的端口号
WORKDIR指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV用来在构建镜像过程中设置环境变量
ADD将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY类似于ADD,拷贝文件和目录到镜像中
将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被dockerrun之后的参数替换
ENTRYPOINT指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数
FROM
  • 基于哪个镜像进行构建新的镜像,在构建时会自动从docker hub拉取base镜像,必须作为Dockerfile的第一个指令出现
  • 语法
    FROM <image>
    FROM <iamge>[:tag] 使用版本不写为latest
    FROM <iamge>[@<digest>] 使用摘要
MAINTAINER
  • 镜像维护者的姓名和邮箱地址[不推荐使用了]
  • 语法:
    MAINTAINER <name>
RUN
  • RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步
  • 语法:
RUN <command> 
(shell form, thecommand is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)RUN echo helloRUN ["executable","param1""param2"] (exec form)
RUN [" /bin/bash","-c""echo hello"]
EXPOSE
  • 用来指定构建的镜像在运行为容器时对外暴露的端口
  • 语法:
    EXPOSE 80/tcp 如果没有显示指定则默认暴露都是tcp
    EXPOSE 80/udp
WORKDIR
  • 用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。
  • 语法:
WORKDIR /path/to/workdirWORKDIR /a
WORKDIR b
WORKDIR C
注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对
ENV
  • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。
  • 语法:
    ENV <key> <value>
    ENV <key>=<value>
ADD
  • 用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。
  • 语法:
ADD hom* /mydir/            通配符添加多个文件
ADD hom?.txt /mydir/        通配符添加
ADD test.txt relativeDir/   可以指定相对路径
ADD test.txt /absoluteDir/  也可以指定绝对路径
ADD url
COPY
  • 用来将context目录中指定文件复制到镜像的指定目录中
  • 语法:
COPY src dest
COPY ["<src>",.... "<dest>"]
VOLUME
  • 用来定义容器运行时可以挂载在宿主机的目录。如果不指定,则任何目录都不能挂载成功。
  • 语法:
    VOLUME
CMD
  • 用来为启动的容器指定执行的命令,在Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
  • 注意:Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
  • 语法:
    CMD ["executable","param1", "param2"] (exec form, this is the preferred form)
    CMD [ "param1","param2"] (as default parameters to ENTRYPOINT)
    CMD command param1 param2 (shell form)
  • 在启动容器的时候,可以在启动命令的后面追加指令,这样就可以覆盖CMD指令
    例如:
    docker run xxxx ls /
ENTRYPOINT
  • 用来指定容器启动时执行命令,和CMD类似
  • 语法:
    ENTRYPOINT ["executable""param1"" param2" ]
    ENTRYPOINT command param1 param2
  • ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的

基于Dockerfile构建SpringBoot项目

1、准备好SpringBoot项目的jar包
2、把jar包上传到服务器
3、编写Dockerfile

FROM openjdk:8
WORKDIR /[目录名]
ADD xxx.jar /[目录名]
EXPOSE [项目端口号]
ENTRYPOINT ["java","-jar"]
CMD ["xxx.jar"]

4、构建镜像
docker buile -t xxx .
5、运行镜像
docker run -p [端口号]:[端口号] xxx

http://www.lryc.cn/news/154198.html

相关文章:

  • 【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「Aries」解题思路
  • Github 下载指定文件夹(git sparse-checkout)
  • 蚂蚁集团SQLess 开源,与内部版有何区别?
  • An Efficient Memory-Augmented Transformer for Knowledge-Intensive NLP Tasks
  • Java项目中jar war pom包的区别
  • 整理mongodb文档:分页
  • 社区团购新玩法,生鲜蔬菜配货发货小程序商城
  • shell bash中设置命令set
  • 机器学习---预剪枝、后剪枝(REP、CCP、PEP、)
  • Python 爬虫—scrapy
  • ABB机器人20032转数计数器未更新故障报警处理方法
  • C# 记事本应用程序
  • 模型训练:优化人工智能和机器学习,完善DevOps工具的使用
  • WorldCoin 运营数据,业务安全分析
  • Java之Calender类的详细解析
  • uniapp 微信小程序 锚点跳转
  • 主成分分析笔记
  • android studio 的 adb配置
  • 【HTML5高级第一篇】Web存储 - cookie、localStorage、sessionStorage
  • Flink---1、概述、快速上手
  • QT实现TCP通信(服务器与客户端搭建)
  • 云备份项目
  • 基础算法(一)
  • Consider defining a bean of type问题解决
  • Android 1.2.1 使用Eclipse + ADT + SDK开发Android APP
  • Llama-7b-hf和vicuna-7b-delta-v0合并成vicuna-7b-v0
  • Centos、OpenEuler系统安装mysql
  • 如何在Win10系统上安装WSL(适用于 Linux 的 Windows 子系统)
  • 单片机通用学习-​什么是寄存器?​
  • 【C语言】文件操作详解