Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。
1.基础镜像信息:FROM ubutu
格式为FROM或FROM: ,Dockerfile第一条必须为FROM指令,如果一个Dockerfile要指定多个镜像,则每个镜像使用一个FROM指令
2.维护者信息:MAINTAINER xiaolu xiaolu@qq.com
格式为MAINTAINER,指定维护者信息,可省略
3.镜像操作指令:RUN apt-get update && apt-get install -y vim
格式为RUN或RUN ["executable", "Param1", "Param2"]
格式RUN:在shell终端运行,即/bin/sh -C
格式RUN ["executable", "Param1", "Param2"]:使用exec执行
每条run指令在当前基础镜像执行,并且重新提交新镜像,当命令比较长时可用"/"换行
4.容器启动时执行指令:CMD /usr/sbin/nginx
每个容器只能执行一条CMD命令,多个CMD命令时,只会执行最后一条。
支持三种格式:
CMD ["executable", "Param1", "Param2"]:使用exec执行,推荐
CMD command param1 param2:使用/bin/sh上执行
CMD ["Param1", "Param2"]:提供给ENTRYPOINT做默认参数
5.暴露端口指令:EXPOSE,例如:EXPOSE 80 22 8080
格式为:EXPOSE port1 port2 port3
告诉Docker服务端容器暴露的端口号,供互联系统使用。
在启动Docker时,主机会自动分配一个端口号转发到指定的端口,可用通过-P/-p,指定主机具体端口号进行映射。
6.设置环境变量ENV
格式为ENV,指定一个环境变量,会被后续的RUN指令使用,并且会在容器运行过程中保持。
ENV YC_NAME yc_framework
ENV YC_VERSION 1.0
RUN wget -C http://www.kevinlu.cc/$YC_NAME/$YC_VERSION | mvn install /usr/src/$YC_NAME-$YC_VERSION
ENV PATH /usr/src/$YC_NAME-$YC_VERSION/bin:$PATH
7.复制指定的文件到容器中ADD
ADD hom* /usr/file
若/usr/file目录不存在,则自动创建
源目录可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;也可以是一个tar文件(自动解压为目录)
8.复制本地主机的文件到容器COPY
格式:COPY file directory
拷贝的文件为Dockerfile所在目录的相对路径
9.容器启动后执行指令:ENTRYPOINT
格式:ENTRYPOINT ["executable", "Param1", "Param2"]
ENTRYPOINT command param1 param2
配置容器启动后需要执行的指令,并且不会被docker run提供的参数覆盖
每个Dockerfile中只能有一个ENTRYPOINT,如果有多个,则只会执行最后一个
10.指定工作目录WORKDIR
格式:WORKDIR /a/b/c
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录
可以使用多个WORKDIR指令,后续的命令的参数为相对路径时,会基于之前命令指定的目录
例如:
WORKDIR /a
WORKDIR b
WORKDIR c
WORKDIR d
RUN pwd<打印出/a/b/c/d>