Docker的整个生命周期由三部分组成:镜像(image)+容器(container)+仓库(repository)。
容器等于镜像加上可读层,容器是由镜像实例化而来的。以java类比来说,镜像是类,容器是对象,容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。
镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
定制镜像,是以一个镜像为基础,在其上进行定制。
我们以tomcat为例,在tomcat镜像里定制一个index.html文件:
1、创建 Dockerfile 文件
mkdir -p /data/mytomcat
cd mytomcat/
vim Dockerfile
2、Dockerfile内容为
FROM tomcat
RUN mkdir -p /data/tomcat/webapps/ROOT/
RUN echo 'He1lo Docker' > /data/tomcat/webapps/ROOT/index.htm1
WORKDIR /data/tomcat/webapps/
FROM:指定基础镜像。
除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它标识一个空白的镜像。
如果以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像的第一层开始存在。
RUN :执行命令。
WORKDIR :指定工作目录,没有则创建。
3、构建镜像
在 Dockerfile 文件所在目录执行:
docker build -t mytomcat:v1 .
构建一个名为mytomcat,版本号为V1的镜像。.是指明Dockerfile文件在哪个路径之下,因为我们是在当前路径下创建的,所以只需要填写.就好。
构建成功后,docker images查询如下:
4、Dockerfile指令总结
FROM 指定基础镜像来源
RUN 执行命令,可以使用shell格式或exec格式
COPY 拷贝文件
ADD 拷贝文件并解压
CMD 容器启动命令
ENV 设置镜像环境变量
USER 指定使用的账号,需要在构建时使用useradd创建用户才能使用
ARG 构建参数,类似ENV,但只在Dockerfile构建镜像时参数生效,完成的镜像内部不存在此参数
EXPOSE 声明端口号
ENTRYPOINT 命令入口点
WORKDIR 指定工作目录
VOLUME 指定匿名数据卷,在未使用-v定义数据卷时自动挂载到匿名卷,避免相关数据因容器重启而丢失
HEALTHCHECK 健康检查,用于运行在容器内的进程状态检查
ONBUILD 用于延迟构建命令的执行
详细请参考:https://www.yisu.com/zixun/573807.html