我来为您详细介绍如何使用 Dockerfile 创建 Docker 容器。
1. Dockerfile 基本结构
首先创建一个 Dockerfile 文件:
# 指定基础镜像
FROM ubuntu:20.04
# 设置元数据
LABEL maintainer="your-email@example.com"
# 设置环境变量
ENV APP_HOME /app
ENV NODE_ENV production
# 设置工作目录
WORKDIR $APP_HOME
# 复制文件到容器中
COPY . $APP_HOME
# 运行命令安装依赖
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& pip3 install flask \
&& rm -rf /var/lib/apt/lists/*
# 暴露端口
EXPOSE 8080
# 容器启动时执行的命令
CMD ["python3", "app.py"]2. 构建 Docker 镜像
# 基本构建命令
docker build -t myapp:latest .
# 指定Dockerfile路径
docker build -t myapp:latest -f ./Dockerfile .
# 构建时不使用缓存
docker build --no-cache -t myapp:latest .
# 设置构建参数
docker build --build-arg NODE_ENV=production -t myapp:latest .3. 运行容器
# 基本运行
docker run myapp:latest
# 在后台运行
docker run -d --name myapp-container myapp:latest
# 映射端口
docker run -d -p 8080:8080 --name myapp myapp:latest
# 挂载卷
docker run -d -v /host/path:/container/path myapp:latest
# 设置环境变量
docker run -d -e NODE_ENV=production myapp:latest4. 完整的示例
示例 1: Node.js 应用
# Dockerfile
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]示例 2: Python Flask 应用
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]5. 多阶段构建示例
# 第一阶段:构建
FROM golang:1.19 AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/myapp
# 第二阶段:运行
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]6. Docker Compose 示例
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "8080:8080"
environment:
- NODE_ENV=production
volumes:
- ./app:/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example7. 常用命令
# 查看构建历史
docker history myapp:latest
# 查看容器日志
docker logs myapp-container
# 进入运行中的容器
docker exec -it myapp-container /bin/bash
# 查看容器信息
docker inspect myapp-container
# 停止和删除
docker stop myapp-container
docker rm myapp-container
docker rmi myapp:latest8. 最佳实践
使用 .dockerignore 文件
node_modules npm-debug.log .git .env *.md减少层数:合并多个 RUN 命令
使用特定标签:避免使用
latest使用非 root 用户
RUN groupadd -r appuser && useradd -r -g appuser appuser USER appuser健康检查
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1
评论区