Dockerfile语法

2,034 阅读1分钟

官网文档 Docker Reference

常见语法如下:

  1. FROM
    制作/使用 base image
FROM centos
FROM ubuntu:14.04
  1. LABEL
    类似代码的注释
LABEL version="1.0"
LABEL maintainer="xiaopang@163.com"
  1. RUN 执行命令 因为每运行一次,都会生成一次layer,避免无用分层,合并多条命令成一行 反斜线\换行 &&合并成一行
RUM yum update && yum install -y vim \
    python-dev #反斜线换行
  1. WORKDIR 设定当前工作目录
    使用WORKDIR,不使用RUN cd
    尽量使用绝对目录
WORKDIR /test #如果没有回自动创建目录
WORKDIT demo
RUN $PWD #输出结果应为/test/demo
  1. AND and COPY 本地文件添加到Docker Image里面
    大部分情况,COPY优于ADD ADD相比COPY有解压缩的功能
ADD test.tar.gz / #添加到根目录并解压缩

添加远程文件/目录使用curl或wget 6. ENV 设置常量 增加可维护性

ENV MYSQL_VERSION 5.6 #设置常量
RUN apt-get install -y mysql-servier= "${MYSQL_VERSION}" \
    && rm -rf /var/lib/apt/lists/* #引用常量
  1. ENTRYPOINT
  • 设置容器启动时运行的命令,让容器以应用程序或者服务运行程序
    shell模式 bash中执行ENTRYPOINT echo hello $name
    exec模式 未在bash中执行ENTRYPOINT ["/bin/bash","-c","echo hello $name"]
  • 不会被忽略,一定会执行
  • 写一个shell脚本作为entrypoint
COPY docker-entrypoint.sh /usr/local/bin
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 27017
CMD ["mongod"]
  1. CMD
  • 设置容器启动后默认执行的命令和参数
  • 如果docker run指定了其他命令,CMD命令会被忽略
  • 如果定义了多个CMD,只有最后一个会执行
  1. VOLUME and EXPOSE
    未完待续