Dockerfile学习文档_dockerfile文档


使用环境变量的方式



$varname
${varname}
${varname:-default value} # 设置一个默认值,如果varname未被设置,值为默认值
${varname:+default value} # 设置默认值;不管值存不存在都使用默认值


#### USER:设置启动容器的用户



使用用户名

USER testuser

使用用户的UID

USER UID


#### RUN:镜像构建时执行的命令



语法1,shell 形式

RUN command1 && command2

语法2,exec 形式

RUN [“executable”,“param1”,“[aram2]”]

示例

RUN echo 1 && echo 2

RUN echo 1 && echo 2
echo 3 && echo 4

RUN [“/bin/bash”,“-c”,“echo hello world”]



RUN 在下一次建构期间,会优先查找本地缓存,若不想使用缓存可以通过–no-cache解除
docker build --no-cache

RUN 指令指定的命令是否可以执行取决于 基础镜像

shell形式

默认使用/bin/sh -c 执行后面的command
可以使用 && 或 \ 连接多个命令

exec形式

exec形式被解析为JSON序列,这意味着必须使用双引号 “”
与 shell 形式不同,exec 形式不会调用shell解析。但exec形式可以运行在不包含shell命令的基础镜像中
例如:RUN [“echo”,“$HOME”] ;这样的指令 $HOME并不会被解析,必须RUN [“/bin/sh”,“-c”,“echo $HOME”]


#### EXPOSE:为容器打开指定的监听端口以实现与外部通信



EXPOSE /

EXPOSE 80
EXPOSE 80/http
EXPOSE 2379/tcp



:端口号
:协议类型,默认TCP协议,tcp/udp/http/https
并不会直接暴露出去,docker run时还需要-P指定才可以,这里更像是一个说明


#### VOLUME:实现挂载功能,将宿主机目录挂载到容器中



VOLUME [“/data”] # [“/data”]可以是一个JsonArray ,也可以是多个值

VOLUME /var/log
VOLUME /var/log /opt



三种写法都是正确的
VOLUME类似于docker run -v /host_data /container_data 。
一般不需要在Dockerfile中写明,且在Kubernetes场景几乎没用


#### CMD:为容器设置默认启动命令或参数



语法1,shell形式

CMD command param1 param2 …

语法2,exec形式

CMD [“executable”,“param1”,“param2”]

语法3,还是exec形式,不过仅设置参数

CMD [“param1”,“param2”]



CMD运行结束后容器将终止,CMD可以被docker run后面的命令覆盖
一个Dockerfile只有顺序向下的最后一个CMD生效

语法1,shell形式,默认/bin/sh -c

此时运行为shell的子进程,

  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值