写在前面
- Dockerfile的默认相对路径是Dockerfile所在的目录;
- Dockerfile中的每一行会被视为一层镜像
一、Dockerfile 原理
1.1 镜像定义
首先我们先来回顾一下 Docker 镜像,它由多个只读层堆叠到一起,每一层是上一层的增量修改。基于镜像创建新容器时,将在基础层的顶部添加一个新的可写层。该层通常称为“容器层”。下图展示了一个基于 docker.io/centos 基础镜像构建的应用镜像,创建出容器时的视图。

1.2 镜像来源
镜像主要是 Docker 通过读取、运行 Dockerfile 的指令来生成。我们将上篇文章中的Dockerfile拿过来
FROM gcc
MAINTAINER panda
COPY ./hello.c ./
RUN pwd
LABEL myhello 1.0.0
LABEL env prod
RUN gcc hello.c -o hello
CMD ["./hello"]
Dockerfile的核心逻辑就是先定义引用的基础镜像(FROM base image),然后再COPY或ADD上下文到容器,然后再RUN执行用户自定义脚本构建,最后定义容器的CMD或ENTRYPOINT。
1.3 Dockerfile 关键字
FROM
设置镜像使用的基础镜像,必须是第一条指令。如果不以任何镜像为基础镜像,则可以不写,但是,接下来的第一条指令会被作为镜像的第一层使用。
用法:FROM image:tag 其中 tag 是可选项,如果不写,默认为最新latest。
FROM nginx
MAINTAINER
设置镜像的作者。
用法:MAINTAINER name
MAINTAINER panda
RUN
编译镜像时,要执行的命令,经常被用来安装软件包、拉取和编译代码。
RUN apt-get install python3
RUN

本文介绍了Dockerfile的原理,如镜像的分层结构和容器的创建过程。详细讲解了Dockerfile中的关键指令,如FROM用于设置基础镜像,RUN执行命令,LABEL设置标签,以及COPY和ADD复制文件。此外,还提到了Exec和Shell格式的区别,CMD和ENTRYPOINT的用法,以及VOLUME、USER和WORKDIR等指令。文章末尾讨论了Dockerfile的优化技巧,包括减少层的数量和大小,以及使用多阶段构建。
最低0.47元/天 解锁文章
2840

被折叠的 条评论
为什么被折叠?



