前言
说起docker,大家都知道是容器。我们从仓库中docker pull拉取镜像(image)到本地,然后docker run指定镜像来启动一个容器(container)。那么,这个容器就开始守护内部的程序。
但是很多时候,我们需要在docker中部署自己的程序,或者因为pull的镜像太大,我们需要基于一个小的镜像来重构,这就需要我们要自己构建docker,而docker的构建步骤是基于Dockerfile来实现的。
Dockerfile
在学习Dockerfile之前,首先弄明白镜像。容器就类似于“虚拟机”,而虚拟机就需要操作系统,这个操作系统就是镜像(image)。
image
通过docker images就可以查看宿主机上已存在的所有镜像。
在上面的镜像中,使用比较多的就是centos,但是centos里面已经预装了很多软件,所以大小为231MB。像alpine、busybox的镜像就比较小,很多命令都需要自己安装,但是实际中也不会过多地去容器中执行很多的命令。
指令
首先文件名必须是Dockerfile,第一行必须使用FROM指令来引入镜像,最后一行是通过CMD或者ENTRYPOINT指令来指定容器中要运行的命令。
构建镜像是由一个基础镜像开始,通过经过各种指令来构造成成我们自己的镜像
- FROM:第一行必须是 FORM centos,表示从centos镜像构建容器
- ENV key value:设置环境变量
- RUN command:在之前的镜像基础上执行指令,并提交为新的镜像
- EXPOSE 80:开放80端口,run时需要用 -p来指定映射端口,不指定默认分配
- VOLUME /data:声明容器中/data为匿名卷。-v可以将这个匿名卷绑定到宿主机,不指定会自动绑定到/var/lib/docker/volumes
- ADD src dest:文件必须和Dockerfile同一目录,除了复制本地文件到容器中外,还有解压缩文件的功能
- COPY src dest:文件必须和Dockerfile同一目录,将src目录/文件复制到容器的dest目录
- CMD:容器启动时执行的命令
- ENTRYPOINT