Dockerfile语法:RUN + CMD + ENTRYPOINT

    xiaoxiao2022-07-07  152

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

    一般会有以下两种书写格式: Shell格式:

    RUN apt-get install -y vim CMD echo "hello docker" ENTRYPOINT echo "hello docker"

    Exec格式:

    RUN ["apt-get","install","-y","vim"] CMD ["/bin/echo","hello docker"] ENTRYPOINT ["/bin/echo","hello docker"]

    两种格式在实际使用中,通常如下: Shell Dockerfile:

    FROM centos ENV name Docker ENTRYPOINT echo "hello $name"

    Exec Dockerfile:

    FROM centos ENV name Docker ENTRYPOINT ["/bin/echo","hello $name"]

    但是在实际使用时, ENTRYPOINT ["/bin/echo",“hello $name”] 这样的写法只会打印出 “hello $name”. 原因是它只是在执行echo命令,并不是执行shell。意思是说,我们不是在shell里执行echo,只是单纯的执行echo,所以不会替换变量。 想要改成可执行的shell,需要改写成以下形式:

    FROM centos ENV name Docker ENTRYPOINT ["/bin/bash","-c","echo hello $name"]
    CMD
    容器启动时默认执行的命令如果docker run指定了其他命令,CMD命令被忽略如果定义了多个CMD, 只有最后一个会执行

    所以,上面的命令可以改写成

    FROM centos ENV name Docker CMD echo "hello $name"
    ENTRYPOINT
    让容器以应用程序或者服务的形式运行不会被忽略,一定会执行
    最新回复(0)