1、FROM
FROM scratch #制作base image
FROM centos #使用base image
FROM ubuntu:14.04
为了安全,尽量使用官方的image作为base image
2、LABEL
LABEL maintainer = "xxxxxxx"
LABEL version = "0.1"
LABEL description = "this is description"
3、RUN
RUN yum update && yum install -y vim \
python-dev #反斜杠换行
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
避免无用分层,合并多条命令成一行(如使用&&),复杂的RUN使用反斜杠换行
4、WORKDIR(设定当前工作目录,尽量使用绝对目录)
WORKDIR /test #没有会自动创建
5、ADD and COPY
ADD hello /
ADD test.tar.gz / #添加到根目录并解压
WORKDIR /root
ADD hello test/ #/root/test/hello
WORKDIR /root
COPY hello test/
大部分情况,COPY优于ADD,ADD除了COPY还有额外功能(解压)
添加远程文件/目录,使用curl或wget
6、ENV
ENV MYSQL_VERSION 5.7 #设置常量
RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
&& rm -rf /var/tmp/lib/* #引用常量
尽量使用ENV,可增加可维护性
7、RUN CMD ENTRYPOINT
RUN:执行命令并创建新的Image Layer
CMD:设置容器启动后默认执行的命令和参数,如果docker run时指定了其他命令,
CMD命令被忽略,如果定义了多个CMD,只有最后一个会执行
ENTRYPOINT:设置容器启动时运行的命令,让容器以应用程序或 服务的形式运行,
不会被忽略,一定会执行