制作 Docker 镜像文件通常有两种主要方式:通过 Dockerfile 构建(推荐方式)或通过 docker commit 从现有容器创建。以下是详细步骤和最佳实践:
在项目根目录创建一个名为 Dockerfile 的文件(无扩展名),内容示例如下:
# 基础镜像(例如:Ubuntu、Alpine、Python 官方镜像等)
FROM ubuntu:22.04
# 维护者信息(可选)
LABEL maintainer="yourname@example.com"
# 更新系统并安装依赖(示例)
RUN apt-get update && apt-get install -y \
python3 \
nginx \
&& rm -rf /var/lib/apt/lists/*
# 复制本地文件到镜像中
COPY ./app /app
WORKDIR /app
# 设置环境变量
ENV PYTHONPATH=/app
# 暴露端口
EXPOSE 80
# 容器启动时执行的命令
CMD ["python3", "app.py"]
在 Dockerfile 所在目录运行以下命令:
docker build -t your-image-name:tag .
-t:指定镜像名称和标签(如 myapp:v1)。.:表示使用当前目录的 Dockerfile。docker images # 查看已构建的镜像
docker run -d -p 80:80 your-image-name # 测试运行
docker commit 创建(适合临时调试)bash
docker run -it ubuntu:22.04 /bin/bashbash
apt update && apt install -y curlbash
docker commit <container-id> your-image-name:tag精简镜像:
multi-stage build)减少最终镜像大小。示例:
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
减少层数:
RUN 命令(用 && 连接)。安全:
root 用户运行容器:
dockerfile
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser使用 .dockerignore:
.gitignore),加速构建。bash
docker save -o myimage.tar your-image-name:tagbash
docker load -i myimage.tar--no-cache 参数:
bash
docker build --no-cache -t your-image-name .bash
docker run -it <failed-image-id> /bin/sh通过以上步骤,你可以高效地创建符合需求的 Docker 镜像。推荐始终使用 Dockerfile 以保证可重复性和版本控制。