核心注意事项
以下是针对 Docker 初学者的核心注意事项,涵盖常见误区、安全性和实用技巧,帮助快速上手并避免“踩坑”
1.理解核心概念
镜像(Image):只读模板(如 Ubuntu + Nginx 的预装环境),不可修改,通过 Dockerfile 构建。
容器(Container):镜像的运行实例,可读写,但停止后默认丢失数据(需挂载卷持久化)。
仓库(Registry):存放镜像的仓库,默认是 Docker Hub(类似 GitHub)。
关键区别:容器不是虚拟机!它共享主机内核,更轻量但隔离性较弱。
2. 避免常见错误
不要用 sudo 运行 Docker
将用户加入 docker 组(sudo usermod -aG docker $USER),否则需 sudo 执行命令,可能引发权限混乱。
不要直接使用 latest 标签
明确指定镜像版本(如 nginx:1.23-alpine),避免因版本更新导致意外行为。
不要将数据留在容器内
容器停止后数据会丢失,务必挂载卷(Volume) 或绑定主机目录
docker run -v /宿主机路径:/容器内路径 nginx
3. 优化镜像构建
减少镜像层数
合并多个 RUN 命令,用 && 连接:
RUN apt update && apt install -y curl && rm -rf /var/lib/apt/lists/*
使用 .dockerignore 文件
排除无关文件(如 node_modules),加速构建并减小镜像体积。
选择合适的基础镜像
优先使用官方镜像(如 alpine 版本),避免臃肿:
FROM python:3.9-slim # 而非 python:3.9
4. 管理容器生命周期
清理无用资源
定期删除停止的容器、悬空镜像和未使用的卷:
docker system prune -fowershell
限制容器资源
防止单个容器耗尽主机资源:
docker run --memory=512m --cpus=1 nginx
使用 docker-compose 管理多容器
用 YAML 文件定义服务依赖,替代手动启动:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
5. 安全与最佳实践
不要以 root 用户运行容器
在 Dockerfile 中切换为非特权用户:
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
避免暴露敏感信息
用环境变量或 Docker Secrets 传递密码,而非硬编码在镜像中:
docker run -e MYSQL_PASSWORD=secret mysql
定期更新镜像
检查基础镜像和依赖库的安全漏洞:
docker scan nginx:1.23-alpine # 使用 Docker 安全扫描
6. 学习资源推荐
官方文档:Docker Docs(最权威的参考)
交互式教程:Play with Docker(免费在线练习环境)
可视化工具:Portainer(管理容器的 GUI 工具,适合新手)
关键原则
从简单场景开始(如单容器 Web 服务),逐步掌握网络、存储和编排(如 Kubernetes),避免过早陷入复杂架构。