Dockerfile中容易混淆的命令详解

RUNCMDENTRYPOINT

命令解释

  • RUN 执行命令并建立新的Image Layer
  • CMD 设置容器启动后默认执行的命令和参数
  • ENTRYPOINT 设置容器启动时运行的命令

执行方式

  • EXECdocker

    FROM debian
    RUN ['apt-get','install','-y','vim']
    CMD ['/bin/echo','hello world!!']
    ENTRYPOINT ['/bin/echo','hello world!!']
  • SHELLshell

    FROM debian
     RUN apt-get install -y vim
     CMD echo 'hello world!!'
     ENTRYPOINT echo 'hello world!!'

注意事项

  • 使用run命令构建镜像时apt-get update && apt-get install -y须要放在同一个RUN命令中,不然apt-get install会从缓存中安装软件,致使apt-get update执行毫无心义
  • apt-get install 的软件尽可能一个一行而且按照字母顺序排列,这样能够避免安装重复的命令
  • apt-get install安装软件时能够为软件指定特定的版本apt-get install -y aufs-tools s3cmd=1.1.*

命令差别

  • CMDvim

    • 容器启动时默认执行的命令
    • docker run 指定了其余命令,CMD会被忽略
    • 若是定义了多个CMD,只有最后一个会执行
  • ENTRYPOINT缓存

    • 让容器以运用程序或者服务的形式运行
    • 不会被忽略,必定会执行
    • 最佳实践,写一个shell脚本做为entrypoint
    COPY ./script/test.sh /usr/local/bin
    ENTRYPOINT ['test.sh']
相关文章
相关标签/搜索