Django + Django Rest Framework 实践

Dockerfile 里的 COPY ADD RUN CMD E

2020-03-11  本文已影响0人  思考的虫子

总体来说, COPY,ADD,RUN 都是增加镜像层(不一定会,要看缓存情况)。

CMD 和ENTRYPOINT 用于配制容器为像一个执行文件

COPY & ADD

COPY . /src

新建一个镜像层,把文件拷贝进去
如果这条命令已经缓存了,Docker 会继续查找同样基于上一层镜像的执行了 COPY . /src 命令的镜像。
还有 COPY 和 ADD 还会检查复制的文件 Checksum 值,如果文件发生了改变也会设置混存无效。

在执行 Dockerfile 构建镜像的过程中一旦某一行命令出现缓存无效,之后的都不使用缓存 所以尽可能将发生改变的命令放在 Dockerfile 文件下面

ADD <url> <dest>

ADD 可以将 Host 以外的文件,或者 tar 压缩包(解压后)当到 容器内。
如果只是拷贝目录,用 COPY

RUN,CMD 和 ENTRYPOINT

设置容器启动默认执行到动作,或者参数。

RUN ["apt-get", "install", "python3"]
CMD ["/bin/echo", "Hello world"]
ENTRYPOINT ["/bin/echo", "Hello world"]

RUN

创建一个镜像层

shell 模式顾名思义就是在 shell 里执行,exec 模式就是可执行文件绝对路径加参数。

区别于 CMD 和 ENTRYPOINT RUN命令的作用是增加一个景象层

RUN apt-get update && apt-get install -y \
  bzr \
  cvs \
  git \
  mercurial \
  subversion

把 update 写在一个RUN里是为了防止命中之前的 RUN apt-get update 缓存,那就不会创建一个新的镜像层,也就等于没有执行更新动作了。

RUN 运行方式

CMD

第一点很好理解,docker run -it <image> 会执行 Dockerfile 里面的 CMD,

如果给出了command 如 docker run -it <image> <command> Dockerfile 里的CMD命令就会被忽略。

CMD 有三种模式:

CMD ["executable","param1","param2"] (exec form, preferred)
CMD ["param1","param2"] (sets additional default parameters for ENTRYPOINT in exec form)
CMD command param1 param2 (shell form)

ENTRYPOINT

ENTRYPOINT 用来将容器变得像一个可执行文件

ENTRYPOINT 两种运行方式

上一篇下一篇

猜你喜欢

热点阅读