Dockerfile文件学习(一)
Dockerfile 文件学习(一)
- 创建镜像两种方式的比较(其实是三种,第三种就不说了,直接从仓库拉):
- 第一种docker commit提交镜像
- 第二种Dockerfile创建镜像
- 这两种最大的区别是:第一种使用docker commit生成镜像,其他人只能通过Registry或者是导入导出的方式来传送镜像,这样不太方便,而且其他人很难确定镜像里有什么,也无法构建一个一模一样的镜像;而第二种可以通过一个简单的文本文件把整个镜像概括进去,其他人只需要拿到Dockerfile就可以创建一个一模一样的镜像。
- Dockerfile基础
- linux命令行基础
- 命名规则:一般不建议写别的名字,如果有多个可以写为Dockerfile.1,Docker.2等。最后只需要用-f去指定即可。
- Dockerfile的书写规则
- Dockerfile的结构如下:
//注释
//一般来说结构如:'指令参数',虽然官方说,支持小写,但是最好选择大写。
Dockerfile,
INSTRUCTION arguments;
- Dockerfile 书写思想:
- 首先是自动化:Dockerfile构建过程是无交互的,因此需要保证指令集的能够持续的进行下去,并且要注意指令能否自动执行,遇到交互点是否可以自动应答。在安装时不要执行软件更新操作,会导致版本不要兼容的问题。
- 顺序:Dockerfile的指令是从上到下的顺序执行,一定要注意指令的位置,每一行指令会生成新的镜像。当Dockerfile失败的时候,即使你调整出错的前面部分,再次执行的时候也会是从错误点开始执行。
- 清理:很多人在写Dockerfile的时候,因为每一行都会生成新的镜像层,导致会有很多临时文件。因此会在Dockerfile最后写上清理系统命令。
- 易读:有时候,一行指令很长,但是不建议写到底,用'\'符号来连接。还可以用"\&&"
5.Dockerfile指令
(1)FROM(指定基础镜像):FROM指令的作用是指定这个基础的镜像是哪一个,也就是那个镜像作为基础镜像。FROM指令必须是Dockerfile第一句有效指令。
FROM <imageName:tag>
(2)MAINTAINER(设置维护者信息):这条指令是维护者信息,方便他人寻找作者。
MAINTAINER Name<Email>
(3)RUN(执行构建):这条指令用来指在Docker的编译环境中运行指令命令。RUN会在shell或者是exec中运行。
Shell格式如下:
RUN echo helloworld
RUN命令会在镜像的顶层执行任何命令
Exec格式:
RUN ["程序名","参数1","参数2"]
Exec的方式可以免除运行/bin/bash的消耗,这种格式使用JSON格式将程序名与所需要参数组成一个字符串组,如果参数中引号等特殊的字符,需要进行转义。这种方式不会触发shell,所以$HOME是无法使用的,但是他可以在没有bash的镜像中执行,而且可以避免错误的解析命令字符串。
(4)ENV(设置镜像环境变量:ENV指令用来指定执行docker run 命令运行镜像时,自动设置的环境变量,这个环境变量可以在后续任何RUN指令中使用使用,并且在容器运行时保持,而且可以通过docker run命令的-e参数来修改环境变量。
ENV使用方法: ENV <key> <value>
使用ENV指令类似于Linux下的export命令,用户可以在载后续的Dockerfile中使用这个变量。
(5)COPY(复制命令):复制文件
COPY命令指令用来将文本将本地的文件或者是文件夹复制到镜像指定路径下。
格式如下:
COPY /local/data/file /images/path/file