上一节 给大家介绍了Dockerfile的使用,但是我们遗留了几个没讲,比如下面这三个:
- RUN: 执行命令并创建新的Image Layer
- CMD: 设置容器启动后默认执行的命令和参数
- ENTRYPOINT: 设置容器启动时运行的命令
RUN是比较好理解的,我们在前几节,在用Dockerfile生成Image的时候,用到了它,就是运行一些命令,其实CMD与ENTRYPOINT也是运行命令,那么它们有什么区别呢?那么现在我们就着重讲一下,它们的区别!!!!
我们现在来看 Dockerfile文件 - Dockerfile1
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name" - Dockerfile2
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/echo", "hello $name"]
我们先定义一个BaseImage centos,接着定义一个常量name Docker,小伙伴们可以建两个Dockerfile,测试一把,运行下面的命令
docker build -t apple/centos-entrypoint-exec .
docker run apple/centos-entrypoint-exec
结果都是一样一样的hello Docker
那么我们来看CMD是什么意思呢?
- 容器启动时默认执行的命令
- 如果docker run 指定了其他的命令,CMD命令被忽略
- 如果定义了多个CMD,只有最后一个执行
1,小伙伴们可以把上面的ENTRYPOINT换成CMD,其实也是可以的
2,如果我们执行Docker run -it [image] /bin/bash 这个时候就不会执行CMD命令了
那么ENTRYPOINT呢? - 让容器以应用程序或者服务的形式运行
- 不会被忽略, 一定会执行
- 最佳实践: 写一个shell脚本作为entrypoint
怎么样小伙伴们学会了嘛?我这里只是给大家简单的介绍一下,如果想深入的了解,请抓紧Google!!!!