RUN、CMD、ENTRYPOINT的区别
RUN : 执行命令并创建新的Image Layer
CMD : 设置容器启动后默认执行的命令和参数
ENTRYPOINT : 设置容器启动时运行的命令
CMD
- 容器启动时默认执行的命令
- 如果定义了多个CMD,只有最后一个会执行
- 如果docker run指定了其他命令,CMD命令被忽略
例如:
FROM centos
ENV name Docker
CMD echo "hello $name"
执行 docker run [image] 输出的是hello Docker,执行Docker run -it [image] /bin/bash就不会输出hello Docker
ENTRYPOINT
- 让容器以应用程序或者服务的形式运行
- 不会被忽略,一定会执行
- 最佳实践:写一个shell脚本作为entrypoint
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 27017
CMD ["mongod"]