在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Dockerfile中run、cmd和entrypoint都能够用于执行命令,下面是三者的主要用途:
Shell格式和Exec格式运行命令我们可以用下面两种格式指定run、cmd和entrypoint要运行的命令:
cmd和entrypoint推荐使用exec格式,因为指令的可读性更强,更容易理解,而run则两种格式都可以。 Exec格式的坑dockerfile的内容如下: env name morris entrypoint ["echo", "$name"] 这种写法只会打印出$name,不会进行变量的替换,原因是它只是在执行echo命令,并不是执行shell。意思是说,我们不是在shell里执行echo,只是单纯的执行echo,所以不会替换变量。 想要改成可执行的shell,需要改写成以下形式 env name morris entrypoint ["/bin/bash", "-c", "echo $name"] run命令run指令通常用于安装应用和软件包。run在当前镜像的顶部执行命令,并通过创建新的镜像层。Dockerfile中常常包含多个run指令。下面是一个例子: run yum update && yum install -y \ bzr \ cvs \ git \ mercurial \ subversion yum update和yum install被放在一个run指令中执行,这样能够保证每次安装的是最新的包。如果yum install在单独的run中执行,则会使用yum update创建的镜像层,而这一层可能是很久以前缓存的。 cmd命令cmd指令允许用户指定容器的默认执行的命令。此命令会在容器启动且docker run没有指定其他命令时运行。下面是一个例子: cmd echo "Hello world" 运行容器
但当后面加上一个命令,比如
如果存在多个cmd命令,则只会执行最后一个cmd命令。 entrypoint命令entrypoint的exec格式用于设置容器启动时要执行的命令及其参数,同时可通过cmd命令或者命令行参数提供额外的参数。entrypoint中的参数始终会被使用,这是与cmd命令不同的一点。下面是一个例子: entrypoint ["echo", "Hello"] 当容器通过
而如果通过
再来看一个例子,Dockerfile为: entrypoint ["echo", "Hello"] cmd ["world"] 当容器通过
而如果通过
entrypoint中的参数始终会被使用,而cmd的额外参数可以在容器启动时动态替换掉。 同样的,如果存在多个entrypoint命令,则只会执行最后一个entrypoint命令。 总结
到此这篇关于docker中的run/cmd/entrypoint的区别详解的文章就介绍到这了,更多相关docker run/cmd/entrypoint内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论