一起学docker系列之十二什么是dockerfile

目录

  • 1 基本概念
  • 2 语法规则
  • 3 Dockerfile构建步骤
  • 4 Dockerfile、Docker镜像和Docker容器的关系
  • 5 保留字介绍
    • 5.1 FROM
    • 5.2 MAINTAINER
    • 5.3 RUN
    • 5.4 EXPOSE
    • 5.5 WORKDIR
    • 5.6 USER
    • 5.7 ENV
    • 5.8 ADD
    • 5.9 COPY
    • 5.10 VOLUME
    • 5.11 CMD
    • 5.12 ENTRYPOINT
  • 6 总结
  • 7 参考地址

1 基本概念

Dockerfile是一种文本文件,用于构建Docker镜像的脚本,能够定义和构建 Docker 镜像的步骤和配置。它包含一系列指令,用于描述镜像的构建流程和所需的环境设置。允许开发者自定义镜像内容、环境和配置。它的指令由一行行的命令组成,按顺序逐条执行,从而生成一个定制化的镜像。

一起学docker系列之十二什么是dockerfile_第1张图片

2 语法规则

  • 指令和参数: Dockerfile中的指令必须以大写字母开头,后跟一个或多个参数。
  • 注释: 使用 # 符号进行注释,注释内容会被忽略。
  • 层次结构: 每条指令在执行时都会创建一个新的镜像层,并将更改提交到镜像。

3 Dockerfile构建步骤

一起学docker系列之十二什么是dockerfile_第2张图片

  1. 编写Dockerfile文件: Dockerfile是用来构建Docker镜像的文本文件,其中包含了一系列指令和参数,定义了镜像的构建过程和配置。通过编辑Dockerfile,开发者可以指定基础镜像、安装软件、设置环境变量、复制文件等操作。
  2. 使用docker build命令构建镜像: 一旦Dockerfile文件编写完成,使用 docker build 命令来执行构建操作。这个命令会按照Dockerfile中的指令逐条执行,并生成一个新的Docker镜像。该命令的语法通常为:docker build -t 新镜像名称:标签路径 .。其中,“-t”用于指定镜像的名称和标签,“.`”表示Dockerfile所在的当前目录。
  3. 运行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 保留字介绍

一起学docker系列之十二什么是dockerfile_第3张图片

5.1 FROM

  • 作用: 指定基础镜像,用于构建新镜像的起点。
  • 用法: FROM <镜像名称>[:<标签>]
  • 示例: FROM ubuntu:latest

5.2 MAINTAINER

  • 作用: 设置镜像维护者的信息,包括姓名和邮箱等。
  • 用法: MAINTAINER <维护者信息>
  • 示例: MAINTAINER John Doe

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能够生成高效、安全、可靠的镜像,为容器化应用提供良好的基础环境。

7 参考地址

https://docs.docker.com/engine/reference/builder

你可能感兴趣的:(一起学docker系列,docker,容器,Dockerfile,镜像)