• 【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
      FROM [:tag] 使用版本不写为latest
      FROM [@] 使用摘要
    MAINTAINER
    • 镜像维护者的姓名和邮箱地址[不推荐使用了]
    • 语法:
      MAINTAINER
    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 hello
    
    RUN ["executable","param1""param2"] (exec form)
    RUN [" /bin/bash","-c""echo hello"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    EXPOSE
    • 用来指定构建的镜像在运行为容器时对外暴露的端口
    • 语法:
      EXPOSE 80/tcp 如果没有显示指定则默认暴露都是tcp
      EXPOSE 80/udp
    WORKDIR
    • 用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。
    • 语法:
    WORKDIR /path/to/workdir
    
    WORKDIR /a
    WORKDIR b
    WORKDIR C
    注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    ENV
    • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。
    • 语法:
      ENV
      ENV =
    ADD
    • 用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。
    • 语法:
    ADD hom* /mydir/            通配符添加多个文件
    ADD hom?.txt /mydir/        通配符添加
    ADD test.txt relativeDir/   可以指定相对路径
    ADD test.txt /absoluteDir/  也可以指定绝对路径
    ADD url
    
    • 1
    • 2
    • 3
    • 4
    • 5
    COPY
    • 用来将context目录中指定文件复制到镜像的指定目录中
    • 语法:
    COPY src dest
    COPY ["",.... ""]
    
    • 1
    • 2
    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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

  • 相关阅读:
    Redis原理到常用语法基础图文讲解
    无BUG微信去水印小程序源码(可运营美化版+送免费接口)
    【广州华锐互动】VR线上播控管理系统让虚拟现实教学效果更加显著
    中级java面试问题大全及答案大全
    typescript ts 基础知识之接口、泛型
    【.NET深呼吸】将XAML放到WPF程序之外
    从统计语言模型到预训练语言模型---预训练语言模型(Transformer)
    PCA和LDA数据降维计算(含数学例子推导过程)
    制作.a静态库 (封盒)
    9大性能优化经验总结,强烈建议收藏!
  • 原文地址:https://blog.csdn.net/piano_diano/article/details/132652073