一起学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

相关推荐
jingshaoqi_ccc9 小时前
ubuntu 24下面安装docker
ubuntu·docker·eureka
关关长语10 小时前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker
水滴与鱼11 小时前
DOCKER制作ROS运行的镜像文件
运维·docker·容器
洒家肉山大魔王12 小时前
Kubernetes中Pod 处于 CrashLoopBackOff 状态(生产环境)
linux·容器·kubernetes·pod·pod循环重启
杨浦老苏13 小时前
安全的消息传递和协作工具Virola Messenger
docker·即时通讯·群晖·im
Lynnxiaowen14 小时前
今天我们学习kubernetes内容Ingress资源对象
学习·容器·kubernetes
jason成都15 小时前
emqx的docker部署
运维·docker·容器
mixboot16 小时前
docker 国内镜像源
docker·镜像源
谷粒.16 小时前
云原生时代的测试策略:Kubernetes环境下的测试实践
运维·网络·云原生·容器·kubernetes
java_logo16 小时前
Milvus GUI ATTU Docker 容器化部署指南
运维·数据库·docker·容器·eureka·milvus