1. # Version: 0.0.1
  2. FROM app:tag
  3. RUN cmd1 & cmd2
  4. EXPOSE 80
  5. # CMD ["/bin/bash", "-l"]
  6. ENTRYPOINT ["/usr/sbin/nginx"]
  7. CMD ["-h"]
  8. # WORKDIR 的用法
  9. WORKDIR /opt/webapp/db
  10. RUN bundle install
  11. WORKDIR /opt/webapp
  12. ENTRYPOINT ["rackup"]
  13. ENV RVM_PATH /home/rvm/
  14. WORKDIR $TARGET_DIR
  15. # 默认 root
  16. USER jdxj:jdxj
  17. # 创建一个挂载点
  18. VOLUME ["/opt/project", "/data]
  19. ADD file /opt/file
  20. COPY conf.d/ /etc/apache2/
  21. LABEL version="1.0"
  22. STOPSIGNAL signal # 停止容器时给容器发送的系统信号
  23. ARG build # 用于定义构建时使用的变量
  24. ONBUILD ADD . /app/src

构建命令:

  1. $ 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 只能被继承一次