
适用人群:开发、测试、运维、DevOps 工程师 目标:掌握 Docker 核心概念、常用命令、实战技巧与生产最佳实践 环境要求:Linux / macOS / Windows(WSL2)

💡 核心思想:一次构建,随处运行(Build Once, Run Anywhere)
FROM, RUN, COPY, EXPOSE...)
# Ubuntu
sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker
# CentOS
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start dockerdocker --version # 查看版本
docker run hello-world # 运行测试容器🔑 权限问题?将用户加入
docker组: sudo usermod -aG docker $USER && newgrp docker

app.py)from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Docker! "
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)requirements.txtFlask==2.3.2Dockerfile# 基础镜像
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖(使用国内源加速)
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]# 构建镜像(注意末尾的 . )
docker build -t my-flask-app .
# 运行容器(映射端口 5000:5000)
docker run -d -p 5000:5000 --name my-app my-flask-app
# 访问 http://localhost:5000
curl http://localhost:5000✅ 成功!你已掌握 Docker 核心工作流。
容器删除后数据丢失?用 Volume!
# 创建命名卷
docker volume create my-vol
# 挂载到容器
docker run -d -v my-vol:/app/data nginx
# 查看卷位置
docker volume inspect my-vol💡 最佳实践:数据库、日志、上传文件等必须用 Volume!
# 创建自定义网络
docker network create my-net
# 启动容器加入网络
docker run -d --network my-net --name db mysql
docker run -d --network my-net --name app my-flask-app
# 在 app 中可直接 ping db# Dockerfile 中设置默认值
ENV PORT=5000
# 运行时覆盖
docker run -e PORT=8080 my-app# 第一阶段:构建
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
# 第二阶段:运行
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
CMD ["node", "server.js"]⚡ 镜像体积减少 70%+!
docker-compose.ymlversion: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- REDIS_HOST=redis
depends_on:
- redis
redis:
image: redis:alpine
volumes:
- redis-data:/data
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web
volumes:
redis-data:docker-compose up -d # 后台启动
docker-compose logs -f web # 查看日志
docker-compose down # 停止并删除✅ 一行命令管理复杂应用!
不要用 root 用户运行容器
RUN adduser -D myuser
USER myuser扫描镜像漏洞
docker scan my-app最小化基础镜像:优先用 -alpine 或 distroless
.dockerignore:排除无关文件(如 .git, node_modules)
合并 RUN 指令:减少镜像层数
# ❌ 错误
RUN apt update
RUN apt install -y curl
# ✅ 正确
RUN apt update && apt install -y curl && rm -rf /var/lib/apt/lists/*my-app:v1.2.0 而非 latestdocker logs <container> # 查看错误日志
docker run -it --rm my-app sh # 进入调试模式lsof -i :5000 # Linux/macOS
netstat -ano | findstr :5000 # Windows使用 dive 分析镜像层:
dive my-appdocker network inspect my-net # 检查 IP 分配
docker exec -it app ping redis # 测试连通性
Docker 不是银弹,但它是现代软件交付的基石技术。掌握它,你将:
记住: “Don’t learn Docker to use Docker. Learn Docker to ship better software.”
附:速查 Cheat Sheet 📥 下载 PDF 版命令速查表 🐙 GitHub 示例代码仓库
现在,打开终端,输入 docker run -it ubuntu bash,开始你的容器之旅吧! 🐳