完美-Dockerfile的编写-2

dockerfile的编写
只支持docker自己定义的一套指令,不支持自定义
根据dockerfile的内容顺序执行
RUN:
每一个RUN指令都会是在一个新的Container里面运行,并提交为一个image作为下一个RUN的Base images
一个Dockerfile中可以包含多个RUN,按定义顺序执行
RUN支持两种运行方式
RUN 这个会当做/bin/sh -c “cmd”运行
RUN [“executable”,”arg1”,…], Docke把它当成Json的序列来解析,因此必须用双引号,而且executable需要是完整路径
CMD :
运行容器时候,声明了command,就不再使用images中是CMD命令
只允许有一个CMD,否则只有最后一个生效。
CMD定义三种方式
CMD 这个会当做/bin/sh -c “cmd”来执行
CMD [“executable”,”arg1”,”arg2”]
CMD [“arg1”,”arg2”],这个时候CMD作为ENTRYPOINT的参数
add和copy的不同
add:上传上下文的文件或者目录,从外网上传文件,上传压缩包到容器时,顺便解压
copy:只能上传上下文的文件或者目录
ADD&COPY的源必须在context路径下
ENV :
用来设置环境变量,后续的RUN可以使用它所创建的环境变量,创建基于该镜像的Container的时候,会自动拥有设置的环境变量。(-e “key=value”)
WORKDIR:
指定当前工作目录。相当与cd
ENTRYPOINT:
ENTRYPOINT的作用是,把整个Container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建Container的方式。但是可以通过参数传递的方式影响到Container内部。
每个Dockerfile只能包含一个ENTRYPOINT,多个ENTRYPOINT只有最后一个能生效
当定义了ENTRYPOINT以后,CMD只能够作为参数进行传递
定义方式
ENTRYPOINT [“executable”,”arg1”,”arg2”],这种定义方式下,CMD可以通过Json序列的方式来定义ENTRYPOINT的参数,可以通过在运行Container的时候通过指定Command的方式传递参数
ENTRYPOINT ,当做/bin/sh -c “cmd”运行
USER:
指定的UID或者username,来决定运行RUN指令的用户
ONBUILD:
它后面跟的是其它指令,比如 RUN, ADD 等,这些指令在当前镜像构建时并不会被执行,只有以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。
VOLUME:
容器中挂载一个工作目录
VOLUME[“/var/data1”,”/var/data2”]
EXPOSE:
镜像要加入容器要开启的端口

样例:
FROM centos
MAITAINER wck
RUN yum -y install gcc
RUN useradd wck
RUN …
RUN …
CMD
ENV key value
WORKDIR
ENTRYPOINT
ADD
COPY
USER
EXPOSE
OUBUILD

ONBUILD的验证实例:
1 写一个dockerfile
FROM nginx
CMD /bin/bash
ONBUILD RUN echo “@@@w shi ni baba@@@”
构建:docker build -f /docker/dockerfile -t nibaba .

[root@wck dockerfile]# docker build  -f /docker/dockerfile/dockerfile -t nibaba .
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM nginx
 ---> ea335eea17ab
Step 2/3 : CMD /bin/bash
 ---> Running in e84216aea7a8
Removing intermediate container e84216aea7a8
 ---> a1006353edd5
Step 3/3 : ONBUILD RUN echo "@@@w shi ni baba@@@"
 ---> Running in e3eee74807b4
Removing intermediate container e3eee74807b4
 ---> addffdd5d8ff
Successfully built addffdd5d8ff
Successfully tagged nibaba:latest

2 再写一个dockerfile,用上一个镜像为base
FROM nibaba
CMD /bin/bash
构建观察:

[root@wck dockerfile]# docker build  -f /docker/dockerfile/dockerfile2 -t eri .
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM nibaba
# Executing 1 build trigger
 ---> Running in 25616cc2ab57
@@@w shi ni baba@@@
Removing intermediate container 25616cc2ab57
 ---> 56f918e1676b
Step 2/2 : CMD /bin/bash
 ---> Running in 8518a0ad7aad
Removing intermediate container 8518a0ad7aad
 ---> ffb3f8fdf84b
Successfully built ffb3f8fdf84b
Successfully tagged eri:latest

发现构建新镜像时候,触发了上一个镜像的ONBUILD。
完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OPS_akai

奥利给

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值