一、FROM
FROM 关键字一般用于开头,去指定我们要build的image是基于什么image的。
-
FROM scratch
不基于任何镜像去构建 -
FROM centos
基于官方的centos去构建
最佳实践:尽量使用官方的image作为base image
原因很简单:为了安全!!!
二、LABEL
定义了image的mata data
相当于注释,标注作者、image的用途等
三、RUN
经常用的一个关键字,基于base image之上去运行一些命令的时候需要用到这个关键字。
对于image来讲,每运行一次RUN,就会产生新的一层
最佳实践:为了美观,复杂的RUN请用反斜线换行,避免无用分层,合并多条命令成一行
四、WORKDIR
设定当前工作目录,相当于在linux中的cd,然后在当前目录下去做事情。
最佳实践:
1,用WORKDIR,不要用RUN cd
2.尽量使用绝对目录,不要使用相对目录
五、ADD COPY
将本地的文件添加到docker的image里面。
区别:ADD不仅可以添加、复制文件,还可以解压缩。
最佳实践:
1,大部分情况,COPY优于ADD
2.ADD除了COPY还有额外功能(解压)
3.添加远程文件/目录请使用curl或者wget
五、ENV
声明一个常量
最佳实践:
尽量使用ENV增加可维护性
六、比较RUN、CMD、ENTRYPOINT
RUN:执行命令并创建爱你新的image layer
CMD:设置容器启动后默认执行的命令和参数
ENTRYPOINT:设置容器启动时运行的命令
1.两种格式
Shell格式和Exec格式2.CMD
- 容器启动时默认执行的命令
- 如果docker run指定了其他的命令,CMD命令被忽略
- 如果定义了多个CMD,则只执行最后一个
3.ENTRYPOINT
- 让容器以应用程序或者服务的形式运行
- 不会被忽略,一定会执行
-
最佳实践:写一个shell脚本作为entrypoint
脚本
网友评论