news 2026/9/8 16:35:17

Dockerfile:自定义镜像

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dockerfile:自定义镜像

一、Dockerfile

没有 Dockerfile 时,构建镜像通常依赖人工操作:手动运行一个容器,在里面装软件、配环境、调参数,最后再手动提交成镜像。这个过程既繁琐,又难以复现。

而 Dockerfile 把这一系列操作全都写成了代码:

Dockerfile 的每一行都对应容器里的一个操作步骤,这使得镜像构建变得可版本化、可复用、可自动化

二、Dockerfile 的基本结构

Dockerfile 通常遵循以下结构:

# 1. 基础镜像(起点) FROM python:3.9-slim # 2. 元数据信息(作者) LABEL maintainer="your-email@example.com" # 3. 设置工作目录 WORKDIR /app # 4. 复制文件 COPY requirements.txt . # 5. 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 6. 复制应用代码 COPY . . # 7. 声明运行端口 EXPOSE 8080 # 8. 设置容器启动命令 CMD ["python", "app.py"]

三、常用指令

1.FROM:指定基础镜像(必须)

FROM是 Dockerfile 的第一条指令,它指定了当前镜像基于哪个现有镜像来构建。

# 基础镜像格式 FROM <image>[:<tag>] # 示例 FROM ubuntu:22.04 FROM python:3.9-slim FROM openjdk:17-alpine FROM node:18-alpine # 多阶段构建中的多个 FROM FROM golang:1.19 AS builder FROM alpine:latest

2.WORKDIR:设置工作目录

WORKDIR设置了容器内的当前工作目录。如果目录不存在,Docker 会自动创建。

WORKDIR /app WORKDIR /usr/src/app WORKDIR /home/root

3.RUN:执行命令(构建时)

RUN镜像构建阶段执行命令,通常用于安装软件包、创建目录等。

# 单行命令 RUN apt-get update && apt-get install -y curl # 多行命令(用 \ 换行) RUN apt-get update && \ apt-get install -y python3 python3-pip && \ rm -rf /var/lib/apt/lists/* # 清理缓存以减小镜像体积 RUN pip install --no-cache-dir -r requirements.txt

4.COPYvsADD:复制文件

指令说明建议
COPY复制文件或目录到容器推荐,行为明确
ADD功能更多,支持解压和 URL 下载仅在需要自动解压时使用
# COPY 用法 COPY requirements.txt . COPY . /app COPY --chown=user:group file.txt /app/ # ADD 用法(支持自动解压) ADD app.tar.gz /app/ ADD https://example.com/file.txt /tmp/

5.ENV:设置环境变量

ENV用于设置容器内的环境变量,会同时存在于构建和运行阶段。

ENV PYTHONUNBUFFERED=1 ENV DB_HOST=localhost ENV DB_PORT=3306 ENV APP_ENV=production

6.ARG:构建参数

ARG是构建时的参数,只在构建阶段有效。

ARG VERSION=latest FROM ubuntu:${VERSION} ARG APP_PORT=8080 ENV APP_PORT=${APP_PORT}
# 构建时传入参数 docker build --build-arg VERSION=22.04 -t myapp .

7.EXPOSE:声明端口

EXPOSE声明容器运行时监听的端口,仅作为文档性说明,真正的端口映射由-p参数完成。

EXPOSE 8080 EXPOSE 80 443

8.CMDvsENTRYPOINT:容器启动命令

这两个指令都用于定义容器启动时执行的命令,但用途不同:

指令特点适用场景
CMD可以被docker run的命令覆盖提供默认参数
ENTRYPOINT不可被覆盖固定容器执行内容
# CMD 用法 CMD ["python", "app.py"] CMD python app.py # ENTRYPOINT 用法 ENTRYPOINT ["python"] CMD ["app.py"] # 固定执行 python,参数可替换 # 实际效果: # docker run myimage → python app.py # docker run myimage test.py → python test.py
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 6:32:33

Zigbee欧洲兴趣组与TLSR8258:智能家居控制系统区域落地新信号

行业群里转一圈&#xff0c;最近讨论度最高的一条硬件新闻&#xff0c;不是什么新手机新芯片&#xff0c;而是“Zigbee Launches Europe Interest Group”。说实话&#xff0c;刚看到这条消息时我也只是习惯性划了过去&#xff0c;后来细想&#xff0c;不对&#xff0c;这是在释…

作者头像 李华
网站建设 2026/9/2 9:33:02

Agent记忆系统设计:从上下文管理到长期经验复用

本文基于 记忆.md 重新整理。原文已经说明了短期记忆、长期记忆、检索触发和决策机制&#xff1b;这份文档进一步把它组织成一套可以落地的 Agent 记忆设计指南&#xff0c;并通过具体场景讲清楚“什么时候记、记什么、什么时候查、查出来怎么用”。 1. 先用一个例子理解 Agent…

作者头像 李华
网站建设 2026/9/2 8:47:55

PyTorch实战CIFAR-10图像识别:从CNN原理到模型训练与优化

简介&#xff1a;卷积神经网络&#xff08;CNN&#xff09;作为计算机视觉的核心技术&#xff0c;通过卷积层、池化层等结构自动提取图像特征&#xff0c;其原理在于利用局部连接和权值共享高效处理网格状数据。这一技术价值在于能够端到端地学习从原始像素到高级语义的映射&am…

作者头像 李华
网站建设 2026/8/30 19:16:03

Python模拟抛硬币实验:可视化大数定律与频率收敛过程

1. 项目概述&#xff1a;从“抛硬币”到理解概率的本质“抛硬币”可能是我们最早接触到的概率实验。一枚均匀的硬币&#xff0c;正面和反面出现的概率理论上各占50%。但在实际操作中&#xff0c;你抛10次&#xff0c;可能得到7次正面、3次反面&#xff1b;抛100次&#xff0c;结…

作者头像 李华
网站建设 2026/8/31 0:54:33

MATLAB系统辨识工具箱实战:从数据到模型的全流程指南

1. 项目概述&#xff1a;为什么你需要掌握系统辨识工具箱&#xff1f;如果你正在处理控制工程、信号处理或者任何需要从数据中“学习”系统行为的项目&#xff0c;那么“系统辨识”这个概念对你来说绝对不陌生。简单来说&#xff0c;系统辨识就是通过观测一个系统的输入和输出数…

作者头像 李华
网站建设 2026/8/30 12:42:55

TOPSIS优劣解距离法:多指标决策从理论到实战全解析

1. 项目概述&#xff1a;从“拍脑袋”到“算距离”的决策革命在项目评审、人才选拔、产品选型这些日常工作中&#xff0c;我们最常遇到的困境是什么&#xff1f;是面对一堆各有优劣的选项&#xff0c;却不知道哪个“最好”。比如&#xff0c;公司要采购一批服务器&#xff0c;A…

作者头像 李华