Dockerfile RUN/CMD/ENTRYPOINT命令区别

Dockerfile RUN/CMD/ENTRYPOINT命令区别

shell和Exec格式

  • shel格式
    1
    2
    3
    RUN apt-get install -y vim
    CMD echo "hello $name"
    ENTRYPOINT echo "hello $name"
  • EXEC格式
    1
    2
    3
    RUN ["apt-get" , "install" , "-y" , "vim"]
    CMD ["/bin/echo", "hello $name"]
    ENTRYPOINT ["/bin/echo", "hello $name"]

RUN

  • 执行命令并创建的行images layer

CMD

  • 设置容器启动后默认执行的命令和参数
  • 容器启动时默认执行的命令
  • 如果docker run制定了其他命令,cmd命令被忽略
  • 如果定义了多个cmd,只有最后一个会执行
  • vi Dockerfile
    1
    2
    3
    FROM centos
    ENV name Docker
    CMD echo "hello $name"
  • 编译、执行
    1
    2
    docker@demo:/data/www/docker-cmd$ docker run hgliu/docker-cmd
    hello Docker

ENTRYPOINT

  • 设置容器启动时运行的命令
  • 以后台服务形式执行
  • vi Dockerfile
    1
    2
    3
    FROM centos
    ENV name Docker
    ENTRYPOINT echo "hello $name"
  • 编译/运行
    1
    2
    docker build -t hgliu/docker-cmd-entrypoint .
    docker run hgliu/docker-cmd-entrypoint
  • 输出结果:
    1
    2
    docker@demo:/data/www/docker-cmd$ docker run hgliu/docker-cmd-entrypoint
    hello Docker