Docker命令CMD ENTRYPOINT

  • CMD RUN ENTRYPOINT均有两种方式指定命令,即Shell,Exec
CMD
  • CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式
  • shell : CMD <命令>
    # Dockerfile  
    CMD echo "hello docker"
    
     # 运行镜像输出
    hello docker
     # 当有多个CMD命令 仅运行最后一个
          # Dockerfile  
          CMD echo "hello docker one"
          CMD echo "hello docker two"
    运行镜像 仅会输出第二个 hello docker two
      ```
    > 命令在底层实际执行过程中调用 `/bin/sh -c `   即 `/bin/sh -c echo "hello docker"`
    
  • exec: CMD ["可执行文件", "参数1", "参数2"...]
     # Dockerfile  
     ENV name docker 
     ENTRYPOINT ["/bin/echo", "Hello, $name"]
     # 输出 Hello, $name
     !!! 没有输出变量 , 因为指令执行时,会直接调用 
     ,不会被 shell 解析 ,echo便不能解析变量
     ############################
     ENV name docker 
     ENTRYPOINT ["/bin/sh"," -c ", "echo Hello, $name"]
     # hello docker
    
ENTRYPOIN
  • Exec 格式:ENTRYPOINT ["executable", "param1", "param2"] 这是 ENTRYPOINT 的推荐格式
    # Dockerfile  
    ENTRYPOINT ["/bin/echo", "Hello"]  
    CMD ["world"]
    #  docker run -it [image] 运行后输出 
    hello world
    # docker run -it [image] "命令行" 运行后输出
    hello 命令行
    

    ENTRYPOINT 的 Exec 格式用于设置要执行的命令及其参数,同时可通过 CMD 提供额外的参数。
    ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。

  • Shell:ENTRYPOINT comman
     #  Dockerfile
     ENTRYPOINT echo "ENTRYPOINT  shell"
     运行 镜像输出
     ENTRYPOINT  shell
     #################
     [root@localhost ~]# docker run centos:v6 "cmd"
     ENTRYPOINT  shell
    

    ENTRYPOINT 的 Shell 格式会忽略任何 CMD 或 docker run 提供的参数

你可能感兴趣的:(Docker命令CMD ENTRYPOINT)