docker学习整理

发布于:2025-03-19 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、Docker核心原理:像租房装修一样理解容器

1.1 容器 vs 虚拟机:合租 vs 买别墅
  • 虚拟机就像买别墅:每个别墅(虚拟机)自带独立地基(操作系统)、水电系统(系统资源),启动慢(分钟级)、资源占用大(GB级)[1][10]
  • 容器就像合租:大家共享小区基础设施(宿主机内核),但每个房间(容器)有自己的家具摆放(应用和依赖)。轻量(MB级)、秒级启动,还能随时搬走(迁移)[9]
1.2 镜像分层:乐高积木式打包

镜像就像装修设计图,由多层叠加而成:

  • 基础层:相当于毛坯房(如Ubuntu系统镜像)
  • 中间层:安装的软件(如Nginx、MySQL)
  • 可写层:入住后的个性化布置(如配置文件)
    每次修改只改动最上层,底层保持不变,节省存储空间且方便复用[3][6]
1.3 容器运行机制:隔离与资源管控
  • 命名空间:给每个容器发独立身份证(隔离进程、网络、文件系统)
  • 控制组(cgroups):物业管家(限制CPU/内存使用,防止邻居抢资源)
  • 联合文件系统:用透明玻璃隔断房间,看似独立实则共享基础层[1][10]

二、常用命令大全:开发者的瑞士军刀

2.1 镜像操作(装修材料管理)
docker pull nginx:1.21       # 去建材市场买材料(拉取镜像)
docker images                # 查看仓库库存(本地镜像列表)
docker rmi old-image         # 扔掉过期材料(删除镜像)[[4]()][[7]()]
2.2 容器管理(房间使用指南)
docker run -d -p 80:80 --name my_web nginx  # 按图纸装修入住(启动容器)
docker ps -a                 # 查看所有房间状态(容器列表)
docker exec -it my_web bash  # 进屋调试(进入运行中容器)[[5]()][[7]()]
2.3 数据持久化(重要物品寄存)
docker run -v /宿主机路径:/容器路径 mysql  # 租个保险柜(挂载数据卷)
docker volume ls             # 查看所有寄存柜(数据卷列表)[[9]()]

三、开发实战:从零搭建容器化项目

3.1 Dockerfile:装修说明书
FROM node:16                 # 基础户型(基础镜像)
WORKDIR /app                 # 指定工作区域 
COPY package*.json ./        # 搬家具(拷贝依赖文件)
RUN npm install              # 安装家电(构建命令)
EXPOSE 3000                  # 开放阳台(暴露端口)
CMD ["npm", "start"]         # 入住后的日常流程(启动命令)[[9]()]
3.2 Docker Compose:小区规划图
version: '3'
services:
  web:
    build: .
    ports: ["5000:5000"]
  redis:
    image: "redis:alpine"    # 一键部署整套服务(多容器编排)[[7]()]
3.3 开发调试技巧
  • 热更新:用-v把本地代码目录挂载到容器,改代码实时生效
  • 日志查看docker logs -f 容器名 实时监控房间动态
  • 一键清理docker system prune 定期大扫除[6][9]

四、进阶场景:容器化开发的正确姿势

4.1 CI/CD流水线
  • 构建阶段:Git提交触发自动打包镜像
  • 测试阶段:用临时容器跑自动化测试
  • 部署阶段:镜像推送到生产环境秒级更新[3][10]
4.2 微服务架构
  • 每个服务独立容器(如用户服务、订单服务)
  • 通过Docker网络互联(相当于小区内部电话)
  • 用Kubernetes管理大规模容器集群(物业总公司)[8]
4.3 常见坑点排查
  • 权限问题Permission denied → 尝试加--privileged参数
  • 端口冲突:检查-p参数是否被占用
  • 存储泄漏:定期清理无用镜像和容器[5][6]

五、为什么选择Docker?

  • 搬家方便:开发环境与生产环境完全一致
  • 资源节省:一台服务器能跑上百个容器
  • 标准化交付:再也不用说"在我电脑上是好的"[1][10]

附送命令行小抄:
查看容器资源占用:docker stats
导出容器快照:docker export > backup.tar
批量停止容器:docker stop $(docker ps -aq)[4][5]

通过这个指南,你已经掌握了Docker从原理到实战的核心知识。就像租房装修一样,多实践几次就能成为容器化老司机!遇到问题记得善用docker --help和社区文档,祝你在云原生世界里玩得愉快~