Dockerfile是一个文本文件,包含一系列指令,用于自动化构建Docker镜像。每条指令创建一个新的镜像层。
# 基础镜像
FROM ubuntu:20.04
# 维护者信息
LABEL maintainer="your@email.com"
# 执行命令
RUN apt-get update && apt-get install -y nginx
# 复制文件
COPY index.html /var/www/html/
# 设置工作目录
WORKDIR /app
# 暴露端口
EXPOSE 80
# 启动命令
CMD ["nginx", "-g", "daemon off;"]
# 使用官方镜像
FROM python:3.9
# 使用特定版本
FROM node:16-alpine
# 使用轻量级镜像
FROM alpine:latest
# 多阶段构建的第二阶段
FROM nginx:alpine AS production
alpine:最小化Linux发行版(5MB)ubuntu:完整的Ubuntu系统python:Python运行环境node:Node.js运行环境nginx:Web服务器# Shell形式
RUN apt-get update
# Exec形式(推荐)
RUN ["apt-get", "update"]
# 合并多条命令减少层数
RUN apt-get update && \
apt-get install -y nginx && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 使用反斜杠换行提高可读性
RUN pip install --no-cache-dir \
flask \
requests \
redis
# COPY - 复制文件(推荐)
COPY app.py /app/
COPY requirements.txt /app/
COPY . /app/
# ADD - 复制并支持URL和自动解压
ADD https://example.com/file.tar.gz /tmp/
ADD archive.tar.gz /app/
# 使用.dockerignore排除文件
# 创建.dockerignore文件:
# node_modules
# .git
# *.log
# 设置工作目录
WORKDIR /app
# 后续命令都在/app目录执行
COPY . .
RUN npm install
# 可以多次使用
WORKDIR /app/src
WORKDIR /app/dist
# 设置单个环境变量
ENV NODE_ENV production
# 设置多个环境变量
ENV APP_HOME=/app \
APP_PORT=8080 \
APP_USER=appuser
# 在后续指令中使用
WORKDIR $APP_HOME
EXPOSE $APP_PORT
# 声明容器监听的端口
EXPOSE 80
EXPOSE 443
EXPOSE 8080/tcp
EXPOSE 8081/udp
# 注意:EXPOSE只是声明,实际映射需要-p参数
# CMD - 容器启动时的默认命令(可被覆盖)
CMD ["python", "app.py"]
CMD ["nginx", "-g", "daemon off;"]
# ENTRYPOINT - 容器启动时的固定命令
ENTRYPOINT ["python", "app.py"]
# 组合使用
ENTRYPOINT ["python"]
CMD ["app.py"]
# 运行:docker run myimage server.py # 执行python server.py
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 设置环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
# 暴露端口
EXPOSE 5000
# 创建非root用户
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser
# 启动命令
CMD ["flask", "run", "--host=0.0.0.0"]
.dockerignore排除不必要的文件