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

目录

  • [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构建步骤

  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 保留字介绍

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

7 参考地址

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

相关推荐
条纹布鲁斯30 分钟前
dockerdsktop修改安装路径/k8s部署wordpress和ubuntu
docker·kubernetes
工业3D_大熊2 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
szc17672 小时前
docker 相关命令
java·docker·jenkins
CP-DD2 小时前
Docker 容器化开发 应用
运维·docker·容器
Stark-C3 小时前
万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统
macos·docker·策略模式
老司机张师傅3 小时前
【微服务实战之Docker容器】第七章-Dockerfile解析
容器·dockerfile·虚悬镜像·docker学习
微信-since811923 小时前
[ruby on rails] 安装docker
后端·docker·ruby on rails
吴半杯5 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
今天我刷leetcode了吗5 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
lwprain6 小时前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat