# Version: 0.0.1FROM app:tagRUN cmd1 & cmd2EXPOSE 80# CMD ["/bin/bash", "-l"]ENTRYPOINT ["/usr/sbin/nginx"]CMD ["-h"]# WORKDIR 的用法WORKDIR /opt/webapp/dbRUN bundle installWORKDIR /opt/webappENTRYPOINT ["rackup"]ENV RVM_PATH /home/rvm/WORKDIR $TARGET_DIR# 默认 rootUSER jdxj:jdxj# 创建一个挂载点VOLUME ["/opt/project", "/data]ADD file /opt/fileCOPY conf.d/ /etc/apache2/LABEL version="1.0"STOPSIGNAL signal # 停止容器时给容器发送的系统信号ARG build # 用于定义构建时使用的变量ONBUILD ADD . /app/src
构建命令:
$ docker build -t="abc/def:v1" .
规则
- 指令必须大写
- 顺序执行指令
- 每个指令会创建新的镜像层
- 注释:
# - 第一个指令必须是 FROM
- RUN 后的命令使用
/bin/sh -c来执行- 可以使用 exec 格式的 RUN 指令
- EXPOSE 只是告诉 Docker, 应用会监听哪些端口
-P: 公开 EXPOSE 定义的端口
- 禁用构建缓存:
--no-cache - docker run 会覆盖 CMD
- 只能使用一个 CMD
- docker run 不会覆盖 ENTRYPOINT
- 不能对构建目录或者上下文之外的文件进行 ADD
- ADD 根据 des 是否带有
/来判断 src 是文件还是目录 - ADD 指令会导致其后的构建缓存失效
- COPY 不会 ADD 那样对归档文件进行解压
- COPY 的 des 位置必须是容器内部的绝对路径
- 推荐将所有 LABEL 数据都放到一行来减少镜像层
- ONBUILD 只能被继承一次
