zoukankan      html  css  js  c++  java
  • dockerfile 中ENTRYPOINT和CMD和区别,ADD和COPY的区别

    ENTRYPOINT和CMD

    Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。

    Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。

    1、支持格式

    ENTRYPOINT的两种格式

    The exec form:

    ENTRYPOINT ["executable", "param1", "param2"]
    The shell form:

    ENTRYPOINT command param1 param2 命令行模式相当于: ["/bin/sh", "-c", "command", "param1", "param2"]

    当shell模式时,CMD和docker run后面的指令传不进来。

    CMD的三种格式

    CMD ["executable","param1","param2"] (exec form, this is the preferred form)
    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    CMD command param1 param2 (shell form) 命令行模式相当于:["/bin/sh", "-c", "command", "param1", "param2"]

    2、覆盖方式不同

    docker run后面的指令会覆盖掉CMD。

    docker run时使用参数--entrypoint覆盖掉ENTRYPOINT,如docker run --entrypoint /bin/bash

    3、当同时存在ENTRYPOINT和CMD时

    1、当存在ENTRYPOINT时且为shell格式时,CMD和docker run后面的命令无效。

    2、当存在ENTRYPOINT时且为exec格式时,CMD或docker run 后面的指令作为ENTRYPOINT的参数使用

    docker run后面的指令相当于CMD exec格式。

    当CMD为exec格式时:

    ENTRYPOINT ["echo"]

    +

    CMD ["echo", "hello"]

    = echo echo hello

    命令行打印:echo hello

    CMD为shell格式时:

    ENTRYPOINT ["echo"]

     + 

    CMD echo hello   =  ["/bin/sh", "-c", "echo", "hello"]

    = echo /bin/sh -c echo hello

    命令行打印:

    /bin/sh -c echo hello

    ADD和COPY

    ADD和COPY都是从build context 复制文件或目录到镜像,不同的是,如果复制的是压缩包时,ADD会自动解压。

  • 相关阅读:
    利用pip安装Django
    flask_14:supervisor管理uwsgi+nginx
    virtualenv 虚拟环境安装
    Linux 新建/删除 文件/文件夹的命令
    flask_13_1:使用 supervisor 管理进程
    flask_13:使用 supervisor 管理进程
    Linux sudo命令
    flask_12:API服务器架设笔记(阿里云服务器 + flask + nginx + uwsig)
    flask_11:uWISG简介及配置介绍
    flask_10:Nginx和uWSGI服务器之间是如何通信的?
  • 原文地址:https://www.cnblogs.com/bara/p/14184193.html
Copyright © 2011-2022 走看看