1:环境介绍
1.Dockerfile中所用的所有文件一定要和Dockerfile文件在同一级父目录下,可以为Dockerfile父目录的子目录
2.Dockerfile中相对路径默认都是Dockerfile所在的目录
3.Dockerfile中一定要惜字如金,能写到一行的指令,一定要写到一行,原因是分层构建,联合挂载这个特性。
Dockerfile中每一条指令被视为一层
4.Dockerfile中指明大写(约定俗成)
————————————————
版权声明:本文为CSDN博主「AtlanSI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AtlanSI/article/details/87892016
2:指令介绍
FROM
功能为指定基础镜像,并且必须是第一条指令。
MAINTAINER
指定作者
LABEL
功能是为镜像指定标签
ADD
一个复制命令,把文件复制到镜像中,自带解压功能
如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。
路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径,推荐写成绝对路径
可以是一个本地文件或者是一个本地压缩文件,还可以是一个url
如果把写成一个url,那么ADD就类似于wget命令
示例
注意事项
src为一个目录的时候,会自动把目录下的文件复制过去,目录本身不会复制
如果src为多个文件,dest一定要是一个目录
COPY
看这个名字就知道,又是一个复制命令
与ADD的区别
COPY的只能是本地文件,其他用法一致
EXPOSE
EXPOSE
功能为暴漏容器运行时的监听端口给外部
但是EXPOSE并不会使容器访问主机的端口
如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数
ENV
功能为设置环境变量
语法有两种
ENV <key><value>
ENV <key>=<value>...12
两者的区别就是第一种是一次设置一个,第二种是一次设置多个
RUN
功能为运行指定的命令,构建时运行的密令
RUN命令有两种格式
CMD
功能为容器启动时默认命令或参数
不要把RUN和CMD搞混了。RUN是构件容器时就运行的命令以及提交运行结果CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子
ENTRYPOINT
功能是:容器启动时运行得启动命令
如果从上到下看到这里的话,那么你应该对这两种语法很熟悉啦。
第二种就是写shell (shell执行)
第一种就是可执行文件加参数(EXEC调用,可在docker run启动时传递参数)
与CMD比较说明(这俩命令太像了,而且还可以配合使用):
相同点:
只能写一条,如果写了多条,那么只有最后一条生效
容器启动时才运行,运行时机相同
不同点:
ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数
————————————————
版权声明:本文为CSDN博主「AtlanSI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效
原文链接:https://blog.csdn.net/AtlanSI/article/details/87892016
VOLUME
可实现挂载功能,可以将宿主机目录挂载到容器中
说的这里大家都懂了,可用专用的文件存储当作Docker容器的数据存储部分
WORKDIR
设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。
ONBUILD
语法:
ONBUILD [INSTRUCTION]
1
这个命令只对当前镜像的子镜像生效。
比如当前镜像为A,在Dockerfile种添加:
ONBUILD RUN ls -al
1
这个 ls -al 命令不会在A镜像构建或启动的时候执行
此时有一个镜像B是基于A镜像构建的,那么这个ls -al 命令会在B镜像构建的时候被执行
————————————————
版权声明:本文为CSDN博主「AtlanSI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。