Dockerfile
Docker - Dockerfile 基础
Section titled “Docker - Dockerfile 基础”在前面的章节中,我们使用了从 Docker Hub 下载的预构建镜像,例如 ubuntu、nginx 或 jenkins/jenkins。这些镜像是由其他人使用 Dockerfile 创建的。
Dockerfile 是一个简单的文本文件,其中包含一系列指令,告诉 Docker 如何构建自定义镜像。它自动化了设置环境、安装依赖、复制应用程序代码和配置运行时的过程。
为什么使用 Dockerfile?
Section titled “为什么使用 Dockerfile?”- 自动化: 自动化镜像创建过程,使其可重复且可靠。
- 版本控制: Dockerfile 可以与您的应用程序代码一起提交到版本控制系统(如 Git)中,跟踪应用程序环境的变化。
- 可重现性: 确保任何人都可以从 Dockerfile 构建出完全相同的镜像,从而实现一致的环境。
- 文档: Dockerfile 本身就是关于镜像如何构建的文档。
- 效率: 如果 Dockerfile 的某些部分没有改变,Docker 的层缓存机制可以显著加快构建速度。
Dockerfile 的结构
Section titled “Dockerfile 的结构”Dockerfile 由一系列指令组成,每条指令占一行。指令通常大写,后跟参数。
步骤 1:创建文件
在您的项目根目录或专门的目录中创建一个名为 Dockerfile 的文件(文件名必须是 Dockerfile,大写 ‘D’ 且没有扩展名)。
步骤 2:添加指令
以下是一个简单的 Dockerfile 示例及其分解说明:
# 使用注释解释步骤# 这是一个示例 Dockerfile
# 指令 1:指定基础镜像FROM ubuntu:22.04
# 指令 2:添加元数据(例如维护者信息)LABEL maintainer="Your Name <you@example.com>"
# 指令 3:构建期间运行命令(例如安装软件)RUN apt-get update && apt-get install -y --no-install-recommends nginx && apt-get clean && rm -rf /var/lib/apt/lists/*
# 复制文件从构建上下文到镜像中# COPY ./my-app-code /app
# 指令 4:将文件从构建上下文复制到镜像中# 指令 5:声明容器将监听的端口EXPOSE 80
# 指令 6:定义容器启动时要运行的默认命令CMD ["nginx", "-g", "daemon off;"]关于结构和常用指令的关键点:
#:用于添加注释。FROM:指定基础镜像。每个 Dockerfile 都必须以FROM开头。LABEL:向镜像添加元数据(键值对)(替换已弃用的MAINTAINER)。RUN:在镜像构建过程中执行命令(例如安装软件包)。每个RUN指令都会创建一个新的镜像层。COPY:将文件或目录从您的本地机器(构建上下文)复制到镜像中。EXPOSE:告知 Docker 容器在运行时监听指定的网络端口(仅作为文档说明)。CMD:指定当容器从镜像启动时要执行的默认命令。Dockerfile 中只有最后一个CMD指令会生效。
步骤 3:保存文件。
保存后,您可以在与 Dockerfile 相同的目录中使用 docker build 命令来创建您的自定义镜像。我们将在下一章介绍构建过程。