通常用于定义base image,例如:
FROM scratch # 制作base image FROM centos # 使用base image FROM ubuntu:14.04为了安全,尽量使用官方image作为base image!
定义image的metadata,类似于代码里的注释,例如:
LABEL maintainer="xiaoquwl@gmail.com" LABEL version="1.0" LABEL description="This is description"声明要安装或执行的文件。
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 /root也可以和其他命令组合起来使用,例如:
WORKDIR /test # 如果没有test目录则会自动创建 WORKDIR demo RUN pwd # 输出结果应该是/test/demo注意,尽量使用WORKDIR,不要使用RUN cd。尽量使用绝对路径!
这两个命令比较相似,都是用于添加和拷贝文件。 用法类似于
ADD hello / # 将hello文件添加到根目录稍微有点区别的是,ADD命令还可以用于文件的解压缩,例如:
ADD test.tar.gz /和其他命令一起使用:
WORKDIR /root ADD hello test/ # 此时hello文件目录为 /root/test/hello大部分情况下,COPY优于ADD。ADD除了COPY以外还有额外的功能(例如解压)。 如果需要添加远程文件或目录,尽量使用curl或wget。
在环境变量中声明常量,例如:
ENV MYSQL_VERSION 5.6 # 设置常量 RUN apt-get install -y mysql-server = "${MYSQL_VERSION}" \ $$ rm -rf /var/lib/apt/lists/* # 引用常量多使用ENV有可增加可维护性。
