dockerfile
Dockerfile
是一个Docker
镜像的描述文件。Dockerfile
其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
From:基础镜像
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制,基础镜像是必须指定的。而 FROM
就是指定基础镜像,因此一个 Dockerfile
中 FROM
是必备的指令,并且必须是第一条指令。
MAINTAINER:维护者信息
用于声明作者,并应该放在FROM的后面.
COPY :文件复制
将从构建上下文目录中 <源路径> 的文件/目录 复制到新的一层的镜像内的 <目标路径> 位置。<源路径> 可以是多个,甚至可以是通配符(COPY hom?.txt /mydir/
) <目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR
指令来指定)使用copy
命令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。在 COPY
和 ADD
指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY
指令,仅在需要自动解压缩的场合使用 ADD
。
RUN :需要执行的命令
指令是用来执行命令行命令的。
WORKDIR :当前工作目录
使用WORKDIR
指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR
会帮你建立目录
VOLUME:挂载主机目录
容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume
)中,为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile
中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。
LABEL:指定标签
为镜像指定标签。LABEL
会继承基础镜像种的LABEL
,如遇到key
相同,则值覆盖。
ENV:环境变量
设置环境变量。无论是后面的其它指令,如 RUN
,还是运行时的应用,都可以直接使用这里定义的环境变量。
CMD:容器启动后执行
Docker
不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD
指令就是用于指定默认的容器主进程的启动命令的。shell 格式:CMD<命令> ,exec 格式:CMD ["可执行文件","参数1", "参数2"...]
它主要作用是默认的容器启动执行命令
ENTRYPOINT:容器入口,替代CMD
Entrypoint
用于指定容器镜像的入口程序,或者说根应用
cmd
是默认命令。如果docker run
镜像名 xxx, 则会用xxx覆盖镜像中默认的cmd
参数, 如果没有xxx,则使用镜像中默认的cmd
作为参数传入
dockerfile示例:
#指定基础镜像
FROM lwieske/java-8:latest
#标明维护人信息
MAINTAINER twilightGB
#测试一下网络环境
RUN ping -c 1 www.baidu.com
#数据挂载位置
VOLUME /tmp
#对外暴露端口
EXPOSE 80 9099
#复制文件
ADD warn-0.0.1-SNAPSHOT.jar app.jar
#指定容器镜像的入口程序 镜像启动时启动
ENTRYPOINT ["java","-jar","/app.jar"]
网友评论