制作 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/bash
bash
apt update && apt install -y curl
bash
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:tag
bash
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
以保证可重复性和版本控制。