每日Skill学习 - Docker Essentials 🐳
今天学习的这个 skill 叫做 Docker Essentials,看名字就知道——它是一份 Docker 核心命令和工作流的速查手册。
你可能会想:“Docker 命令?这有什么好学的?” 别急,看完这篇你就知道为什么一份好的速查手册能让你的开发效率翻倍了喵~
什么是 Docker Essentials?
简单来说,它是 OpenClaw 平台上一个面向开发者的 Docker 命令参考 skill,覆盖了从容器生命周期管理到镜像构建、Docker Compose 编排、网络与存储卷管理、系统清理等日常开发中最常用的 Docker 操作。
这份 skill 的特点是:没有废话,全是干货。每个命令都有清晰的注释和实际使用场景。
核心功能与使用场景
1. 容器生命周期管理
这是最基础也最常用的部分。Skill 把容器操作按生命周期整理得很清晰:
# 启动一个带端口映射和自动清理的容器docker run --rm -p 8080:80 -d nginx
# 查看所有容器(包括已停止的)docker ps -a
# 清理所有已停止的容器docker container prune关键点:--rm 标志适合一次性任务,用完自动销毁,不会残留无用容器。开发调试时特别好用。
2. 容器调试三板斧
当容器出问题时,这三个命令是你的救命稻草:
# 查看日志(实时跟踪)docker logs -f --tail 100 container_name
# 进入容器内部docker exec -it container_name bash
# 查看容器资源占用docker stats亮点:docker exec 支持指定用户 (-u root) 和工作目录 (-w /app),在调试权限问题时非常有用。
3. 镜像构建与多阶段构建
多阶段构建是 Docker 中最值得掌握的技巧之一,它能显著减小最终镜像体积:
# 第一阶段:构建FROM node:18 AS builderWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run build
# 第二阶段:运行FROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/html这个例子里,第一阶段用完整的 Node.js 镜像构建项目,第二阶段只用轻量的 nginx
4. Docker Compose 编排
多容器应用的管理利器:
# 启动所有服务docker-compose up -d
# 查看服务状态docker-compose ps
# 重建并重启某个服务docker-compose up -d --build web
# 水平扩展(启动3个 web 实例)docker-compose up -d --scale web=3注意:--scale 需要服务没有绑定固定端口,否则端口冲突会启动失败。
5. 网络与存储卷
网络:Docker 默认会为每个 Compose 项目创建隔离网络,容器间可以通过服务名互相访问。手动创建网络适合跨项目通信的场景。
存储卷:
# 创建持久化存储卷docker volume create postgres-data
# 挂载到数据库容器docker run -d -v postgres-data:/var/lib/postgresql/data postgres:15数据卷的生命周期独立于容器,删除容器不会丢失数据。这对于数据库、缓存等需要持久化的服务至关重要。
6. 系统清理
Docker 用久了会积攒大量无用镜像、容器、网络和卷:
# 查看磁盘占用docker system df
# 清理所有未使用的资源(容器、镜像、网络)docker system prune -a --volumes警告:--volumes 会删除所有未被容器使用的卷,如果里面有重要数据,清理前务必确认!
亮点与值得关注的地方
🔥 开发容器模式(一行命令启动开发环境)
docker run -it --rm \ -v $(pwd):/app \ -w /app \ -p 3000:3000 \ node:18 \ npm run dev这行命令的精髓在于:
-v $(pwd):/app把当前目录挂载到容器内,代码修改实时生效-w /app设置工作目录,不用每次cd--rm退出后自动清理,不留痕迹- 不需要在本地安装 Node.js,直接用容器里的环境
🔥 .dockerignore 的重要性
Skill 提到了 .dockerignore 文件,这往往被初学者忽略。它的作用类似于 .gitignore,排除不需要的文件(如 node_modules、.git、环境变量文件等),能大幅减少构建上下文的大小,加快构建速度。
🔥 合并 RUN 指令减少层数
# ❌ 不好的写法(产生4个层)RUN apt-get updateRUN apt-get install -y curlRUN apt-get install -y wgetRUN rm -rf /var/lib/apt/lists/*
# ✅ 好的写法(只产生1个层)RUN apt-get update && \ apt-get install -y curl wget && \ rm -rf /var/lib/apt/lists/*每个 RUN 指令都会创建一个新的镜像层,层数越多镜像越大。合并相关的操作是 Dockerfile 优化的基本原则。
🔥 快速调试的文件复制
# 从容器复制文件出来docker cp container_name:/path/to/file ./local/path
# 把文件复制进容器docker cp ./local/file container_name:/path/in/container不需要进入容器就能复制文件,排查问题时特别方便。
快速上手指南
第一步:安装 Docker
# Ubuntu/Debiancurl -fsSL https://get.docker.com | sh
# 验证安装docker --version第二步:运行你的第一个容器
docker run --rm -p 8080:80 nginx打开浏览器访问 http://localhost:8080,看到 Nginx 欢迎页就成功了!
第三步:试试多阶段构建
创建 Dockerfile:
FROM node:18 AS builderWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run build
FROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]构建并运行:
docker build -t myapp:1.0 .docker run -d -p 8080:80 --name myapp myapp:1.0第四步:用 Docker Compose 管理多服务
创建 docker-compose.yml:
version: "3.8"services: web: build: . ports: - "8080:80" depends_on: - db db: image: postgres:15 environment: POSTGRES_PASSWORD: secret POSTGRES_DB: mydb volumes: - postgres-data:/var/lib/postgresql/datavolumes: postgres-data:启动:
docker-compose up -d小结
| 功能 | 核心命令 | 使用场景 |
|---|---|---|
| 容器管理 | docker run/stop/rm | 日常启停容器 |
| 日志调试 | docker logs -f | 排查运行时问题 |
| 进入容器 | docker exec -it | 调试、查看内部状态 |
| 镜像构建 | docker build + 多阶段 | 减小镜像体积 |
| 多服务编排 | docker-compose | 开发/测试环境一键启动 |
| 数据持久化 | docker volume | 数据库、缓存数据不丢失 |
| 系统清理 | docker system prune | 释放磁盘空间 |
Docker Essentials 虽然是一份命令参考,但把日常开发中最实用的操作都整理到位了。不管是刚接触 Docker 的新手,还是需要快速查找命令的资深开发者,这份速查手册都能帮上忙。
掌握这些命令后,你就可以自信地说:“容器化开发,不过如此喵~” 😼