侧边栏壁纸
博主头像
ZHD的小窝博主等级

行动起来,活在当下

  • 累计撰写 108 篇文章
  • 累计创建 55 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Dockerfile

江南的风
2025-12-15 / 0 评论 / 0 点赞 / 1 阅读 / 4386 字 / 正在检测是否收录...

我来为您详细介绍如何使用 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:latest

4. 完整的示例

示例 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: example

7. 常用命令

# 查看构建历史
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:latest

8. 最佳实践

  1. 使用 .dockerignore 文件

    node_modules
    npm-debug.log
    .git
    .env
    *.md
  2. 减少层数:合并多个 RUN 命令

  3. 使用特定标签:避免使用 latest

  4. 使用非 root 用户

    RUN groupadd -r appuser && useradd -r -g appuser appuser
    USER appuser
  5. 健康检查

    HEALTHCHECK --interval=30s --timeout=3s \
      CMD curl -f http://localhost/ || exit 1

0

评论区