初见dockerFile:https://blog.csdn.net/ak739105231/article/details/105856710
一、Docker是什么?
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚步。
构建三步骤:1.编写dockerfile文件;2.docker biuld 将dockerfile打包成镜像文件;3.docker run 实例化镜像文件,容器运行
dockerfile示例:在阿里云的容器镜像服务中选择镜像,可以进入GitHub,看到对应镜像的dockerfile,下面是centos的dockerfile:
上面截图中的:scratch,是所有镜像的源镜像(base镜像);(相当于java中的object类);DockerHub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的;
上面截图中的:红色字体(如:FROM),称为“保留字指令”;必须大写;
二、Dockerfile构建过程解析
Dockerfile内容基础知识:
1.每条保留字指令都必须为大写字母,且后面要跟随至少一个参数;
2.指令按照从上到下,顺序执行;
3.#表示注释
4.每条指令都会创建一个新的 镜像层,并对镜像进行提交;
Docker执行Dockerfile的大致流程:
1.docker从基础镜像(源镜像)运行一个容器
2.执行一条指令并对容器作出修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到所有指令都执行完毕;
从应用软件的角度来看,dockerfile、docker镜像、docker容器分别代表:原材料、交付品、软件的运行态;
三、DockerFile保留字指令
FROM:基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露出的端口
WORKDIR:指定在创建容器后,终端默认登录的进来工作目录,一个落脚点;
ENV:用来在构建镜像过程中设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中,但没有ADD强大,ADD是拷贝+解压;COPY仅是拷贝;格式:COPY src dest 或者COPY['src','dest']
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定一个容器启动时要运行的命令,dockerfile中可以有多个CMD指令,build时都会执行;但docker run时,是最后一个生效,CMD会被docker run之后的参数替换;
ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序和参数,区别:docker run之后的参数不会替换ENTRYPOINT命令,而是追加。
ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。
四、根据实例,理解DockerFile,理解保留字指令
案例1:自定义centos镜像:理解基本保留字指令
在精简版centos,没有vim,ifconfig等常用的工具,因此,我们需要在精简版centos上备注一些自己需要的工具;所以需要自定义自己需要的镜像;
步骤1:编写DockerFile
步骤2:构建镜像:docker build -f /mydocker/DockerFile -t centos:6.7.8 .
步骤3:docker history 镜像ID或者镜像名称:tag//查看镜像形成过程
步骤4:实例化容器并运行:docker run -it 镜像name:tag或id
可以看出dockerFile的效果;