Dockerfile 简介 基础语法讲解

Dockerfile 简介

Dockfile 是一种被 Docker 程序解释的脚本,Dockerfile 由一条一条的指令组成,每条指令对应 Linux 下面的一条命令。Docker 程序将这些 Dockerfile 指令翻译真正的 Linux 命令。Dockerfile 有自己书写格式和支持的命令,Docker 程序解决这些命令间的依赖关系,类似于 Makefile。Docker 程序将读取 Dockerfile,根据指令生成定制的 image

Dockerfile 基础语法讲解

1、FROM(指定基础 image)
构建指令,必须指定,也可以说是整个 dockerfile 文件中最重要的,后续的指令都依赖于该指令指定的 image。FROM 指令指定的基础 image 可以是官方远程仓库中的,也可以位于本地仓库

example:
    FROM centos:7.2
    FROM centos

2、MAINTAINER(用来指定镜像创建者信息)
构建指令,用于声明作者,一般位于 FROM 之后

example:
    MAINTAINER  XXXXX

3、RUN(安装软件用)
构建指令,RUN 可以运行任何被基础 image 支持的命令。如基础 image 选择了Centos,那么软件管理部分只能使用 Centos 的包管理命令

example:    
    RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz 
    RUN ["/bin/bash", "-c", "echo hello"]

4、CMD(设置container启动时执行的操作)
设置指令,用于 container 启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。该指令只能在文件中存在一次,如果有多个,则只执行最后一条

example:
    CMD echo “Hello, World!”  

5、ENTRYPOINT(设置container启动时执行的操作)
设置指令,指定容器启动时执行的命令,可以多次设置,但是只有最后一个有效。
    
example:
    ENTRYPOINT ls -l 
    
#该指令的使用分为两种情况,一种是独自使用,另一种和CMD指令配合使用。当独自使用时,如果你还使用了CMD命令且CMD是一个完整的可执行的命令,那么CMD指令和ENTRYPOINT会互相覆盖只有最后一个CMD或者ENTRYPOINT有效
    # CMD指令将不会被执行,只有ENTRYPOINT指令被执行  
    
    ENTRYPOINT ls -l  
     CMD echo “Hello, World!” 

6、USER(设置container容器的用户)
设置指令,设置启动容器的用户,默认是root用户。基本一个容器一个用户,普通用户会更安全一些

example:
    USER daemon  =  ENTRYPOINT ["memcached", "-u", "daemon"]  

7、EXPOSE(指定容器需要映射到宿主机器的端口)

设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口

example:
    映射一个端口  
    EXPOSE 22
    
    映射多个端口  
    EXPOSE port1 port2 port3  
  

8、ENV(用于设置环境变量)

构建指令,在 image 中设置一个环境变量
      

9、ADD(从源系统的文件系统上复制文件到目标容器的文件系统)

如果是 URL 也可以被识别,压缩包也可以自动解压(既是优点也是缺点)

 

10、COPY (与ADD类似)
唯一作用就是从当前文件路径下拿一个文件到容器内部,不支持 URL,不能解压
 


11 、  WORKDIR (切换目录)

设置指令,指定进入 container 时的目录,进入之后可用 pwd 查看位置是否与WORKDIR设置相同

 

12、ONBUILD(在子镜像中执行)

ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

注:联合文件系统要求 Dockerfile 最大不能超过128行

 

 

镜像构建

docker  build  -t   镜像名 

构建镜像时 Dockerfile 文件最好放在一个单独的目录,否则可能会将目录下所有内容进行打包发给 docker daemon

 

 

 


    

 

上一篇:Dockerfile 常用参数说明


下一篇:dockerfile常用指令