Dockerfile基本介绍及常用指令

Dockerfile基本介绍

Dockerfile是一个普通的文本文件,里面包含了许多可以在命令行接口上执行的用来构建镜像的相关指令,通过docker build指令就可以读取Dockerfile文件中的指令并执行自动化镜像构建。

一般情况下,Dockerfile文件可分为四个部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时的执行指令。

Dockerfile文件由多条命令语句组成,每条语句都代表一个指令,以“#”开头的指令表示注释,当一条指令过长时,可以用反斜杠“\”进行指令换行。

##  Dockerfile文件格式

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
 
# 1、第一行必须定义基础镜像信息
FROM ubuntu
 
# 2、定义该镜像的维护者信息
MAINTAINER docker_user [email protected]
 
# 3、一些镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" \ 
>> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
 
# 4、容器启动执行指令
CMD /usr/sbin/nginx

Dockerfile常用指令

1.FROM

FROM指令用于初始化一个新的镜像构建阶段,同时为之后的指令设置一个基础镜像。语法格式如下:

FROM <image>

FROM <image>:<tag>

具体示例如下:

FROM ubuntu

FROM ubuntu:16.04

2.MAINTAINER

MAINTAINER指令用于指定当前构建的镜像维护者信息,该指令没有具体的格式要求,通常建议使用用户名和邮箱进行标识。具体示例如下:

MAINTAINER "shitou"<[email protected]>

3.RUN

RUN指令用于执行指定的脚本命令,有两种格式。语法格式如下:

RUN <common>

RUN ["executable", "param1", "param2"]

其中每条RUN指令将在当前镜像基础上执行指定命令并提交为新的镜像。如果要执行多条RUN指令,通常会将多条RUN指令合成一条,并使用斜杠“\” 来换行,这样将减少所构建的镜像的体积。

4.CMD

CMD指令用于指定启动容器时执行的命令,该指令有三种格式。语法格式如下:

CMD ["executable", "param1", "param2"]   #使用exec执行,也是推荐方式;

CMD command param1 param2   #在/bin/sh中执行,提供给需要交互的应用;

CMD ["param1", "param2"]   #提供给ENTRYPOINT的默认参数;

注意:在使用CMD指令时,每个Dockerfile只能有一条CMD指令,如果有多条CMD指令,则只有最后一条生效。如果用户启动容器时指定了运行的指令,则会覆盖掉CMD指定的指令。

5.EXPOSE

EXPOSE指令用于声明容器内部暴露的端口号,供容器访问连接使用。语法格式如下:

EXPOSE <port> [<port>...]

6.ENV

ENV指令用于为下文设定一个环境变量,该变量值在后续指令或内联文件中都可以使用,ENV指令有两种语法格式。语法格式如下:

ENV <key> <value>

ENV ,key>=<value> <key>=<value>...

7.ADD

ADD指令用于复制指定的src资源文件到容器中的dest目录下,复制的资源可以是文件、目录及远程URLs资源。语法格式如下:

ADD <src>... <dest>

在使用ADD指令时,复制的src资源文件必须是当前上下文目录或其子目录,而复制的内容实际上是该目录下的所有内容,其中包括文件系统元数据,而目录本身不会被复制。当dest目录不存在时,会在复制文件时自动创建。需注意的是,当使用ADD指令复制的文件是一个压缩包时,ADD指令会在复制好该文件后,自动进行解压。

在使用ADD指令时,复制的src资源文件路径允许使用通配符,而dest目标目录可以使用绝对路径,也可以使用预先用WORKDIR指令定义的相对路径。

8.COPY

COPY指令的作用与ADD指令类似,都是复制指定的src资源文件到容器中的dest目录下。区别在于,COPY指令不能复制远程URL路径文件,也不能解压文件,而ADD指令则可以。语法格式如下:

COPY <src>... <dest>

9.ENTRYPOINT

ENTRYPOINT指令是配置容器启动后执行的命令,每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT指令时,只有最后一个生效,该指令有两种语法格式。语法格式如下:

ENTRYPOINT ["executable", "param1", "param2"]   #exec格式,推荐的

ENTRYPOINT command param1 param2   #shell格式

10.WORKDIR

WORKDIR指令用于为后续的指令(如RUN,CMD,ENTRYPOINT,COPY,ADD)指定工作目录,在同一个Dockerfile文件中可以多次使用WORKDIR指令。语法格式如下:

WORKDIR /path/to/workdir

 

猜你喜欢

转载自blog.csdn.net/LIUHONGLIAN915/article/details/88345517