13.DOCKER FILE

1.Dockfile概念

Dockfile是一个用于制作docker镜像的文件,有其特定的语法。

在一个文件夹中,有一个名字为Dockfile的文件,在这个文件夹路径下执行命令:

docker build  name:tag . 

就可以按照dockerfile构建一个镜像了。name是镜像的名称,tag是镜像的版本或者是标签号,不填默认的话是lastest。注意最后面有一个空格和点, 点表示当前路径,也可以使用dockerfile的绝对路径


2.dockerfile 命令分析

2.1 FROM (必填)

FROM 镜像:标签

第一个指令必须是FROM,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签


2.2 MAINTAINER (可以不写)

MAINTAINER

描述镜像的创建者的相关信息


2.3 RUN

RUN command1 command2

例如:

RUN yum install httpd


RUN构建镜像时运行的Shell命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。

一句RUN就是一层,也相当于一个版本。所以过多无意义的层,会影响性能,所以可以用&&连接2个命令, && 符号连接执行后,只会创建 1 层镜像。


2.4 CMD

CMD ["<可执行文件或命令>","","",...]


CMD 在docker run 时运行。

RUN 是在 docker build。

为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束

其作用是在启动容器的时候提供一个默认的命令项。

CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效


2.5 EXPOSE

EXPOSE 端口

声明Docker容器使用的端口号,在docker run -p的时候生效。


2.6 ENV

EVN

例子:

ENV JAVA_HOME /usr/local/jdk1.8.0_45

后续调用的使用方法,如 $JAVA_HOME

设置容器的环境变量,那么在后续的指令中,就可以使用这个环境变量。容器运行的时候这个变量也会保留。

2.7 ADD

ADD 宿主机的源文件路径 容器内的目标路径


复制本地文件或目录或远程文件(如URL文件),添加到指定的容器目录,容器目录不存在则会自动创建。

如果源是一个目录,只会复制目录下的子文件子目录,目录本身不会复制。

ADD命令会将复制的压缩文件自动解压(如tar文件),用于和copy区分


2.8 COPY

COPY 宿主机的源文件路径 容器内的目标路径


拷贝文件或目录到镜像中, 不支持自动下载和解压.其它功能和ADD相同。



2.9 ENTRYPOINT

ENTRYPOINT "command" "param1" "param2"

与CMD类似,唯一的区别是由ENTRYPOINT启动的程序不会被docker run执行时的参数覆盖

而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序


2.10 VOLUME

VOLUME ["path"]


在启动容器的时候,自动去挂载卷。一般不会在Dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷。

docker run -v更强大

volume不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器。


2.11 USER

USER 用户名 

用于指定执行后续命令的用户和用户组,只是起到切换用户的作用。(用户和用户组必须提前已经存在)


2.12 WORKDIR

WORKDIR path


为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录。(WORKDIR 指定的工作目录,必须是提前创建好的)

docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR  /home  WORKDIR /test 。最终的路径就是/home/test。

你可能感兴趣的:(13.DOCKER FILE)