目录
- [1 基本概念](#1 基本概念)
- [2 语法规则](#2 语法规则)
- [3 Dockerfile构建步骤](#3 Dockerfile构建步骤)
- [4 Dockerfile、Docker镜像和Docker容器的关系](#4 Dockerfile、Docker镜像和Docker容器的关系)
- [5 保留字介绍](#5 保留字介绍)
-
- [5.1 FROM](#5.1 FROM)
- [5.2 MAINTAINER](#5.2 MAINTAINER)
- [5.3 RUN](#5.3 RUN)
- [5.4 EXPOSE](#5.4 EXPOSE)
- [5.5 WORKDIR](#5.5 WORKDIR)
- [5.6 USER](#5.6 USER)
- [5.7 ENV](#5.7 ENV)
- [5.8 ADD](#5.8 ADD)
- [5.9 COPY](#5.9 COPY)
- [5.10 VOLUME](#5.10 VOLUME)
- [5.11 CMD](#5.11 CMD)
- [5.12 ENTRYPOINT](#5.12 ENTRYPOINT)
- [6 总结](#6 总结)
- [7 参考地址](#7 参考地址)
1 基本概念
Dockerfile是一种文本文件,用于构建Docker镜像的脚本,能够定义和构建 Docker 镜像的步骤和配置。它包含一系列指令,用于描述镜像的构建流程和所需的环境设置。允许开发者自定义镜像内容、环境和配置。它的指令由一行行的命令组成,按顺序逐条执行,从而生成一个定制化的镜像。
2 语法规则
- 指令和参数: Dockerfile中的指令必须以大写字母开头,后跟一个或多个参数。
- 注释: 使用
#
符号进行注释,注释内容会被忽略。 - 层次结构: 每条指令在执行时都会创建一个新的镜像层,并将更改提交到镜像。
3 Dockerfile构建步骤
- 编写Dockerfile文件: Dockerfile是用来构建Docker镜像的文本文件,其中包含了一系列指令和参数,定义了镜像的构建过程和配置。通过编辑Dockerfile,开发者可以指定基础镜像、安装软件、设置环境变量、复制文件等操作。
- 使用docker build命令构建镜像: 一旦Dockerfile文件编写完成,使用
docker build
命令来执行构建操作。这个命令会按照Dockerfile中的指令逐条执行,并生成一个新的Docker镜像。该命令的语法通常为:docker build -t 新镜像名称:标签路径 .
。其中,"-t"用于指定镜像的名称和标签,".`"表示Dockerfile所在的当前目录。 - 运行Docker容器: 构建完成镜像后,使用
docker run
命令来启动一个容器实例。该命令的语法通常为:docker run [OPTIONS] 镜像名称 [COMMAND] [ARG...]
。通过运行容器,可以基于镜像创建一个运行环境,这个环境是镜像的一个实例化版本。
4 Dockerfile、Docker镜像和Docker容器的关系
- Dockerfile: 是一个文本文件,包含了构建Docker镜像的指令和配置,可被视为构建镜像的"原材料",主要面向开发人员,描述了镜像的组成和构建流程。
- Docker镜像: 是由Dockerfile构建而成的二进制文件,包含了运行一个应用所需的所有内容:代码、运行时、库、环境变量和配置文件等。镜像可视为构建好的"交付品"或"交付标准",用于创建Docker容器的基础。
- Docker容器: 是Docker镜像的运行实例,是镜像的一个运行环境。当使用
docker run
命令启动容器时,会创建一个基于镜像的运行时实体,具有独立的文件系统、网络空间和进程空间。容器是面向部署与运维的,允许开发者将镜像部署为可运行的应用实例。
Dockerfile是用来构建Docker镜像的脚本文件,镜像是Docker容器的基础,而容器则是镜像的运行实例。通过Dockerfile定义了镜像的内容和构建过程,然后使用 docker build
命令来构建镜像。运行容器时,实际上是在基于镜像创建一个独立的运行环境,这个环境可以独立运行并与宿主机隔离开来,这就是Docker容器的概念。三者共同构成了Docker技术体系,使得开发、部署和运维变得更加便捷和高效。
5 保留字介绍
5.1 FROM
- 作用: 指定基础镜像,用于构建新镜像的起点。
- 用法:
FROM <镜像名称>[:<标签>]
- 示例:
FROM ubuntu:latest
5.2 MAINTAINER
- 作用: 设置镜像维护者的信息,包括姓名和邮箱等。
- 用法:
MAINTAINER <维护者信息>
- 示例:
MAINTAINER John Doe <john@example.com>
5.3 RUN
- 作用: 在镜像构建过程中执行命令,安装软件包、更新系统等。
- 用法:
RUN <命令>
(shell格式)RUN ["可执行文件", "参数1", "参数2"]
(exec格式)
- 示例:
RUN apt-get update && apt-get install -y python
RUN ["apt-get", "update"]
5.4 EXPOSE
- 作用: 声明容器运行时监听的端口,仅声明并不会实际打开端口。
- 用法:
EXPOSE <端口号>
- 示例:
EXPOSE 80
5.5 WORKDIR
- 作用: 设置容器启动后的工作目录。
- 用法:
WORKDIR /path/to/directory
- 示例:
WORKDIR /usr/app
5.6 USER
- 作用: 指定容器中执行命令所用的用户名或UID。
- 用法:
USER <用户名>
- 示例:
USER myuser
5.7 ENV
- 作用: 设置环境变量,供后续指令使用。
- 用法:
ENV <变量名> <值>
- 示例:
ENV MY_VAR my_value
5.8 ADD
- 作用: 将宿主机文件或目录复制到镜像中,自动处理URL和解压tar包。
- 用法:
ADD <源路径> <目标路径>
- 示例:
ADD ./files /app
5.9 COPY
- 作用: 类似于ADD命令,用于将宿主机文件或目录复制到镜像中。
- 用法:
COPY <源路径> <目标路径>
- 示例:
COPY ./files /app
5.10 VOLUME
- 作用: 创建挂载点,用于持久化数据或与宿主机共享数据。
- 用法:
VOLUME ["路径"]
- 示例:
VOLUME ["/data"]
5.11 CMD
- 作用: 指定容器启动后要运行的默认命令。
- 用法:
CMD ["可执行文件", "参数1", "参数2"]
(exec格式)CMD <命令>
(shell格式)
- 示例:
CMD ["python", "app.py"]
CMD echo "Hello World"
5.12 ENTRYPOINT
- 作用: 设置容器启动时要执行的命令,可以被覆盖但不会被忽略。
- 用法:
ENTRYPOINT ["可执行文件", "参数1", "参数2"]
- 示例:
ENTRYPOINT ["echo", "Hello"]
这些保留字是Dockerfile中用来定义镜像构建和容器运行的关键指令,每个都有特定的作用和用法,通过合理的组合和使用,可以构建出符合需求的Docker镜像和容器。
6 总结
Dockerfile是定义Docker镜像构建过程的关键文件,通过一系列指令和参数描述了镜像的组成、配置和行为。遵循最佳实践编写Dockerfile能够生成高效、安全、可靠的镜像,为容器化应用提供良好的基础环境。