Dockerfile常用语法讲解

    xiaoxiao2022-07-07  219

    FROM

    通常用于定义base image,例如:

    FROM scratch # 制作base image FROM centos # 使用base image FROM ubuntu:14.04

    为了安全,尽量使用官方image作为base image!

    LABEL

    定义image的metadata,类似于代码里的注释,例如:

    LABEL maintainer="xiaoquwl@gmail.com" LABEL version="1.0" LABEL description="This is description"
    RUN

    声明要安装或执行的文件。

    RUN yum update && yum install -y vim \ python-dev # 反斜线换行 RUN apt-get update && apt-get install -y perl \ pwgen --no-install-recommends && rm -rf \ /var/lib/apt/lists/* # 注意清理cache RUN bin/bash -c 'source $HOME/.bashrc;echo $HOME'

    为了美观,复杂的RUN请用反斜线换行! 避免无用分层,合并多条命令成一行!

    WORKDIR

    主要用于切换目录

    WORKDIR /root

    也可以和其他命令组合起来使用,例如:

    WORKDIR /test # 如果没有test目录则会自动创建 WORKDIR demo RUN pwd # 输出结果应该是/test/demo

    注意,尽量使用WORKDIR,不要使用RUN cd。尽量使用绝对路径!

    ADD and COPY

    这两个命令比较相似,都是用于添加和拷贝文件。 用法类似于

    ADD hello / # 将hello文件添加到根目录

    稍微有点区别的是,ADD命令还可以用于文件的解压缩,例如:

    ADD test.tar.gz /

    和其他命令一起使用:

    WORKDIR /root ADD hello test/ # 此时hello文件目录为 /root/test/hello

    大部分情况下,COPY优于ADD。ADD除了COPY以外还有额外的功能(例如解压)。 如果需要添加远程文件或目录,尽量使用curl或wget。

    ENV

    在环境变量中声明常量,例如:

    ENV MYSQL_VERSION 5.6 # 设置常量 RUN apt-get install -y mysql-server = "${MYSQL_VERSION}" \ $$ rm -rf /var/lib/apt/lists/* # 引用常量

    多使用ENV有可增加可维护性。

    最新回复(0)