💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 区别 * RUN:执行命令并创建新的image layer. * CMD:设置容器启动后默认执行的命令和参数. * ENTRYPOINT:设置容器启动时运行的命令. ## CMD * 容器启动时默认执行的命令 * 如果docker run指定了其他命令,CMD命令被忽略 * 如果定义了多个CMD,只有最后一个会执行. 如果Dockerfile使用CMD,并且在run image的时候,加入了其他参数,那么其会被 docker run 的命令行参数指定的指令所覆盖. ### 实践 dockerfile: ``` FROM centos ENV name docker CMD echo "hello $name" ``` build: ``` docker build -t lzj/centos-cmd . ``` 不带参数run: ``` docker run -it lzj/centos-cmd ``` 结果: ``` hello docker ``` 带参数run: ``` docker run -it d8e075c6605d /bin/echo "哈哈" ``` 结果: ``` 哈哈 ``` 从上面可以看出CMD的命令会被容器run时的参数替换掉. ## ENTRYPOINT * 让容器以应用程序或服务的形式运行. * 不会被忽略,一定会执行. 和CMD类似,但其不会被 docker run 的命令行参数指定的指令所覆盖. ### 实践 dockerfile: ``` FROM centos ENV name docker ENTRYPOINT echo "hello $name" ``` build: ``` docker build -t lzj/centos-entrypoint . ``` 不带参数run: ``` docker run -it lzj/centos-entrypoint ``` 带参数run: ``` docker run -it 6d58ec9e62bb /bin/echo "哈哈" ``` 结果: ``` hello docker //ENTRYPOINT指定的命令一定是执行了的 ```