Dockerfile语法

github上有docker-library:       

https://github.com/docker-library

一、FROM

1、从头开始创建镜像:

FROM scratch

2、基于某个镜像开始创建镜像:

FROM ubuntu:14.04
FROM centos

3、备注:最好使用官方的image作为base image,这样安全性高

二、LABEL(可以看做是注释)

案例:

LABEL version="1.0"
LABEL description="This is description"

三、RUN(执行命令并创建新的 Image Layer)

1、案例:

RUN yum update && yum install -y vim 
python-dev   #反斜线换行

2、备注:

每一个RUN会创建一层新的container,所以最好使用&&合并多条命令,使用反斜线进行换行

四、WORKDIR(类似linux的cd)

1、案例:

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

2、备注:

1)使用WORKDIR,不要用RUN cd
2) 尽量使用绝对目录

五、ADD  and  COPY(把本地文件添加到镜像中)

1、案例:

ADD hello /
WORKDIR /root
ADD hello test/   #/root/test/hello

WORKDIR /root
COPY hello test/

2、ADD和COPY的区别:

ADD test.tar.gz / #ADD添加到根目录并且解压

 3、备注:

1) 大部分情况下,COPY优于ADD
2) ADD除了COPY功能外还有解压功能
3) 添加远程文件/目录请使用curl或者wget

六、ENV(设置常量)

1、案例:

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

2、备注:尽量使用ENV增加可维护性

七、CMD &&  ENTRYPOINT

1、CMD (设置容器启动后默认执行的命令和参数)

1)容器启动时默认执行的命令

2)如果docker run指定了其他命令,CMD命令被忽略

3)如果定义了多个CMD,只有最后一个会执行

2、ENTRYPOINT(设置容器启动时运行的命令)

1)让容器以应用程序或服务的形式运行

2)不会被忽略,一定会执行

3、CMD配合ENTRYPOINT

1) 案例:

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y stress
ENTRYPOINT ["/usr/bin/stress"]
CMD []

2) 说明:这里的CMD [] 用于接收/usr/bin/stress的参数

原文地址:https://www.cnblogs.com/zhengchuzhou/p/9792278.html