🐳 什么是 Dockerfile?

Dockerfile 是一个文本文件,包含了一系列指令,用于自动构建 Docker 镜像。每条指令定义了镜像构建过程中的一个步骤,比如选择基础镜像、安装依赖、复制文件、设置环境变量等。

📄 Dockerfile 的常见指令

指令 作用说明
FROM 指定基础镜像,例如 ubuntunodepython
RUN 执行命令,比如安装软件包
COPY 将本地文件复制到镜像中
WORKDIR 设置工作目录
CMD 容器启动时执行的默认命令
ENTRYPOINT 设置容器启动时的主命令,可与 CMD 配合使用
ENV 设置环境变量
EXPOSE 声明容器监听的端口(仅声明,不实际开放)

🧪 示例:Python 应用的 Dockerfile

# 使用官方 Python 镜像作为基础
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目代码
COPY . .

# 设置环境变量(可选)
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 启动应用
CMD ["python", "app.py"]

🚀 构建和运行镜像

# 构建镜像(假设 Dockerfile 在当前目录)
docker build -t my-python-app .

# 运行容器
docker run -p 8000:8000 my-python-app

🎯 小贴士

  • Dockerfile 文件名默认是 Dockerfile,无需扩展名。
  • 每次修改 Dockerfile 后都需要重新构建镜像。
  • 可以通过 .dockerignore 文件排除不必要的文件(类似 .gitignore)。

🧱 Dockerfile vs Docker:核心区别

项目 Dockerfile Docker
类型 文件(脚本) 工具 / 平台
作用 定义如何构建一个 Docker 镜像 用于构建、运行、管理容器
内容 包含构建镜像的指令(如 FROM、RUN 等) 包含命令行工具和服务(如 docker build
使用方式 被 Docker 工具读取并执行 通过命令行或 API 操作容器和镜像
举例 Dockerfile 是一个文本文件 docker builddocker run 是命令

📄 Dockerfile 是什么?

  • 是一个 构建镜像的说明文件
  • 类似于“食谱”,告诉 Docker 如何一步步制作一个镜像。
  • 你写好 Dockerfile 后,用 docker build 命令来生成镜像。

🧠 举个例子:

Dockerfile

FROM node:18
COPY . /app
WORKDIR /app
RUN npm install
CMD ["node", "server.js"]

🐳 Docker 是什么?

  • 是一个完整的 容器平台,包括:

    • 构建镜像(docker build
    • 运行容器(docker run
    • 管理镜像和容器(docker psdocker images 等)
  • 它读取 Dockerfile 来构建镜像,然后运行这些镜像作为容器。

🧠 举个例子:

docker build -t my-app .
docker run -p 3000:3000 my-app

🎯 总结一句话

Dockerfile 是说明书,Docker 是执行者。

Docker 读懂 Dockerfile,帮你构建镜像、运行容器,实现应用的快速部署和隔离。


Docker 的几个核心组成部分:镜像(Image)容器(Container)网络(Network)数据卷(Volume)

🧊1. 镜像(Image)

  • 镜像是一个只读的模板,包含运行应用所需的所有内容:代码、依赖、环境变量等。
  • 由 Dockerfile 构建而来。
  • 类似于“快照”或“应用安装包”。

🧠 示例:

docker build -t my-app .
docker images  # 查看本地镜像

📦 2. 容器(Container)

  • 容器是镜像的运行实例,是一个隔离的环境。
  • 可以启动、停止、删除、重启。
  • 容器之间互不干扰,适合部署微服务。

🧠 示例:

docker run -d -p 8080:80 my-app
docker ps       # 查看正在运行的容器
docker stop <容器ID>

🌐 3. 网络(Network)

  • Docker 提供虚拟网络,让容器之间可以通信。
  • 默认有 bridge 网络,也可以创建自定义网络。
  • 非常适合多容器架构,比如 Web + 数据库。

🧠 示例:

docker network create my-network
docker run --network my-network --name web my-web-image
docker run --network my-network --name db my-db-image

📁 4. 数据卷(Volume)

  • 用于持久化数据,避免容器删除后数据丢失。
  • 可以挂载到容器的某个目录。
  • 非常适合数据库、日志等场景。

🧠 示例:

docker volume create my-data
docker run -v my-data:/data my-db-image

🧠 总结:Docker 的四大支柱

组件 作用说明
镜像 应用的模板
容器 镜像的运行实例
网络 容器之间的通信桥梁
数据卷 容器外部的持久化存储
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-08-07 15:22:46

results matching ""

    No results matching ""