• 8.dockerfile之CMD指令


    一、CMD指令说明

    CMD的作用是作为执行container时候的默认行为(容器默认的启动命令)

    当运行container的时候声明了command,则不再用image中的CMD默认所定义的命令

    一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起作用

     
    CMD定义的三种方式:
    • CMD <cmd> 这个会当作/bin/sh -c "cmd"来执行
    • CMD ["executable","arg1",....]
    • CMD ["arg1","arg2"],这个时候CMD作为ENTRYPOINT的参数

    二、CMD指令案例


    通过docker run 创建并启动一个容器时,命令的最后可以指定容器启动后在容器内立即要执行的指令,如:docker run -i -t image /bin/bash,表示容器启动时立即在容器内打开一个shell伪终端。

    除了这种方式我们完全可以在dockerfile文件中通过CMD指令指定容器启动时要执行的命令。

    首先,编写一个简单的dockfile,以centos为基础镜像:

    #Base image
    FROM centos
    
    #MAINTAINER,this dockerfile creater
    MAINTAINER loose@docker.com
    
    #使用CMD指令
    CMD ["/bin/bash"]

    其次,我们根据该dockerfile构建一个镜像:

    接着,我们查看构建的镜像:

    最后,来体验下CMD的作用:

    1.上面dockerfile文件中最后一行CMD指令的参数是指定容器启动时要执行的命令,这里设置为bin/bash命令,当我们使用docker run -i -t 镜像 /bin/bash命令交互,是在新容器内指定一个伪终端或终端,最后会帮我们将这个新容器生成出来;这时由于我们在CMD指定了/bin/bash,所以当我们本该执行docker run -i -t 镜像 /bin/bash命令来进行交互时,可以省略 /bin/bash,即我们只需要键入docker run -i -t 镜像即可:

    再来查看帮我们生成的容器是否跟上方箭头指向的容器ID一致:

    通过对比,是一致的!

    2.就算dockerfile中有CMD指令,我们仍然可以在docker run命令中带上容器启动时执行的命令,这会覆盖dockerfile中的CMD指令指定的命令。

    例如:docker run -i -t images /bin/ps(这里我们指定查看进程命令,就是为了无法打开交互式shell界面,以此来测试dockerfile内的CMD命令是否被覆盖)

    3.在dockerfile中,可以有多条CMD命令,但多条CMD命令并不会都有效,以最后一条CMD命令为主

    4.CMD命令的参数格式,一般建议编写为字符串数组的方式,如:

    CMD ["echo","dockerfile.cmd"]

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/Json1208/p/8974157.html
Copyright © 2020-2023  润新知