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
- ADD [--chown=
- copy
可能包含通配符 * ? chown UID=0 GID =0 只复制目录中的内容而不包含目录自身 - COPY [--chown=
: ] ... - COPY [--chown=
: ] [" ",... " "] - multi-stage(多阶段构建)【docker >= 17.05】
- COPY [--chown=
expose有作用吗?
- 以指定端口监听 TCP 还是 UDP,如果不指定协议,则默认为 TCP。
- EXPOSE指令实际上并未发布端口 一种文档类型
- 真实发布在 docker run -p
- tcp/udp为同一个端口需要发布两次 docker run -p 80:80/tcp -p 80:80/udp
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/16182987.html