docker之Dockerfile

来源:互联网 发布:装修设计的软件 编辑:程序博客网 时间:2024/06/10 10:31

docker之Dockerfile

  • 一般分为4部分
    1. 基础镜像信息
    2. 维护者信息
    3. 镜像操作者信息
    4. 镜像操作指令和容器启动时执行的指令

指令

  • # 注释
  • FROM 或FROM :,第一条指令必须为FROM指令(同一Dockerfile中创建多个镜像,可以使用多个FROM指令)
  • MAINTAINER , 指定维护者信息
  • RUN 或 RUN [“executable”, “param1”, “param2”], param参数通过-c选项输入, 如
RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

每条RUN指令,将在当前镜像基础上执行指定命令,并提交新的镜像,命令较长是可以 \反斜杠换行

  • CMD 指定启动容器时的执行命令,支持三种格式

    1. CMD [“executable”, “param1”, “param2”], 使用exec执行,推荐方式
    2. CMD command param1 param2, 在/bin/sh中执行,提供给需要交互的应用
    3. CMD [“param1”, “param2”],提供给ENTRYPOINT的默认参数
      注意: 每个Dockerfile只能有一条CMD命令,如果有多条,只有最后一条被执行,如果用户启动容器时,指定了运行命令,则会覆盖CMD指定的命令
  • EXPOSE […] 例如:

EXPOSE 22 80 8443

作用: 告诉Docker服务器容器暴露的端口号,供互联系统使用,启动容器时需要使用-P或-p,将宿主机端口映射到容器端口

  • ENV , 指定一个环境变量(后续被RUN命令使用,并在容器运行时保持)
  • ADD , 复制指定src到容器中的dest, src可以是Dockerfile所在目录的相对路径(文件或目录),也可以是url,或者tar文件(自动解压为目录)

  • COPY , 复制本地主机的src(为dockerfile所在的目录的相对路径,文件或目录)到容器中的dest,dest不存在则自动创建,当使用本地目录为源目录时,推荐使用COPY

  • ENTRYPOINT [“executable”, “param1”, “param2”] 或 ENTRYPOINT command param1 param2(shell中执行), 配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖,每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效
  • VOLUME [“/data”], 创建一个可以从本地主机或其他容器挂载的挂载点,一般用于存放数据库和需要保存的数据等
  • UESR daemon, 指定运行容器的用户名或UID, 后续的RUN也会使用指定的用户(当服务不需要管理员权限时,可以指定运行用户)
  • WORKDIR /path/to/workdir, 为后续的RUN, CMD, ENTRYPOINT指令配置工作目录,可以使用多个,并且如果后续命令是相对路径,则会基于之前命令指定的路径
WORKDIR /aWORKDIR bWORKDIR cRUN pwd则最终输出 /a/b/c
  • ONBUILD [INSTRUCTION], 配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令,后面基于该镜像创建的新镜像执行FROM时,会执行基础镜像中的ONBUILD指令

运行

  • docker build [options] 路径, 建议放Dockerfile的目录为空目录, -t可以指定镜像的标签信息,比如指定Dockerfile所在路径为/tmp/docker_builder/,并且希望生成镜像标签为build_repo/first_image,则可以如下
docker build -t build_repo/first_image /tmp/docker_builder
原创粉丝点击