Dockerfile构建镜像

  • 构建镜像命令 docker build -t 仓库名/镜像名:tag .

    FROM ubuntu:14.04
    MAINTAINER sunqi sunqi@xxx.com
    RUN apt-get update && apt-get install -y ruby ruby-dev
    RUN gem install sinatra

  • Dockerfile 四个部分

    • 基础镜像信息 FROM
    • 维护者信息 MAINTAINER
    • 镜像操作指令 RUN
    • 容器启动指令 CMD
指令说明
FROM指定所创建镜像的基础镜像
MAINTAINER指定维护者信息
RUN运行命令
CMD容器启动默认执行的命令
LABEL指定生成镜像的元数据标签信息
EXPOSE声明镜像内服务监听的端口
ENV指定环境变量
ADD复制指定src路径的内容到容器的dest路径下。如果src为tar文件,则自动解压到dest路镜下
COPY复制指定src路径的内容到镜像的dest路径下
ENTERPOINT指定镜像的默认入口
VOLUME创建镜像的数据卷挂载点
USER指定运行容器的用户名或UID
WORKDIR配置工作目录
ARG指定镜像内使用的参数
ONBUILD配置当前所创建的镜像作为其他镜像的基础镜像时,所执行创建操作指令
STOPSIGNAL容器退出信号值
HEALTHCHECK如何进行健康检查
SHELL指定使用shell的默认shell类型
  1. FROM

    • FROM是Dockerfile里的第一条而且只能是除了首行注释之外的第一条指令
    • 可以有多个FROM指令。来创建多个镜像
    • FROM后边是有效的镜像名称。如果该镜像没有在本地仓库,就会去远程pull,如果远程仓库也没有,就会报错build失败
    • 下面所有的系统可执行指令,在FROM的镜像中执行
  2. RUN

    • 格式
      • RUN (shell 模式)
      • RUN [“executable”, “param1”, “param2”] (exec模式)
    • 表示当前镜像构建时运行的命令,如果有确认输入的话,一定要在命令中添加-y参数
    • 如果命令比较长,那么可以在命令结尾使用\来换行
    • 生产中,推荐使用exec模式
    • shell模式/bin/bash -c command
    • exec模式 RUN["/bin/bash", "-c", "command"]
  3. EXPOSE

    • 设置Docker容器对外暴露的端口号,Docker为了安全,不会自动对外打开端口,如果需要外部提供访问,还需要启动容器时增加 -p-P参数对容器的端口进行分配
  4. CMD

    • 格式
      • CMD [“execuable”, “param1”, “param2”] (exec模式,推荐)
      • CMD command param1 param2 (shell模式)
      • CMD [“param1”, “param2”] 提供给ENTRYPOINT的默认参数
    • 解释
      • CMD制定容器启动时的默认执行的命令
      • 每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行
      • 如果你在启动容器的时候docker run 指定的运行命令,那么会覆盖CMD命令
      • CMD [ “/usr/sbin/nginx” , “-g”, “daemon off;”]
  5. ENTRYPOINT

    • 格式
      • ENTRYPOINT [“execuable”, “param1”, “param2”] (exec模式)
      • ENTRYPOINT command param1 param2 (shell 模式)
    • 解释
      • 和CMD类似都是配置容器启动后执行的命令,并且不会被docker run提供的参数覆盖
      • 每个Dockerfile只能有一个有效的ENTRYPOINT,当指定多个时,只有最后一个起效
      • 可以同时使用CMD和ENTRYPOINT
      • 想要在docker run 时覆盖,可以使用 docker run --entrypoint
      • 任何docker run 设置的命令参数或者CMD指令都将作为ENTRYPOINT指令的命令参数,追加到ENTRYPOINT指令之后
      • ENTRYPOINT ["/usr/sbin/nginx" , “-g”, “daemon off;”]
  6. ADD

    • 格式
      • ADD …
      • ADD ["", …, “”]
    • 解释
      • 将制定的src文件复制到容器文件系统中的dest
      • src指的是宿主机,dest指的是容器
      • 所有拷贝到容器中的文件和文件夹权限为0755,uid和gid为0
      • 如果文件是可识别的压缩格式,则docker会进行解压操作
      • 如果源路径是文件夹,且目标路径是以/结尾,则docker会把目标路径当作一个文件,如果目标路径不存在,则会自动创建目标路径
      • 如果源路径是个文件,且目标路径不是以/结尾,则docker会把目标路径当作一个文件,如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件
      • 如果目标文件存在,会用源文件覆盖,只是内容覆盖,文件名还保留目标文件名
      • 如果目标文件实际是个存在的目录,则会将源文件拷贝到该目录下。这种情况下,最好显示的以/结尾,避免混淆
  7. COPY

    • 格式
      • COPY …
      • COPY ["", … , “”]
    • 解释
      • COPY指令和ADD指令功能和使用方式类似,只是COPY指令不会进行自动解压工作
      • 单纯文件复制场景,推荐使用COPY
  8. VOLUME

    • 格式
      • VOLUME ["/data"]
    • 解释
      • VOLUME指令可以在镜像中创建挂载点,这样只要通过镜像创建的容器就都有了挂载点
      • 通过VOLUME指令创建的挂载点,无法指定主机上对应的目录,是自动生成的
      • VOLUME ["/var/lib/tomcat7/webapps"]
      • 创建数据卷容器,然后其他容器可以挂载数据卷,然后通过volumes-from参数可以共享挂载卷的数据
      • docker run -itd --name v-1 --volumes-from nginx3 nginx
      • docker run -itd --name v-2 --volumes-from nginx3 nginx
      • nginx3 位数据卷容器,然后v-1和v-2就会共享nginx3设置的挂载点内的文件
  9. ENV

    • 格式
      • ENV key value
      • ENV key=value ,… 可以一次设置多个环境变量
    • 解释
      • 设置环境变量,可以在RUN之前使用,RUN命令时调用,容器启动时这些环境变量都会被指定,容器内的应用程序可以读取到设置的环境变量
  10. WORKDIR

    • 格式
      • WORKDIR /path/to/workdir(shell 模式)
    • 解释
      • 切换目录,为后续的RUN,CMD,ETNTRYPOINT指令配置工作目录,相当于cd
      • 可以多次切换
      • 也可以使用 多个WORKDIR 命令,后续命令如果参数是相对路径,则会基于之前的命令指定的路径
  11. ONBUILD

    • 格式

      • ONBUILD [command]
    • 解释

      • 当一个镜像A被作为其他镜像的基础镜像是,这个触发器才会被执行

      • 新镜像B在构建的时候,会插入触发器中的指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zSK4lVAC-1614158556787)(/Users/sunqi/Library/Application Support/typora-user-images/image-20210120184813586.png)]

  • 入门Dockerfile

    FROM ubuntu
    RUN mkdir hello
    RUN mkdir world
    RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    RUN apt-get update
    RUN apt-get install nginx -y
    EXPOSE 80
    
    docker build -t mynginx:v1 .
    
  • 优化版Dockerfile

    FROM ubuntu
    RUN mkdir hello && mkdir world
    RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    RUN apt-get update && apt-get install nginx -y
    EXPOSE 80
    
    docker build -t mynginx:v2 .
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值