Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile
中的指令自动生成映像。docker build
命令用于从Dockerfile构建映像。
下面命令的 .
表示当前目录,这实际上是在指定上下文的目录是当前目录,docker build
命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。
命令语法格式:
docker bulid -t 仓库名/镜像名:tag .
Dockerfile的基本结构
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#
字符开头则被视为注释。
常用的指令
- FROM
指定基础镜像,必须为第一个命令;
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest> #tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
- RUN
建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。
RUN mkdir /codr
- CMD
不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例:
CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]
- ADD
将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压)。
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
- COPY
功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。
- WORKDIR
指定工作目录,类似于cd命令。通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD等命令都会在该目录下执行。在使用docker run
运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
WORKDIR /a #这时工作目录为/a
- ENTRYPOINT
配置容器,使其可执行化。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。
格式:
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
示例:
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
- MAINTAINER
标明该Dockerfile作者及联系方式,可忽略不写。
格式:
MAINTAINER <name>
示例:
MAINTAINER XXX XX
- ENV
设置系统环境变量。
格式:
ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat=fluffy
来源:CSDN
作者:龙王.*?
链接:https://blog.csdn.net/wzyaiwl/article/details/103768284