FROM
- FROM scratch #制作base image
- FROM centos #使用base image
- FROM ubuntu:14.04
FROM 是Dockerfile 最开头的关键字,它制定了我们要Build 的Docker image 的Base image 是什么,就是我们想在哪个image 之上去Build 我们的image ,如最开始的 Hello-world,它没有依赖任何Base image ,这样的话我们就选FROM scratch ,从头制作一个Base image ,更多的情况是使用已有的Base image,比如说官方的centos 的已有的Base image ,然后FROM centos ,这样的话可以在centos 的基础之上去Build image,同样也可以选择一些其他的Linux 发行版,如:ubntu
FROM 尽量使用官方的image 作为base image ->为了安全
LABEL
- LABEL maintainer="[email protected]"
- LABEL version="1.0"
- LABLE description="This is description"
LABEL 这个语法在Dockerfile 里面定义了我们的image Metadata
对于LABEL 来讲 Metadata 不可少!->对于image来讲它必须有一些帮助信息,就像我们平常了解的注释一样
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 一次,对image 来讲都会生成新的一层
RUN 为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!
WORKDIR
- WORKDIR /root
- WORKDIR /test # 如果没有会自动创建test 目录
- WORKDIR demo
- RUN pwd # 输出结果应该是 /test/demo
WORKDIR 是设定当前公公目录的,有点像Linux 中使用cd 改变当前目录位置
WORKDIR 用WORKDIR,不要用 RUN cd!尽量使用绝对目录!
ADD and COPY
- ADD hello /
- ADD test.tar.gz / # 添加到根目录并解压
- WORKDIR /root
ADD hello test/ # /root/test/hello
- WORKDIR /root
COPY hello test/
ADD 和 COPY 非常像,都是通过把本地的文件添加到Docker image 里面
ADD or COPY 大部分情况,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 尽量使用 ENV 增加可维护性!
VOLUME and EXPOSE (存储和网络)
CMD and ENTRYPOINT
要想对Dockerfile 有更加深入的了解可以搜索Dcokerfile reference 官网,里面详细的描述了Dockerfile 里面的语法和语法的使用场景