制作自己的 Docker 镜像文件(通常指 Dockerfile)是容器化应用的关键步骤。以下是详细的操作指南:
安装 Docker
docker --version
项目结构
myapp/
├── Dockerfile # 镜像构建文件
├── app.py # 示例应用代码
└── requirements.txt # Python依赖(如适用)
创建一个名为 Dockerfile
的文件(无扩展名),内容示例如下:
# 1. 选择基础镜像(根据需求替换)
FROM python:3.9-slim # 例如Python应用
# FROM nginx:alpine # 或Nginx镜像
# 2. 设置工作目录
WORKDIR /app
# 3. 复制文件到镜像中
COPY . . # 复制当前目录所有文件
# COPY app.py /app/ # 或单独复制文件
# 4. 安装依赖(根据语言调整)
RUN pip install --no-cache-dir -r requirements.txt
# RUN apt-get update && apt-get install -y some-package # 系统依赖
# 5. 暴露端口(可选)
EXPOSE 80 # 应用监听的端口
# 6. 定义启动命令
CMD ["python", "app.py"]
# CMD ["nginx", "-g", "daemon off;"]
在 Dockerfile
所在目录执行:
docker build -t my-custom-image:1.0 .
-t
:指定镜像名称和标签(格式:name:tag
).
:表示使用当前目录的 Dockerfile
查看镜像列表
docker images
运行测试容器
docker run -d -p 8080:80 --name my-container my-custom-image:1.0
-p 8080:80
:将容器内80端口映射到主机8080端口-d
:后台运行访问应用
打开浏览器访问 http://localhost:8080
(根据应用实际端口调整)。
登录 Docker Hub
docker login
标记镜像
docker tag my-custom-image:1.0 username/repo-name:tag
推送镜像
docker push username/repo-name:tag
使用轻量级基础镜像
alpine
或 slim
版本(例如 python:3.9-slim
)。减少镜像层数
合并多个 RUN
命令:
RUN apt-get update && \
apt-get install -y package1 package2 && \
rm -rf /var/lib/apt/lists/*
利用 .dockerignore
忽略不必要的文件(如 node_modules/
, .git/
):
.git
node_modules
*.log
多阶段构建(适用于编译型语言)
# 第一阶段:构建环境
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"]
镜像体积过大
apt-get
的缓存)。构建缓存失效
COPY . .
)放在 Dockerfile
尾部。权限问题
dockerfile
RUN useradd -m myuser && chown -R myuser /app
USER myuser
通过以上步骤,你可以高效地创建定制化的 Docker 镜像。根据实际需求调整 Dockerfile
中的指令即可。