dockerfile详解
1. 基本结构:一半分为4部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时指令。
# spring cloud config 文件构建
FROM anapsix/alpine-java:8_server-jre_unlimited //基础镜像信息
MAINTAINER a503223267@gmail.com //维护者信息
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //镜像操作指令
RUN mkdir -p /cloud-config
WORKDIR /cloud-config
EXPOSE 10002
ADD ./target/cloud-config.jar /cloud-config
CMD java -Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom -jar cloud-config.jar //容器启动时指令
2.指令: 指令一般的格式为 INSTRUCTION arguments
- FROM [image] 或者指定某个镜像 FROM [image]:[tag]
- MAINTAINER <name> 指定维护者信息
- RUN [command] 或者 RUN["executable","param1","param2"] 在当前镜像基础上执行指令并提交成为新的镜像,当指令较长时
可以使用\换行 (executable 使用exec执行)
实例:
RUN mkdir -p /test
RUN ["/bin/bash", "-c", "echo hello"]
- CMD 指定容器启动时执行的指令,每个dockerfile只有一条。如果有多条,只有最后一条会被执行
CMD ["executable","param1","param2"] 使用exec执行
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数
备注:如果用户启动时指定了容器指令,就会覆盖CMD的指令。
- EXPOSE <port> [<port>......] 告诉docker服务端要暴露的端口号,在启动容器时需要通过-p 告诉docker主机需要转发到哪个端口
- ENV <key><value> 指定一个环境变量会被后面RUN指令使用,并在容器里面生效
- ADD <src><dest> 将地址为src的文件 复制到容器的<dest>地址中,src可以是一个相对路径也可以是一个tar文件,如果是tar文件
自动解压为目录。
- COPY <src><dest> 复制本地的src(dockerfile文件的相对路径)到容器的dest中
备注:ADD是增强版的COPY,ADD可以复制本地文件也可以使用远程的url
- ENTRYPOINT ["executable","param1","param2"]/command param1 param2 配置容器启动后执行的指令,并且不可被
docker run中指定的参数覆盖,每个dockerfile中只能有一个ENTRYPOINT,多个时只有最后一个生效。
- VOLUME ["/src"] 创建一个挂载点、通常用来存放需要保持的数据。例如数据库文件。
- USER deamon 指定运行容器时的用户名或者UID。
- WORKDIR /path 为RUN、CMD、ENTRYPOINT 指令配置工作目录,如果指定多个 最终的目录会是几个目录的拼接组成
例如 workdir /path workdir test 最终目录会是 /path/test
- ONBUILD [INSTRUCTION] 配置当此镜像被其他镜像作为基础镜像引入时,所执行的操作命令
例如
a
ONBUILD ADD ./test /test
b
FROM a
ADD ./test2 /test2
当b引用a做为基础镜像时,会先执行ADD ./test /test指令
3.创建镜像
- 使用docker build 创建镜像