Dockerfile
# 🧱 常用指令
指令 | 说明 |
---|---|
FROM | 指定基础镜像 |
RUN | 执行命令,例如安装软件包 |
COPY | 复制文件到容器中 |
ADD | 类似 COPY,还支持 URL 和压缩包自动解压 |
WORKDIR | 设置工作目录 |
CMD | 指定容器启动时执行的命令(只能有一个) |
ENTRYPOINT | 设置主启动命令(可搭配 CMD) |
ENV | 设置环境变量 |
EXPOSE | 指定容器监听端口 |
ARG | 构建参数(与 ENV 类似,但只在构建阶段有效) |
# 基础镜像
# scratch
Docker 中最小的空白基础镜像
适合构建极简静态编译程序镜像(如 Go 应用)
# bosybox
集成常用 Linux 工具的精简工具箱
镜像小巧(仅几 MB),便于快速验证
# Alpine
- 轻量级、安全性高的 Linux 发行版
- 功能完善,内置包管理器 apk,适合生产环境S
# 示例
# 🧪 Spring Boot 应用
FROM adoptopenjdk/openjdk8:alpine-jre
ENV TZ=Asia/Shanghai
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
# 🧱 Python 应用
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
# 🐳 Vue 应用 多阶段构建(Multi-stage Build)
用于构建更小、更安全的镜像。
# 构建阶段
FROM node:18-alpine as builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
# 运行阶段
FROM nginx:stable-alpine
COPY /app/dist /usr/share/nginx/html
COPY nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
✅ 优势:构建依赖不会进入最终镜像,提升安全性与体积优化。
# ⚡ 缓存优化技巧
镜像构建是按层进行的,合理拆分指令顺序可以更好利用缓存。
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
📌 建议:将变动小的文件优先 COPY,避免因频繁变动导致缓存失效。
# 🛠️ 构建与运行
# 构建镜像
docker build -t my-app .
# 运行容器
docker run -d -p 3000:3000 --name my-container my-app
# 进入容器
docker exec -it my-container sh
# 📁 .dockerignore
类似 .gitignore
,可以防止某些文件被加入构建上下文。
node_modules
*.log
Dockerfile
.dockerignore
.git
上次更新: 2025/04/25, 10:46:05