Dockerfile

  • Dockerfile文件
FROM alpine:3.11.3
# 环境变量
ENV path /test
# 当前工作目录
WORKDIR $path
# 构建镜像时执行pwd命令
RUN pwd
# 拷贝文件至image
COPY test.txt .
# 构建镜像时执行cat命令
RUN cat test.txt
# 运行容器时执行命令
ENTRYPOINT ["echo", "hello"]
# ENTRYPOINT默认参数
CMD ["world"]

Dockerfile中的指令是相互独立的,互不影响

  • docker build
    从一个Dockerfile和一个context中构建一个image;
    context:build命令指定目录的所有文件(递归,也可以是git仓库地址)
    build命令会将context指定的文件都发送给docker daemon,可以在context根目录下添加.dockerignore文件,忽略不需要的文件和目录
    Dockerfile文件默认位于context根目录下,也可以通过-f指定
Dockerfile指令
  • FROM
    拉取base image
  • RUN
    在构建image(docker build)时运行一条命令,可以有多个RUN
# 第一种格式:shell form 格式
RUN 
# 第二种格式:exec form 格式
RUN ["executable", "param1", "param2"]
  • CMD
    在运行镜像(docker run)时执行一条命令,Dockerfile中有且只有一个CMD生效:多个CMD只有最后一个生效
# 第一种格式:exec form 格式(推荐)
CMD ["executable","param1","param2"] 
# 第二种格式:作为ENTRYPOINT的default parameters
CMD ["param1","param2"]

当ENTRYPOINT不存在时,CMD可作为单独的命令存在。当ENTRYPOINT存在时,CMD会被识别为ENTRYPOINT的默认参数。
无论哪种情况,CMD指定的参数都会被docker run时指定的运行参数覆盖。

  • ENTRYPOINT
    在运行镜像(docker run)时执行一条命令,Dockerfile中只有最后一个ENTRYPOINT生效,生效规则同CMD
# 推荐使用exec form格式,可由CMD指定默认参数
ENTRYPOINT ["executable", "param1", "param2"]

docker run有运行参数时:
CMD被覆盖,所有docker run运行参数追加至ENTRYPOINT指令后。

  • ADD
    添加文件至image
# src:host文件/目录;dest:image文件/目录
ADD ... 
# 路径中含有空格
ADD ["",... ""]

src必须在context下

  • COPY
    拷贝文件至image,类似ADD,可以看做ADD子集;-- 推荐使用(替代ADD)

ADD额外功能:src支持URL;支持压缩包(gzip, bzip2 or xz)自动解压,但不支持URL下载的压缩包自动解压;

  • VOLUME
    创建挂载点
# JSON array
VOLUME ["/var/log/", "/var/db"]
# plain string
VOLUME /var/log /var/db

需要在docker run时,通过-v--mount指定 host directory

  • ENV
    设置环境变量
# 设置单个
ENV  
# 批量设置
ENV = ...

可通过docker inspect来查看ENV

  • WORKDIR
    指定当前工作目录
WORKDIR /path/to/workdir
  • EXPOSE
    容器在运行时监听的端口
# 默认TCP协议
EXPOSE 8080
# 指定UDP协议
EXPOSE 8080/udp

需要在docker run时,通过-p来指定与主机端口的映射

  • USER
    指定当前用户
# 指定当前用户为root
USER root

你可能感兴趣的:(Dockerfile)