Dockerfile:自定义镜像
一、Dockerfile没有 Dockerfile 时构建镜像通常依赖人工操作手动运行一个容器在里面装软件、配环境、调参数最后再手动提交成镜像。这个过程既繁琐又难以复现。而 Dockerfile 把这一系列操作全都写成了代码Dockerfile 的每一行都对应容器里的一个操作步骤这使得镜像构建变得可版本化、可复用、可自动化。二、Dockerfile 的基本结构Dockerfile 通常遵循以下结构# 1. 基础镜像起点 FROM python:3.9-slim # 2. 元数据信息作者 LABEL maintaineryour-emailexample.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:latest2.WORKDIR设置工作目录WORKDIR设置了容器内的当前工作目录。如果目录不存在Docker 会自动创建。WORKDIR /app WORKDIR /usr/src/app WORKDIR /home/root3.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.txt4.COPYvsADD复制文件指令说明建议COPY复制文件或目录到容器推荐行为明确ADD功能更多支持解压和 URL 下载仅在需要自动解压时使用# COPY 用法 COPY requirements.txt . COPY . /app COPY --chownuser:group file.txt /app/ # ADD 用法支持自动解压 ADD app.tar.gz /app/ ADD https://example.com/file.txt /tmp/5.ENV设置环境变量ENV用于设置容器内的环境变量会同时存在于构建和运行阶段。ENV PYTHONUNBUFFERED1 ENV DB_HOSTlocalhost ENV DB_PORT3306 ENV APP_ENVproduction6.ARG构建参数ARG是构建时的参数只在构建阶段有效。ARG VERSIONlatest FROM ubuntu:${VERSION} ARG APP_PORT8080 ENV APP_PORT${APP_PORT}# 构建时传入参数 docker build --build-arg VERSION22.04 -t myapp .7.EXPOSE声明端口EXPOSE声明容器运行时监听的端口仅作为文档性说明真正的端口映射由-p参数完成。EXPOSE 8080 EXPOSE 80 4438.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

相关新闻

推理加速机架量产实践:GPU/LPU驱动、API集成与稳定性验证

推理加速机架量产实践:GPU/LPU驱动、API集成与稳定性验证

AI 推理加速硬件正在从“单卡演示”走向“机架级量产上线”。最近行业里讨论度很高的 Groq 3 LPX 机架,正好代表了这个阶段:硬件已经完成量产准备,接下来的问题不再是能不能跑通一个 demo,而是如何把一套装满加速卡的机架变成稳定…

2026/10/25 19:44:07 阅读更多 →
蓝桥杯123数列题解:从暴力模拟到数学公式的算法优化

蓝桥杯123数列题解:从暴力模拟到数学公式的算法优化

1. 项目概述:从“123”数列到蓝桥杯真题的算法思维跃迁看到“2021年蓝桥杯C/CB组F题-123”这个标题,很多参加过蓝桥杯的同学可能心头一紧。F题,在蓝桥杯的赛制里,通常意味着难度和分水岭。而“123”这个看似简单的数列&#xff0c…

2026/11/4 19:15:40 阅读更多 →
MySQL基础教程——事务

MySQL基础教程——事务

事务前言一、事务的概念(一)什么是事务(二)事务的属性二、事务的常见操作(一)事务的提交(二)事务的开始与回滚三、事务隔离级别详解(一)查看与设置隔离性1、查…

2026/10/25 17:57:05 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/6 22:01:09 阅读更多 →

日新闻

周新闻

月新闻