Dockerfile指令详解

Docker可以从Dockerfile中一步一步的读取指令来自动的创建镜像,常使用Dockerfile来创建用户自定义的镜像。格式如下: # Comment INSTRUCTION arguments 虽然前面的指令大小写不敏感,但习惯性的还是建议大写。docker是严格按照顺序(#注释起来的忽略)运行指令的。 下面逐个来介绍几个必要的指令。 FROM FROM <image> 或 FROM <image>:<tag> 在Dockerfile中第一条非注释INSTRUCTION一定是FROM,它决定了以哪一个镜像作为基准,<image>首选本地是否存在,如果不存在则会从公共仓库下载(当然也可以使用私有仓库的格式)。 RUN RUN <commnad> 或 RUN ["executable", "param1", "param2"] RUN指令会在当前镜像的顶层执行任何命令,并commit成新的(中间)镜像,提交的镜像会在后面继续用到。 上面看到RUN后的格式有两种写法。 shell格式,相当于执行/bin/sh -c "<command>": RUN apt-get install vim -y exec格式,不会触发shell,所以$HOME这样的环境变量无法使用,但它可以在没有bash的镜像中执行,而且可以避免错误的解析命令字符串: RUN ["apt-get", "install", "vim", "-y"] 或 RUN ["/bin/bash", "-c", "apt-get install vim -y"] 与shell风格相同 ENTRYPOINT ENTRYPOINT命令设置在容器启动时执行命令,如果有多个ENTRYPOINT指令,那只有最后一个生效。有以下两种命令格式: ENTRYPOINT ["executable", "param1", "param2"] 数组/exec格式,推荐 或 ENTRYPOINT command param1 param2 shell格式 比如: docker run -i -t --rm -p 80:80 nginx 使用exec格式,在docker run <image>的所有参数,都会追加到ENTRYPOINT之后,并且会覆盖CMD所指定的参数(如果有的话)。当然可以在run时使用--entrypoint来覆盖ENTRYPOINT指令。 使用shell格式,ENTRYPOINT相当于执行/bin/sh -c <command....

November 17, 2014 · admin