Dockerfile 是一个用来构建镜像的文件,文本内容包含了一条条构建镜像所需的指令和说明。举例如下
1.FROM
FROM:定制的镜像都是基于 FROM 的镜像,这里的 orajdk:8 就是定制需要的基础镜像。后续的操作都是基于 orajdk。
2.RUN
RUN 用于执行后面跟着的命令行命令。格式为: RUN [“可执行文件”, “参数1”, “参数2”]
截图中两个RUN命令也可以合为一个:
RUN yum install traceroute -y \
&& yum install net-tools -y
以\表示命令未结束,以 && 符号表示&&表示当前一条命令执行成功时,执行后一条命令,这样执行后,只会创建 1 层镜像。
3.COPY
COPY 复制指令,从目录中复制文件或者目录到容器里指定路径
4.ADD
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
5.CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。
如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
6.ENV
ENV 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
7.EXPOSE
仅仅只是声明端口。
8.ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
9.WORKDIR
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
10. 生成镜像
docker build -t filetransfer:1.0 .
最后的 . 代表本次执行的上下文路径。上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。所以本目录下不要存放无关的文件。
Dockerfile和Docker-compose
镜像:dockerfile一般用于构建单个镜像使用;
docker-compose是可以集成多个镜像和多个dockerfile
运行:Dockerfile想要运行使用docker build先构建镜像,后运行docker run容器才能创建并运行起来;
Docker-compose通过docker-compse up -d即可构建镜像并运行