Dockerfile CMD ENTRYPOINT 命令区别

区别

学习dockerfile可以参考你必须知道Dockerfile

RUN

命令执行命令并创建新的镜像层,通常用于安装软件包


CMD

命令设置容器启动后默认执行的命令及其参数

但CMD设置的命令能够被docker run命令后面的命令行参数替换


ENTRYPOINT

配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)

再具体聊一聊

FROM centos
MAINTAINER allocator
RUN yum install -y nginx
RUN echo 'hello world' > /usr/share/nginx/html/index.html
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx"]

可以这样理解

  • 如果没有ENTRYPOINTCMD 要写完整的内容命令[command,arg1,arg2] ,docker run 后面会覆盖掉 cmd

  • 如果有ENTRYPOINTCMD 可以只写 [arg1,arg2] ,那么ENTRYPOINT[command]

  • 还可以这样ENTRYPOINT[command,arg1] CMD 可以只写 [arg2]

# 启动镜像,arg3 会代替CMD的内容
docker run -it <image-id> arg3
# 如果我们run后面加了其他命令和参数,这个命令可能会被当成参数,执行command other-command arg3,可能会报错
docker run -it <image-id> other-command arg3

ENTRYPOINT的两种写法

# ENTRYPOINT的两种写法:

docker exec的形式
ENTRYPOINT [“executable”,”param1”,”param2"]
任何docker run设置的命令参数或者CMD指令的命令,都将作为ENTRYPOINT 指令的命令参数,追加到ENTRYPOINT指令之后。


shell的形式
ENTRYPOINT command param1 param2
这种格式禁止追加任何参数,即CMD指令或docker run后面的参数都将被忽略。采用shell格式,在容器中执行时,自动调用shell。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页