老鬼的博客 来都来啦,那就随便看看吧~
dockerfile介绍
发布于: 2024-07-31 更新于: 2024-08-01 分类于:  阅读次数: 

一:介绍

1
dockerfile是类似于一种脚本,可以按着脚本生成对应的镜像。

二:基础知识

2.1 命令介绍

1
2
3
4
1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2.指令按照从上到下,顺序执行
3.#表示注释
4.每条指令都会创建一个新的镜像层并对镜像进行提交

2.2 执行流程

1
2
3
4
5
1.docker从基础镜像运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到所有指令都执行完成

三:常用保留字

  • from

    1
    2
    基础镜像,当前新镜像是基于哪个镜像的,指定一个已经
    存在的镜像作为模板,第一条必须是from
  • MAINTAINER

    1
    镜像维护者的姓名和邮箱
  • RUN

    1
    执行shell脚本,是在build的时候执行的
  • EXPOSE

    1
    对外暴露的端口
  • WORKDIR

    1
    指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
  • USER

    1
    指定该镜像以什么用户执行,如果不指定,默认是root
  • ENV

    1
    2
    3
    4
    用来在构建镜像过程中设置环境变量
    案例: ENV MY_PATH /opt/dd
    这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境
    变量前缀一样,也可以在其他指令中直接使用这些环境变量($MY_PATH)。
  • ADD

    1
    将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
  • COPY

    1
    2
    3
    类似于ADD,拷贝文件和目录到镜像中。
    将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像
    内的<目标路径>位置。
  • VOLUME

    1
    容器数据卷,用于数据保存和持久化工作
  • CMD

    1
    2
    3
    4
    1.指定容器启动后要做的事情
    2.注意
    - dockerfile可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
    - CMD是在ducker run时运行,RUN指令是在docker build时运行
  • ENTRYPOINT

    1
    2
    1.指定一个容器启动时要运行的命令
    2.类似于CMD指令,但ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令参数会被当作参数传递给ENTRYPOINT指令指定的程序
  • centos安装jdk17案例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    # 继承centos
    from centos
    # 作者
    MAINTAINER renjie

    # 根目录
    ENV MYPATH /opt
    WORKDIR $MYPATH

    # 安装vim编辑器
    RUN yum -y install vim

    # 安装ifconfig命令查看网络ip
    RUN yum -y install net-tools

    # 安装jdk17以及lib库
    RUN yum -y install glibc.i686
    RUN mkdir $MYPATH/jdk

    # ADD是相对jar,把jdk-17_linux-x64_bin.tar.gz添加到容器中,安装包必须要和Dockfile文件在同一位置
    ADD jdk-17_linux-x64_bin.tar.gz $MYPATH/jdk

    # 配置java环境变量

    ENV JAVA_HOME $MYPATH/jdk/jdk-17.0.7
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
    ENV PATH $JAVA_HOME/bin:$PATH
    EXPOSE 80


    CMD echo $MYPATH
    CMD echo "success----------ok"
    CMD /bin/bash
  • 执行build

    1
    docker build -t centos_jdk17:1.0 .

1.jpg

  • 虚悬镜像
    1
    2
    3
    4
    5
    仓库和标签都是<none>的镜像,没有什么用可以删除
    1.查询所有的虚悬镜像
    docker images ls -f dangling=true
    2.删除所有的虚悬镜像
    docker images prune
*************感谢您的阅读*************