CMD与ENTRYPOINT的异同点
这俩命令非常像,而且还可以配合使用。
相同点:
只能写一条,如果写了多条,那么只有最后一条生效。
容器启动时才运行,运行时机相同。
不同点:
ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖。
如果我们在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数。如下所示:
FROM ubuntu
ENTRYPOINT ["rm", "docker2"]
CMD ["-rf"]
它真正执行的命令将会是:rm docker2 -rf。
如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效。如下所示:
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ls -al
那么将执行ls -al,top -b不会执行。
ADD 和 COPY 的异同点
COPY
COPY 是一个相对简单的指令,只负责将文件或目录从构建上下文(通常是 Dockerfile 所在的目录)复制到镜像中的指定路径。
基本用法:
COPY <源路径> <目标路径>
示例
COPY ./src /app/src
ADD
ADD 是一个功能更强的指令,除了执行与 COPY 相同的基本文件复制功能外,还具有以下额外功能:
解压归档文件:如果源路径是一个压缩文件(例如 .tar, .tar.gz, .zip 等),ADD 会自动解压它到目标路径。
从 URL 下载文件:ADD 可以接受一个 URL 作为源路径,从互联网上下载文件到镜像中。