2.7 run vs cmd vs entrypoint

首先明确一下概念:

run:执行命令并创建新的 image layer
cmd:设置容器启动后默认执行的命令和参数
entrypoint:设置容器启动时运行的命令

在介绍cmd和entrypoint之前,先了解一下shell和exec格式:

  • shell:
FROM centos
RUN apt-get install -y vim
ENV name docker
CMD echo "hello docker"
ENTRYPOINT echo "hello $name "
  • exec
FROM centos  
RUN ["apt-get", "install", "-y", "vim"]
ENV name docker
CMD ["/bin/echo", "hello docker"]
ENTRYPOINT ["/bin/bash","-c",  "echo hello $name "]
  • build一个docker
cd somefile
docker build -t cc/xxx .

CMD

容器启动时默认执行的命令

FROM centos
ENV name docker
CMD echo "hello $name"

情况一:如果docker run指定了其它命令,CMD命令被忽略

docker run -it [image] /bin/bsh

情况二:如果定义了多个CMD,只有最后一个执行

...
CMD echo "hello ab"
CMD echo "hello $name"  # 只执行这个

ENTRYPOINT

让容器以应用程序或者服务的形式运行
特点:不会被忽略,一定执行
最佳实践:写一个shell脚本作为entrypoint

COPY docker-entrypoint.sh /usr/local/bin
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongoDB"]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容