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的参数