Docker 学习手册
Docker 用户手册
官方文档入口
英文原版: https://docs.docker.com/
中文社区版: https://docs.docker.cn/
安装docker
Windows (Docker Desktop)
https://www.docker.com/products/docker-desktop
Linux (Ubuntu)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
验证安装
docker --version
docker run hello-world
基本概念理解
镜像(Image): 只读模板,包含运行应用所需的所有内容
容器(Container): 镜像的运行实例
仓库(Registry): 存储镜像的地方(Docker Hub)
日常使用命令
镜像管理
# 搜索镜像
docker search nginx# 拉取镜像
docker pull nginx:alpine# 查看本地镜像
docker images# 删除镜像
docker rmi nginx:alpine# 构建镜像
docker build -t myapp:1.0 .# 导出镜像
docker save -o myapp.tar myapp:1.0# 导入镜像
docker load -i myapp.tar
容器管理
# 运行容器
docker run -d --name my-nginx -p 80:80 nginx:alpine# 查看运行中的容器
docker ps# 查看所有容器
docker ps -a# 停止容器
docker stop my-nginx# 启动容器
docker start my-nginx# 重启容器
docker restart my-nginx# 进入容器
docker exec -it my-nginx /bin/sh# 查看容器日志
docker logs my-nginx# 实时查看日志
docker logs -f my-nginx# 删除容器
docker rm my-nginx# 强制删除运行中的容器
docker rm -f my-nginx
Dockerfile 详解
# 指定基础镜像
FROM node:16-alpine# 设置工作目录
WORKDIR /app# 复制文件
COPY package*.json ./
COPY . .# 运行命令
RUN npm install# 设置环境变量
ENV NODE_ENV=production# 暴露端口
EXPOSE 3000# 定义启动命令
CMD ["npm", "start"]
最佳实践
# 使用官方镜像
FROM node:16-alpine# 使用标签
LABEL maintainer="your-email@example.com"# 使用非root用户
RUN addgroup -g 1001 -S appgroup && \adduser -S appuser -u 1001# 多阶段构建
FROM node:16-alpine AS builder
WORKDIR /app
COPY . .
RUN npm run buildFROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
Docker Compose
# docker-compose.yml
version: '3.8'
services:web:build: .ports:- "3000:3000"environment:- DATABASE_URL=postgres://user:pass@db:5432/mydbdepends_on:- dbdb:image: postgres:13environment:POSTGRES_DB: mydbPOSTGRES_USER: userPOSTGRES_PASSWORD: passvolumes:- db_data:/var/lib/postgresql/datavolumes:db_data:
数据管理
# 创建卷
docker volume create mydata# 查看卷
docker volume ls# 查看卷详情
docker volume inspect mydata# 删除卷
docker volume rm mydata# 清理未使用卷
docker volume prune
使用示例
# 使用命名卷
docker run -d -v mydata:/app/data myapp# 使用绑定挂载
docker run -d -v /host/path:/container/path myapp# 使用只读挂载
docker run -d -v /host/path:/container/path:ro myapp
网络管理
网络命令
# 查看网络
docker network ls# 创建网络
docker network create mynetwork# 查看网络详情
docker network inspect mynetwork# 连接容器到网络
docker network connect mynetwork mycontainer# 断开网络连接
docker network disconnect mynetwork mycontainer# 删除网络
docker network rm mynetwork
网络示例
# 创建自定义网络
docker network create app-network# 运行容器并加入网络
docker run -d --name web --network app-network nginx
docker run -d --name db --network app-network redis
安全最佳实践
安全配置
# 使用非root用户
FROM node:16-alpine
RUN adduser -D -u 1001 appuser
USER appuser# 定期更新基础镜像
FROM node:16-alpine# 扫描安全漏洞
# 使用 docker scan myimage
运行时安全
# 限制资源
docker run -d \--memory=512m \--cpus=1.0 \--user=1001:1001 \myapp# 只读根文件系统
docker run -d \--read-only \--tmpfs /tmp \myapp
Docker桌面版特定功能
Windows/macOS 特有功能
- 1、图形化界面管理
- 2、WSL2 集成 (Windows)
- 3、文件共享配置
- 4、资源限制设置
- 5、Kubernetes 集成
配置示例
// Docker Desktop settings.json
{"features": {"buildkit": true},"registry-mirrors": ["https://registry.docker-cn.com"]
}
故障排除
常用诊断命令
# 查看系统信息
docker system info# 查看磁盘使用
docker system df# 查看详细磁盘使用
docker system df -v# 查看事件
docker system events# 性能监控
docker stats
容器内进程
docker top container_name
日志和调试
# 查看容器日志
docker logs container_name# 实时日志
docker logs -f container_name# 检查容器配置
docker inspect container_name# 复制文件
docker cp container_name:/path/file.txt ./
docker cp file.txt container_name:/path/
生产环境建议
部署最佳实践
- 1、使用编排工具: Docker Swarm 或 Kubernetes
- 2、日志管理: 配置日志驱动和轮转
- 3、监控告警: 设置资源监控和自动恢复
- 4、备份策略: 定期备份重要数据卷
- 5、安全扫描: 定期扫描镜像漏洞
性能优化
# 限制资源使用
docker run -d \--memory=1g \--memory-swap=2g \--cpus=2.0 \--blkio-weight=500 \myapp# 使用健康检查
HEALTHCHECK --interval=30s --timeout=3s \CMD curl -f http://localhost/health || exit 1
获取帮助
社区资源
- 1、Docker 官方论坛: https://forums.docker.com/
- 2、Stack Overflow: 使用 [docker] 标签
- 3、GitHub Issues: https://github.com/docker
- 4、中文社区: Docker 中文社区网站
学习资源
- 1、Docker 官方教程: https://docs.docker.com/get-started/
- 2、Play with Docker: 在线练习环境
- 3、Docker 样本项目: https://github.com/docker/labs
