当前内容已经是 Markdown 格式,若要优化,可在一些细节上调整,如部分代码块格式、表格样式等,使其更规范易读。
一、前言:为什么多数人学 Docker 会走弯路?
新手学 Docker 常陷入两个误区:要么死记硬背命令却不懂原理,要么沉迷底层源码忽略实操。其实 Docker 的核心是 “用起来”—— 本文结合 100 + 实操踩坑经验,整理出可落地的 3 天学习路径,配合高频命令速查表和实战案例,让你避开 90% 的无效学习。
二、Day1:基础筑基 —— 搞定环境与核心概念(2 小时通关)
1. 环境搭建:3 大系统避坑指南
环境是入门第一道坎,不同系统适配方案不同,直接照搬官方文档易踩坑:
| 系统 | 核心问题 | 解决方案(附命令) |
|---|---|---|
| Ubuntu | 依赖包找不到(unable to locate package) | 更换阿里云源 + 强制更新sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list<br>sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io |
| Windows 10 Home | 虚拟化未启用导致安装失败 | 1. 管理员 PowerShell 执行:wsl --install2. BIOS 开启 VT-x/AMD-V 虚拟化 |
| macOS | 与 VirtualBox 冲突启动失败 | 卸载 VirtualBox + 清理残留sudo rm -rf /Applications/VirtualBox.app |
验证技巧:安装后执行bash
docker run hello-world,出现 “Hello from Docker!” 即成功(国内用户先配镜像源,见下文)
2. 核心概念:3 分钟吃透 3 大组件
不用死记定义,用 “手机应用” 类比瞬间理解:
- 镜像(Image):≈微信安装包(只读模板,含代码 + 依赖)✅ 关键特性:分层存储(复用公共层,如多个 Java 镜像共享 JDK 层)
- 容器(Container):≈运行中的微信(镜像的可运行实例)✅ 核心技术:Linux Namespaces(进程隔离)+ cgroups(资源限制)
- 仓库(Registry):≈应用商店(存储镜像)✅ 国内优选:阿里云镜像仓库(
https://xxxx.mirror.aliyuncs.com,需自己注册获取)
配置国内镜像源(解决拉取慢问题):
创建/etc/docker/daemon.json(Linux/macOS)或在 Docker Desktop 设置中添加:json
{ "registry-mirrors": ["https://docker.registry.cyou", "https://dockercf.jsdelivr.fyi"] }
重启服务:bash
sudo systemctl restart docker
三、Day2:实操突破 —— 高频命令与镜像构建(4 小时实战)
1. 命令速查表:只记 20 个够用 90% 场景
| 场景分类 | 核心命令(附示例) | 关键参数说明 |
|---|---|---|
| 镜像操作 | 拉取:docker pull redis:7.0查看:docker images删除:docker rmi redis:7.0 |
:7.0指定版本,无则拉 latest |
| 容器操作 | 启动:docker run -d -p 6379:6379 --name myredis redis:7.0进入:docker exec -it myredis /bin/bash停止:docker stop myredis |
-d后台运行,-p端口映射 |
| 批量管理 | 清理停止容器:docker rm $(docker ps -aq)删除无用镜像:docker image prune -a |
-aq列出所有容器 ID,-a删除无标签镜像 |
2. Dockerfile:从零构建自定义镜像(实战案例)
以 Node.js 应用为例,写一个生产级 Dockerfile(附优化技巧):dockerfile
# 阶段1:构建依赖(多阶段构建减小体积)FROM node:18-alpine AS builderWORKDIR /appCOPY package.json package-lock.json ./# 无缓存安装依赖(避免镜像臃肿)RUN npm install --no-cache# 阶段2:生产环境FROM node:18-alpineWORKDIR /app# 复制构建产物(仅需依赖,不含源码)COPY --from=builder /app/node_modules ./node_modulesCOPY src ./src# 暴露端口(文档作用,非实际映射)EXPOSE 3000# 启动命令(用exec格式,保证信号传递)CMD ["node", "src/index.js"]
构建命令:bash
docker build -t my-node-app:1.0 .(
.代表构建上下文路径)
避坑点:.dockerignore文件排除node_modules、.git 等无用文件,否则构建变慢
四、Day3:进阶提升 —— 多容器编排与数据持久化(3 小时通关)
1. Docker Compose:一行命令启动多容器应用
当需要同时运行 Node+MySQL 时,用 Compose 替代繁琐的docker run命令。创建compose.yaml:yaml
version: '3.8'services:app:image: my-node-app:1.0ports:- "3000:3000"environment:- MYSQL_HOST=mysqldepends_on: # 解决服务依赖问题- mysqlmysql:image: mysql:8.0environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=todosvolumes:- mysql-data:/var/lib/mysql # 数据持久化(避免容器删除数据丢失)volumes:mysql-data: # 自动创建命名卷
核心命令:
启动:docker compose up -d(后台运行)停止:docker compose down -v(-v删除卷,生产环境慎用)
2. 数据持久化:3 种方案对比(新手必看)
| 方案 | 用法示例 | 适用场景 |
|---|---|---|
| 命名卷 | volumes: - mysql-data:/path |
生产环境(安全稳定) |
| 绑定挂载 | volumes: - ./data:/var/lib/mysql |
开发环境(实时同步代码) |
| 临时文件系统 | tmpfs: /tmp |
临时数据(如日志缓存) |
避坑点:绑定挂载路径必须用绝对路径(Linux/macOS),Windows 用
C:/data格式
五、实战项目:10 分钟部署 WordPress 博客(检验成果)
bash
# 1. 创建compose.yamlcat > compose.yaml << EOFversion: '3'services:wordpress:image: wordpress:latestports:- "8080:80"environment:- WORDPRESS_DB_HOST=db- WORDPRESS_DB_PASSWORD=wp123volumes:- wp-data:/var/www/htmldb:image: mysql:5.7environment:- MYSQL_ROOT_PASSWORD=wp123- MYSQL_DATABASE=wordpressvolumes:- db-data:/var/lib/mysqlvolumes:wp-data:db-data:EOF# 2. 启动服务docker compose up -d
访问http://localhost:8080即可配置博客,数据自动持久化,重启容器不丢失。
六、避坑指南:新手最易踩的 5 个坑及解决方案
- 端口冲突:启动容器报错
port is already allocated✅ 解决:netstat -tulpn | grep 端口号查占用进程,kill 或换端口 - 数据丢失:容器删除后数据没了✅ 解决:必须用卷(volumes)挂载数据目录,禁用
--rm参数 - 镜像臃肿:构建的镜像几百 MB✅ 解决:用多阶段构建 + Alpine 基础镜像(比 Ubuntu 小 80%)
- 日志过大:容器日志占满磁盘✅ 解决:truncate 清理运行中容器日志:
truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名) - 网络不通:容器间无法通信✅ 解决:Compose 自动创建网络,非 Compose 容器需手动加入同一网络:
docker network connect 网络名 容器名
七、进阶资源推荐(按学习阶段划分)
| 阶段 | 资源类型 | 推荐内容 |
|---|---|---|
| 基础 | 在线演练场 | Play with Docker(training.play-with-docker.com,浏览器直接练) |
| 进阶 | 官方文档 | Docker Compose 教程(docs.docker.com/get-started/workshop/08_using_compose) |
| 实战 | 项目案例 | 阿里云容器服务博客(yq.aliyun.com/teams/11,含微服务部署方案) |
| 面试 | 核心原理 | 《理解 Docker 容器的进程管理》《容器健康检查机制》 |
