Dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

先看一个例子

登录hub.docker.com,搜索centos,找到centos7.9

具体网址:https://github.com/CentOS/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

上面红色大写字母就是dockerfile的指令,后面跟随相对应的参数,当docker根据dockerfile构建镜像的时候,会逐行执行这些指令,每条指令都会创建一个新的镜像层,最后生成我们想要的镜像。

注:scratch是初始镜像,可理解为c#中的基类。

构建命令

docker build -f ./dockerfile -t myImageName .

-f dockerfile文件的路径,如果是在当前目录下,可省略

-t 要生成的镜像的名字,可跟 :版本号,自定义镜像版本

. 上下文路径,在构建镜像时可能要用到本机文件,会将路径下的所有内容打包。如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

Dockerfile常用指令

FROM

定制的镜像都是基于 FROM 的镜像,例如 FROM centos,若本地没有这个镜像会自动下载该镜像到本地。

RUN

在docker build时执行的命令,有两种格式:

①shell格式,等同在shell终端操作的命令

RUN yum install vim -y

②exec格式

RUN ["yum","install","vim","-y"]

MAINTAINER

镜像维护者的姓名和邮箱地址

EXPOSE

当前容器对外暴露的端口号

WORKDIR

进入容器后所在的目录位置,如 WORKDIR /usr/local

ENV

在构建镜像过程中设置环境变量,

格式ENV <key> <value>或ENV <key1>=<value> <key2>=<value>   如 ENV version 1.0

使用就是 $version

COPY

从上下文目录中复制文件或者目录到容器指定路径

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

COPY hom* /mydir  代表将上下文目录下的hom*文件复制到容器中的/mydir目录下

ADD

与COPY类似,但会自动解压tar文件以及处理URL

VOLUME

容器数据卷,格式 VOLUME ["路径1","路径2","路径3"]

CMD

在docker run时运行的命令,并且仅最后一个生效,格式:

CMD <shell 命令>

CMD ["可自行的命令或文件","参数1","参数2"...]

ENTRYPOINT

与CMD类似,但可以追加参数,两种方式:

ENTRYPOINT yum install vim

①在运行容器时后面添加命令参数

docker run -it mycentos -y

②在dockerfile中追加参数

ENTRYPOINT yum install vim #定参

CMD ["-y"] #变参

ONBUILD

延迟构建的命令,即在本次构建的镜像过程中不会执行,当有其他dockerfile继承自该镜像时,会触发ONBUILD后面的命令。

 

posted @ 2021-04-11 20:36  盗哥泡茶去了  阅读(73)  评论(0编辑  收藏  举报