dockerfile使用

Source

简介

Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建docker镜像的构建文件。
在这里插入图片描述
dockerfile执行build命令时,是从上倒下依次执行的,dockerfile的基本组成部分如下。

主要部分 代表命令
基础镜像信息 FROM
维护者信息 MAINTAINER
镜像操作指令 RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME、ENV等
容器启动时执行指令 CMD、ENTRYPOINT

dockerfile常用命令

保留字 作用
FROM 当前镜像是基于那个镜像的
MANTAINER 镜像维护者的姓名和邮箱
EXPORT 当前容器对外暴漏出的端口
WORKDIR 指定在创建容器后,终端默认登陆进来的工作目录
ENV 用来在构建镜像(docker build)过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY 类似于ADD,拷贝文件和目录到镜像中,将从镜像上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>
VOLUME 容器数据卷,用于数据保存和持久化工作
RUN 构建镜像时需要的运行命令,用于指定 docker build 过程中要运行的命令。
CMD 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD 在docker run 时运行,而非docker build;
ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数

FROM

功能为指定基础镜像,并且必须是第一条指令。

如果不以任何镜像为基础,那么写法为:FROM scratch。

同时意味着接下来所写的指令将作为镜像的第一层开始

语法:

FROM <image>
FROM <image>:<tag>
FROM <image>:<digest> 

三种写法,其中和 是可选项,如果没有选择,那么默认值为latest

MANTAINER

镜像维护者的姓名和邮箱(废弃)
语法:

MAINTAINER <name>

EXPORT

用于指定构建的镜像在运行为容器时对外暴露的端口
语法:

EXPORT 80/tcp 如果没有显式指定则默认暴露都是tcp

WORKDIR

用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录,如果WORKDIR不存在,即使它没有在任何后续Dockfile指令中使用,它也将被创建;
语法:

WORKDIR /path/to/workdir

WORKDIR /a
注意:WORKDIR指令可以在Dockerfile中多次使用,如果提供了相对路径,则该路径将于先前WORKDIR指令的路径行对

ENV

用来为构建镜像设置环境变量,这个值将出现在构建阶段中所有后续的环境中。
语法:

ENV <key> <value>
ENV <key>=<value>

ADD

用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映射文件系统中。
语法:

ADD hom* /mydir/ 通配符添加多个文件
ADD home?.txt /mydir/  通配符添加
ADD test.txt relativeDir/ 指定相对路径
ADD test.txt  /absoluteDir/  指定绝对路径

COPY

用来将context目录中指定文件复制到镜像的指定目录中
语法:

COPY src desc
COPY ["<src>",..."<dest>"]

VOLUME

可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法:

VOLUME ["/data"]

说明:

["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的

VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db

RUN

构建镜像时需要的运行命令,用于指定 docker build 过程中要运行的命令。
语法:

RUN <command>
RUN echo hello

RUN ["executable", "param1", "param2"]
RUN ["/bin/bash", "-c", "echo hello"]

CMD

指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD命令,但只有最后一个生效,
语法:

CMD ["executable", "param1", "param2"]
CMD ["param1", "param2"]
CMD command param1 param2

ENTRYPOINT

可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
语法为:

VOLUME ["/data"]

说明:

["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的


VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db

构建命令

在包含Dockerfile的文件夹下运行如下命令

docker build -t my:lastest .