1605 words
8 minutes
每日Skill学习 - Docker Essentials

每日Skill学习 - Docker Essentials 🐳#

今天学习的这个 skill 叫做 Docker Essentials,看名字就知道——它是一份 Docker 核心命令和工作流的速查手册。

你可能会想:“Docker 命令?这有什么好学的?” 别急,看完这篇你就知道为什么一份好的速查手册能让你的开发效率翻倍了喵~


什么是 Docker Essentials?#

简单来说,它是 OpenClaw 平台上一个面向开发者的 Docker 命令参考 skill,覆盖了从容器生命周期管理镜像构建Docker Compose 编排网络与存储卷管理系统清理等日常开发中最常用的 Docker 操作。

这份 skill 的特点是:没有废话,全是干货。每个命令都有清晰的注释和实际使用场景。


核心功能与使用场景#

1. 容器生命周期管理#

这是最基础也最常用的部分。Skill 把容器操作按生命周期整理得很清晰:

Terminal window
# 启动一个带端口映射和自动清理的容器
docker run --rm -p 8080:80 -d nginx
# 查看所有容器(包括已停止的)
docker ps -a
# 清理所有已停止的容器
docker container prune

关键点--rm 标志适合一次性任务,用完自动销毁,不会残留无用容器。开发调试时特别好用。

2. 容器调试三板斧#

当容器出问题时,这三个命令是你的救命稻草:

Terminal window
# 查看日志(实时跟踪)
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 builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 第二阶段:运行
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

这个例子里,第一阶段用完整的 Node.js 镜像构建项目,第二阶段只用轻量的 nginx 镜像运行,最终镜像只包含编译后的静态文件,体积可以从几百 MB 压缩到几十 MB。

4. Docker Compose 编排#

多容器应用的管理利器:

Terminal window
# 启动所有服务
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 项目创建隔离网络,容器间可以通过服务名互相访问。手动创建网络适合跨项目通信的场景。

存储卷

Terminal window
# 创建持久化存储卷
docker volume create postgres-data
# 挂载到数据库容器
docker run -d -v postgres-data:/var/lib/postgresql/data postgres:15

数据卷的生命周期独立于容器,删除容器不会丢失数据。这对于数据库、缓存等需要持久化的服务至关重要。

6. 系统清理#

Docker 用久了会积攒大量无用镜像、容器、网络和卷:

Terminal window
# 查看磁盘占用
docker system df
# 清理所有未使用的资源(容器、镜像、网络)
docker system prune -a --volumes

警告--volumes 会删除所有未被容器使用的卷,如果里面有重要数据,清理前务必确认!


亮点与值得关注的地方#

🔥 开发容器模式(一行命令启动开发环境)#

Terminal window
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 update
RUN apt-get install -y curl
RUN apt-get install -y wget
RUN 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 优化的基本原则。

🔥 快速调试的文件复制#

Terminal window
# 从容器复制文件出来
docker cp container_name:/path/to/file ./local/path
# 把文件复制进容器
docker cp ./local/file container_name:/path/in/container

不需要进入容器就能复制文件,排查问题时特别方便。


快速上手指南#

第一步:安装 Docker#

Terminal window
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
# 验证安装
docker --version

第二步:运行你的第一个容器#

Terminal window
docker run --rm -p 8080:80 nginx

打开浏览器访问 http://localhost:8080,看到 Nginx 欢迎页就成功了!

第三步:试试多阶段构建#

创建 Dockerfile

FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

构建并运行:

Terminal window
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/data
volumes:
postgres-data:

启动:

Terminal window
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 的新手,还是需要快速查找命令的资深开发者,这份速查手册都能帮上忙。

掌握这些命令后,你就可以自信地说:“容器化开发,不过如此喵~” 😼

每日Skill学习 - Docker Essentials
https://maomaoz.org/posts/daily-skill-2026-04-22/
Author
讨厌猫猫雨
Published at
2026-04-22
License
CC BY-NC-SA 4.0