dockerdile cmd endpint expose copy add

cmd endpint区别
  • 很多知道在dockerfile中cmd 和 endpint 都可以执行 linux 命令
  • cmd 主要用途就是为正在执行的容器提供默认值 一个dockerfile 只能有一个cmd 【docker run 指定参数则覆盖cmd】
    • CMD ["executable","param1","param2"] (exec 形式 不会进行shell处理 环境变量不会被解析 )
    • CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    • CMD command param1 param2 (shell 形式 没有shell时候必须是json数组的形式双引号包裹)
  • endpint
    • ENTRYPOINT ["executable", "param1", "param2"] (exec 形式 , this is the preferred form)
    • ENTRYPOINT command param1 param2 (shell 形式 )
    • 可以防止cmd 和 run 参数 但是作为/bin/sh -c 子命令启动 该命令不传递信号
    • 可执行文件不在 pid =1 的进程不在接收信号 如docker stop 无效
    • 处理办法
      • 使用 ENTRYPOINT 的 exec 形式 即数组形式 ["executable", "param1", "param2"]
      • 使用cmd 或者run 传递参数
add copy 区别
  • Add 可能包含通配符 * ? chown UID=0 GID =0 只复制目录中的内容而不包含目录自身
    • ADD [--chown=:] ...
    • ADD [--chown=:] ["",... ""]
    • 是可识别压缩格式(identity、gzip、bzip2 或 xz)的本地tar 存档,则将其解压缩为目录
    • 远程文件 URL
  • copy 可能包含通配符 * ? chown UID=0 GID =0 只复制目录中的内容而不包含目录自身
    • COPY [--chown=:] ...
    • COPY [--chown=:] ["",... ""]
    • multi-stage(多阶段构建)【docker >= 17.05】
expose有作用吗?
  • 以指定端口监听 TCP 还是 UDP,如果不指定协议,则默认为 TCP。
  • EXPOSE指令实际上并未发布端口 一种文档类型
  • 真实发布在 docker run -p
  • tcp/udp为同一个端口需要发布两次 docker run -p 80:80/tcp -p 80:80/udp
posted @ 2022-04-23 17:21  vx_guanchaoguo0  阅读(31)  评论(0编辑  收藏  举报