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"]

你可能感兴趣的:(2.7 run vs cmd vs entrypoint)