Docker零基础入门——4.Docker之dockerFile

dockerFile的使用

  • 1.dockerFile的概念和规则
  • 2.dockerFile的指令
  • 3.自定义dockerFile

前言
————————————————————————————————————
本文安装docker的基础是linux centos7系统,使用终端模拟软件xshell,有需要安装教程的同鞋可以戳我之前的博客
VMware下载,安装及创建虚拟机
VMware安装Centos7 究极逐步详细图文流程
上节内容↓
Docker零基础入门——3.Docker之数据卷和数据卷容器

1.dockerFile的概念和规则

之前概念篇我们没有提到dockerfile,是因为他只从概念来讲的话,比较简单,难在他的指令书写和编排上,这里我们大概了解一下。
dockerfile 其实就是用来构建docker image 的构建文件,是由一系列的命令和参数组成的脚本。
我们在docker hub 官网上看到的对应容器的code tab,里边就是dockerfile的内容
比如说tomcat,你在官网都可以直接查看到他的dockerfile脚本代码。
Docker零基础入门——4.Docker之dockerFile_第1张图片
dockerfile脚本的基本使用规则
→1.每一行保留字必须大写
→2.后边至少跟上一个参数
→3.指令由上到下顺序执行
→4.井号是注释行
→5.每一条指令都会创建一个新的镜像层,并对镜像提交


2.dockerFile的指令

指令很多,我们挑一些简单常用的进行说明

  1. FROM 指令
    用来指定当前镜像生成的基础镜像,必须为第一条指令,我们知道镜像是多个可读层,比方说tomcat的镜像就是基于openJDK的,因为tomcat是java开发的,需要java运行环境。
语法:
	FORM <image> 或 FORM <image>:<tag>
举例:
	FROM centos:7
表明此镜像基于centos:7镜像
  1. MAINTAINER 指令
    用来指定维护者的信息,相当于一个备注,一般写开发者的邮箱,姓名等
语法:
	MAINTAINER <...>
举例:
	MAINTAINER The CentOS Project <[email protected]> - ami_creator
  1. RUN 指令
    容器构建时会自动调用的命令
语法:
	RUN <command> 或 RUN ["命令", 参数1, 参数2]
举例:
	RUN mkdir -p "$CATALINA_HOME"
  1. EXPOSE 指令
    用来指定服务调用的默认端口号(容器启动时可以通过 -p或-P 来指定外部对应的访问端口)
语法:
	EXPOSE <port> [<port>...]
举例:
	EXPOSE 8080
我们的tomcat就是暴露8080端口的
  1. WORKDIR 指令
    容器创建后,终端默认登陆进来工作目录的路径,就是当我们第一次进入容器时所在的目录。
语法:
	WORKDIR <path>
举例:
	WORKDIR $CATALINA_HOME
  1. ENV 指令 (environment的缩写)
    用来指定环境变量,被后续命令使用,并且在容器运行时保持
语法:
	ENV <name> <value>
举例:
	ENV CATALINA_HOME /usr/local/tomcat
  1. ADD 指令
    用来将宿主机中的拷贝到容器中的
    其中可以是dockerfile所在目录的一个相对路径,也可以是一个URL,
    还可以是一个tar文件,会[自动解压]为目录
语法:
	ADD <src> <dest>
举例:
	ADD centos-7-x86_64-docker.tar.xz /
拷贝.tar到容器根目录并解压
  1. COPY 指令
    从构建上下文目录中<源路径>文件/目录复制到新的镜像容器的目录<目标路径>
    和ADD类似 不过这个只是单纯的copy,而不会解压
语法:
	COPY src dest 或 COPY ["src", "dest"]
举例:
	COPY centos-7-x86_64-docker.tar.xz /
拷贝.tar到容器根目录(不会自动解压)
  1. VOLUME 指令
    这个指令我们上节内容中使用到了,用来创建数据卷,多个的话用逗号分割,可以概括为:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据
语法:
	VOLUME ["/data" ...]
举例:
	VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
  1. CMD 指令
    容器启动时执行的命令,如果用户指定了运行的命令,则会覆盖掉CMD的命令,这就是我们运行容器时指定指令的默认值,
语法有三种格式:
	<1> CMD ["executable","参数1","参数2"...] 使用exec执行,推荐使用
	<2> CMD command 参数1 参数2... 在/bin/sh中执行,提供给需要交互的使用
	<3> CMD ["参数1","参数2"...] 提供给ENTRYPOINT的默认参数
举例:
	CMD ["catalina.sh", "run"]

dockerfile 应当只有一条cmd命令,如果指定了多条,则会覆盖,最终只有最后一条会被调用

  1. ENTRYPOINT 指令
    容器启动后执行的命令,且不会被docker run 提供的参数覆盖,也是唯一的,同CMD
语法有两种格式:
	<1> ENTRYPOINT ["executable","参数1","参数2"...]
	<2> ENTRYPOINT command 参数1 参数2... shell中执行
举例:
	ENTRYPOINT ["curl", "-s", "xxx.com"]

比方说你执行了如下命令

docker run -it xxximages:xxx -i

最终执行时会把CMD的参数"-i"追加到ENTRYPOINT参数中,为:
ENTRYPOINT [“curl”, “-s”, “-i”, “xxx.com”]

  1. ONBUILD 指令
    当A镜像作为B镜像的基础镜像时,B镜像build时执行的, 记录在A镜像dockerfile中的命令。总结一下就是
    B镜像build时,会执行A镜像 docker file 中的ONBUILD后指定的命令
语法:
	ONBUILD [INSTRUCTION]
举例:
	ONBUILD RUN echo "build form A镜像"

3.自定义dockerFile

我们使用dockerfile脚本的顺序一般如下
→1.编写dockerfile
→2.build dockerfile 获得镜像文件
→3.docker run 通过镜像生成容器

现在开始让我们按照上边顺序自己里定义一个dockerfile
直接上dockerfile代码

FROM centos:7
MAINTAINER cjl<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo "clearlove77777"
CMD /bin/bash

这是非常简单的一个dockerfile了,我们将其build编译为镜像

语法:docker build -f <dockerfilename> -t <image> .
注意这一行的末尾,是有一个英文句号的,表明是在当前目录
举例:docker build -f dockerfile1 -t cjl_centos:1.0 .

Docker零基础入门——4.Docker之dockerFile_第2张图片
因为dockerfile中有安装的命令,导致下载时打印在控制台上的东西过多,这里我就只截图开始和结束了,
Docker零基础入门——4.Docker之dockerFile_第3张图片
下来再使用docker run 通过镜像生成容器

docker run -dit image7:1.0

首先查看生成的镜像
Docker零基础入门——4.Docker之dockerFile_第4张图片
再启动容器,之前我们指定了workdir是 usr/local,进入容器查看一下是不是这样
一发入魂,么得毛病
Docker零基础入门——4.Docker之dockerFile_第5张图片


OK,dockerFile就简单先介绍到这了,在我们实际使用的时候构建dockerfile才是使用docker的基础核心,希望大家可以继续学习其他的指令,我们下节再见。

你可能感兴趣的:(Docker)