Dockerfile指令
Dockerfile中常用的指令CMD,ENTRYPOINT,ADD,COPY,VOLUME,WORKDIR,USER,ONBUILD和ENV等
CMD指令用于指定一个容器启动时要运行的命令,和RUN指令类似,只是RUN指令是指定镜像被构建时要运行的指令,而CMD是指定容器被启动时要运行的命令。
docker run -it paulversion/static_web /bin/true 和Dockerfile中使用CMD ["/bin/true"]
CMD可以为要运行的命令指定参数 CMD ["/bin/bash","-l"] 将-l标志传递给了/bin/bash命令
使用docker run 命令可以覆盖CMD指令。如果我们在Dockerfile里指定了CMD,而同时在docker run命令行中也指定了要运行的命令,命令行中指定的命令会覆盖Dockerfile中的CMD指令。在Dockerfile
中只能指定一条CMD指令。如果指定了多条CMD指令,也只有最后一条CMD指令会被使用。
ENTRYPOINT指令与CMD指令非常类似。Docker run命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中指定的命令
指定 ENTRYPOINT指令 ENTRYPOINT ["/usr/sbin/nginx"]类似于CMD指令,我们也可以在该指令中通过数组的方式为命令指定相应的参数如 ENTRYPOINT ["usr/sbin/nginx","-g","daemon off;"]
同时使用ENTRYPOINT和CMD指令来完成一些巧妙的工作 ENTRYPOINT ["/usr/sbin/nginx"] CMD["h"]如果启动容器时不指定任何参数,则在CMD指令中指定的-h参数会被传递给Nginx守护进程,即Nginx 服务器会以/usr/sbin/nginx -h 的方式启动
WORKDIR指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录 ENTRYPOINT或CMD指定的程序会在这个目录下执行
WOKEDIR /opt/webapp/db
RUN bundle install
我们将工作目录切换到/opt/webapp/db后运行bundle install 命令 可以通过-w标志在运行时覆盖工作目录 如 docker run -it -w /var/log web_static 该命令会将容器内的工作目录设置为 /var/log
ENV
ENV 指令用来在镜像构建过程中设置环境变量 如 ENV RVM_PATH /home/rvm/ 这个新的环境变量可以在后续的任何RUN 命令中使用
USER
USER指令用来指定该镜像以什么样的用户去运行 例如USER nginx基于该镜像启动的容器会以nginx用户的身份来运行,我们可以指定用户名或uid以及组或GID,甚至是两者的组合
ADD
ADD指令用来将构建环境下的文件和目录复制到镜像中。在安装一个应用程序时ADD指令需要源文件位置和目的文件位置两个参数 ADD software.lic /opt/application/softeware.lic
COPY
COPY 和ADD 相似COPY不会去做文件提取和解压的工作 COPY conf.d/ /etc/apache2/ 目录中
ONBUILD
ONBUILD指令能为镜像添加触发器trigger.当一个镜像被用做其他镜像的基础镜像时,该镜像中的触发器将会被执行。