目录
一、Dockerfile
1、概念
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
2、语法
#FROM 设置镜像使用的基础镜像
FROM centos
#MAINTAINER 维护者信息(设置镜像作者)
MAINTAINER aaa
#RUN 编译镜像时运行的脚本#包含两种模式:
1,shell
RUN rpm -ivh /usr/local/xxx.rpm
RUN tar -zxvf /usr/local/xxx.tar.gz
2,exec
RUN ["executable","param1","param2"] 语法
RUN ["/bin/bash","-c","ls"] 等价于/bin/bash -c ls
#CMD 设置容器的启动命令类似于 RUN 指令,⽤于运⾏程序,但⼆者运⾏的时间点不同
1、CMD 在docker run 启动镜像时运⾏
2、RUN 是在 docker build构建镜像时运⾏的
作⽤: 为启动的容器指定默认要运⾏的程序,程序运⾏结束,容器也就结束。 CMD 指令指定的程序可被 docker run 命令⾏参数中指定要运⾏的程序所覆盖.如: CMD ["/usr/sbin/nginx","-g","daemon off;"] 等同于: /usr/sbin/nginx -g daemon off 在容器中以交互⽅式运⾏nginx(⾮守护⽅式)
#LABEL 设置镜像的标签,以键值对的形式,语法格式如下:LABEL … ⽐如我们可以添加镜像的作者: LABEL image.authors="admin"
#EXPOSE 设置镜像暴露的端⼝ 可以是⼀个或者多个端⼝,也可以指定多个EXPOS EXPOSE [...]EXPOSE 9090
#ENV 设置容器的环境变量
ENV PATH /usr/local/xxx/bin:$PATH
#ADD 添加外部⽂件到镜像(编译镜像时复制文件到镜像中)ADD xxx.tar.gz /usr/local/
ADD xxx.rpm /usr/local/
ADD 指令和 COPY 的使⽤格式⼀致(同样需求下,官⽅推荐使⽤ COPY)。功能也类似,不同 之处如下:
ADD 的优点:在执⾏ 为 tar 压缩⽂件的话,压缩格式为 gzip, bzip2 以及 xz 的情况 下,会⾃动复制并解压到 。
ADD 的缺点:在不解压的前提下,⽆法复制 tar 压缩⽂件。会令镜像构建缓存失效,从⽽可能会 令镜像构建变得⽐较缓慢。具体是否使⽤,可以根据是否需要⾃动解压来决定
#COPY 复制指令,从上下⽂⽬录中复制⽂件或者⽬录到容器⾥指定路径#容器内的指定路径,该路径不⽤事先建好,路径不存在的话,会⾃动创建。
#源⽂件或者源⽬录,这⾥可以是通配符表达式
COPY home?.txt /mydir/
#ENTERYPOINT 类似于 CMD 指令,但其不会被 docker run 的命令⾏参数指定的指令所覆盖,⽽且这些命令⾏参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运⾏ docker run 时使⽤了 --entrypoint 选项,将覆盖 entrypoint指令指定的 程序 优点:在执⾏ docker run 的时候可以指定 ENTRYPOINT 运⾏所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后⼀个⽣效
#格式: ENTERYPOINT [“executable”,“param1”,“param2”](exec模式)
ENTERYPOINT command (shell模式)
可以搭配 CMD 命令使⽤:⼀般是变参才会使⽤ CMD ,这⾥的 CMD 等于是在给 ENTRYPOINT 传参
#ARG 构建参数,与 ENV 作⽤⼀⾄。不过作⽤域不⼀样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在 此环境变量作⽤: ARG:构建参数,只在构建过程中有效。可以通过 --build-arg 选项向 Docker 引擎传 递构建参数的值。
ENV:环境变量,在容器运⾏时有效。可以在构建过程中设置默认值,并在容器运⾏时 被使⽤。
#WORKDIR 指定⼯作⽬录。⽤ WORKDIR 指定的⼯作⽬录,会在