Dockerfile 是用于定义 Docker 镜像构建指令的文件。下面是 Dockerfile 中最常用的一些指令。
1、FROM:指定一个基础镜像。在 Dockerfile 中,必须从一个已有的镜像构建所需的镜像。
2、RUN:在当前镜像的文件系统上执行命令。执行RUN指令后,Docker 会将当前镜像的文件系统和状态提交为新的镜像。
3、CMD:容器启动后要执行的命令。可以使用多种方式定义 CMD 指令以执行指定操作。
4、WORKDIR:指定在容器中要使用的某个目录。
5、COPY 或 ADD :将文件或目录从构建上下文复制到新镜像中。COPY 复制本地文件夹的方法。ADD 可以将远程文件作为 URL 复制过来并解压缩。
6、EXPOSE:容器开放的端口。该指令通知Docker,容器在运行时监听指定的网络端口。你可以指定端口监听的是TCP还是UDP,如果没有指定协议,默认是TCP。
7、ENV:设置环境变量。
8、ARG:定义构建时可用的变量。
【案例】Dockerfile示例
创建Dockerfile文件:
- mkdir -p /opt/df/demo1 # 创建存放Dockerfile的文件夹
- cd /opt/df/demo1 # 进入该文件夹
- vim Dockerfile # 创建示例文件
Dockerfile文件中的内容如下:
- FROM rockylinux:9.0
- RUN yum install -y java-17-openjdk-devel
- CMD java -version
使用build命令基于Dockerfile构建Docker镜像:
- docker build -t java17:latest . # java17:latest 是新的image名称, .表示Dockerfile文件在当前目录下
什么是镜像分层
在 Docker 中,镜像有一个很重要的特性叫做分层。这是一种轻量级的虚拟化机制,可以帮助用户更加高效地制作和管理容器镜像。
每个镜像都由一系列分层的文件系统组成,每一层都包含了特定软件包、库和文件。当我们从一个已有的镜像构建容器时,Docker会利用这些分层文件系统来向容器提供所需的文件和配置信息。
镜像分层的优点
镜像分层最大的一个好处就是共享资源。
1、易于更新和维护:只需更新需改的一层即可,其他层可以不变,避免了不必要的构建和复制。
2、空间利用率高:同样大小的源码只需要存储一次,以后每个基础镜像只需要存储在它前一个基础镜像之上的那一层的数据即可。
3、加快镜像构建:在构建时,Docker 可以轻松地缓存已经存在的层,当下次构建时,只需要重复利用已有的层即可,快速进行增量式更新。
4、更好的镜像交付:分层的机制使得将一个完整的应用程序打包成一个镜像更加容易,不同样层可以用于不同的应用场景。