[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"menus-public":3,"blog-10050":83,"blog-10050-comments":92},[4,15,43,66],{"id":5,"title":6,"link":7,"icon":8,"target":9,"sort_order":10,"is_active":11,"parent_id":12,"created_at":13,"children":14},10001,"首页","\u002F","","_blank",0,true,null,"2026-04-04T12:03:45",[],{"id":16,"title":17,"link":18,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":12,"created_at":21,"children":22},10038,"墨言博客","\u002Fblog","_self",1,"2026-10-30T23:08:14",[23,29,36],{"id":24,"title":25,"link":26,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":16,"created_at":27,"children":28},10039,"技术前沿","\u002Fblog?category=10001","2026-10-30T23:10:46",[],{"id":30,"title":31,"link":32,"icon":8,"target":19,"sort_order":33,"is_active":11,"parent_id":16,"created_at":34,"children":35},10042,"生活随笔","\u002Fblog?category=20007",2,"2026-10-30T23:55:19",[],{"id":37,"title":38,"link":39,"icon":8,"target":19,"sort_order":40,"is_active":11,"parent_id":16,"created_at":41,"children":42},10043,"旅游日记","\u002Fblog?category=20006",3,"2026-10-31T00:00:11",[],{"id":33,"title":44,"link":45,"icon":8,"target":19,"sort_order":33,"is_active":11,"parent_id":12,"created_at":46,"children":47},"新闻中心","\u002Fnews","2026-10-24T19:09:40",[48,54,60],{"id":49,"title":50,"link":51,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":33,"created_at":52,"children":53},10046,"产品动态","\u002Fnews?category=20010","2026-10-31T00:17:38",[],{"id":55,"title":56,"link":57,"icon":8,"target":19,"sort_order":33,"is_active":11,"parent_id":33,"created_at":58,"children":59},10047,"新闻热点","\u002Fnews?category=20009","2026-10-31T00:17:55",[],{"id":61,"title":62,"link":63,"icon":8,"target":19,"sort_order":40,"is_active":11,"parent_id":33,"created_at":64,"children":65},10045,"公司动态","\u002Fnews?category=20008","2026-10-31T00:17:11",[],{"id":67,"title":68,"link":69,"icon":8,"target":19,"sort_order":67,"is_active":11,"parent_id":12,"created_at":46,"children":70},4,"精彩视频","\u002Fvideo",[71,77],{"id":72,"title":73,"link":74,"icon":8,"target":19,"sort_order":10,"is_active":11,"parent_id":67,"created_at":75,"children":76},13,"活动记录","\u002Fvideo?category=6","2026-10-25T21:04:39",[],{"id":78,"title":79,"link":80,"icon":8,"target":19,"sort_order":20,"is_active":11,"parent_id":67,"created_at":81,"children":82},11,"产品展示","\u002Fvideo?category=5","2026-10-25T21:02:59",[],{"id":84,"category_id":5,"title":85,"author":8,"summary":86,"cover":87,"content":88,"tags":8,"seo_title":8,"seo_description":8,"seo_keywords":8,"og_image":8,"views":89,"comment_count":10,"is_top":90,"is_published":11,"created_at":91},10050,"Docker 命令使用教程","Docker 是一个开源的容器化平台，它把应用及其依赖打包成一个镜像（Image），运行起来就是容器（Container)。","\u002Fstatic\u002Fuploads\u002Fblogs\u002F1792563241353-504883897.jpg","# Docker 命令使用教程\n\n> 面向初学者与日常使用者的 Docker 命令行速查与详解手册。\n> 涵盖镜像、容器、网络、数据卷、Compose 以及实用技巧。\n\n---\n\n## 目录\n\n1. [Docker 简介](#1-docker-简介)\n2. [命令通用格式](#2-命令通用格式)\n3. [镜像管理命令](#3-镜像管理命令)\n4. [容器管理命令](#4-容器管理命令)\n5. [容器内操作与日志](#5-容器内操作与日志)\n6. [数据卷（Volume）命令](#6-数据卷volume命令)\n7. [网络（Network）命令](#7-网络network命令)\n8. [系统维护与清理命令](#8-系统维护与清理命令)\n9. [Docker Compose 命令](#9-docker-compose-命令)\n10. [Dockerfile 常用指令](#10-dockerfile-常用指令)\n11. [实用技巧与常见问题](#11-实用技巧与常见问题)\n12. [命令速查表](#12-命令速查表)\n\n---\n\n## 1. Docker 简介\n\nDocker 是一个开源的容器化平台，它把应用及其依赖打包成一个**镜像（Image）**，运行起来就是**容器（Container）**。\n\n核心概念：\n\n| 概念 | 说明 |\n| --- | --- |\n| 镜像 Image | 只读模板，包含应用与依赖，是容器的“源代码” |\n| 容器 Container | 镜像的运行实例，可启动、停止、删除 |\n| 仓库 Registry | 存放镜像的地方，如 Docker Hub |\n| 数据卷 Volume | 用于持久化容器数据的存储 |\n| 网络 Network | 容器之间、容器与外部通信的通道 |\n\n查看版本与环境信息：\n\n```bash\ndocker --version          # 查看 Docker 版本\ndocker version            # 查看客户端与服务端详细版本\ndocker info               # 查看 Docker 系统信息（镜像数、容器数、存储驱动等）\n```\n\n---\n\n## 2. 命令通用格式\n\nDocker 命令遵循统一格式：\n\n```bash\ndocker [子命令] [选项] [参数]\n```\n\n- **子命令**：如 `run`、`ps`、`images`\n- **选项**：一般以 `-` 或 `--` 开头，如 `-d`、`--name`\n- **参数**：操作对象，如镜像名、容器名\n\n查看帮助：\n\n```bash\ndocker --help             # 查看所有子命令\ndocker run --help         # 查看某个子命令的帮助\ndocker images help        # 部分子命令也可用 help 查看\n```\n\n---\n\n## 3. 镜像管理命令\n\n### 3.1 拉取镜像\n\n```bash\ndocker pull nginx                # 拉取最新版（latest）\ndocker pull nginx:1.25           # 拉取指定版本\ndocker pull nginx:1.25-alpine    # 拉取 alpine 精简版\n```\n\n### 3.2 查看本地镜像\n\n```bash\ndocker images                    # 列出本地所有镜像\ndocker images nginx              # 只列出 nginx 相关镜像\ndocker image ls -a               # 同上（新语法）\n```\n\n### 3.3 搜索镜像\n\n```bash\ndocker search nginx              # 在 Docker Hub 搜索镜像\ndocker search --filter stars=100 nginx   # 按星标过滤\n```\n\n### 3.4 构建镜像\n\n```bash\ndocker build -t myapp:1.0 .              # 基于当前目录 Dockerfile 构建\ndocker build -t myapp:1.0 -f .\u002FDockerfile.dev .   # 指定 Dockerfile\ndocker build --no-cache -t myapp:1.0 .   # 不使用缓存构建\n```\n\n### 3.5 打标签与推送\n\n```bash\ndocker tag myapp:1.0 user\u002Fmyapp:1.0      # 给镜像打新标签\ndocker push user\u002Fmyapp:1.0               # 推送到仓库\n```\n\n### 3.6 登录与登出仓库\n\n```bash\ndocker login                             # 登录 Docker Hub\ndocker login registry.example.com        # 登录私有仓库\ndocker logout                            # 登出\n```\n\n### 3.7 导出与导入镜像\n\n```bash\ndocker save -o myapp.tar myapp:1.0       # 导出镜像为 tar 文件\ndocker load -i myapp.tar                 # 从 tar 文件导入镜像\n```\n\n### 3.8 删除镜像\n\n```bash\ndocker rmi nginx:1.25                    # 删除指定镜像\ndocker rmi -f nginx:1.25                 # 强制删除\ndocker image prune                       # 删除未被使用的悬空镜像\ndocker image prune -a                    # 删除所有未使用镜像\n```\n\n---\n\n## 4. 容器管理命令\n\n### 4.1 创建并启动容器（run）\n\n`docker run` 是最常用的命令，常用选项如下：\n\n| 选项 | 说明 |\n| --- | --- |\n| `-d` | 后台运行（detached） |\n| `-it` | 交互式终端 |\n| `--name` | 指定容器名称 |\n| `-p` | 端口映射 `宿主机端口:容器端口` |\n| `-v` | 数据卷挂载 `宿主机路径:容器路径` |\n| `-e` | 设置环境变量 |\n| `--rm` | 容器停止后自动删除 |\n| `--network` | 指定网络 |\n| `--restart` | 重启策略：`no`、`on-failure`、`always`、`unless-stopped` |\n\n示例：\n\n```bash\n# 后台运行 nginx，映射 8080 端口\ndocker run -d --name web -p 8080:80 nginx\n\n# 交互式运行 ubuntu 并进入 shell\ndocker run -it --rm ubuntu:22.04 bash\n\n# 带环境变量与挂载运行 MySQL\ndocker run -d --name mysql \\\n  -p 3306:3306 \\\n  -e MYSQL_ROOT_PASSWORD=123456 \\\n  -v \u002Fdata\u002Fmysql:\u002Fvar\u002Flib\u002Fmysql \\\n  --restart unless-stopped \\\n  mysql:8.0\n```\n\n### 4.2 查看容器\n\n```bash\ndocker ps                        # 查看运行中的容器\ndocker ps -a                     # 查看所有容器（含已停止）\ndocker ps -q                     # 只显示容器 ID\ndocker ps --format \"table {{.Names}}\\t{{.Status}}\"   # 自定义输出格式\n```\n\n### 4.3 启动 \u002F 停止 \u002F 重启 \u002F 删除\n\n```bash\ndocker start web                 # 启动已存在的容器\ndocker stop web                  # 停止容器\ndocker restart web               # 重启容器\ndocker kill web                  # 强制杀死容器\ndocker rm web                    # 删除已停止的容器\ndocker rm -f web                 # 强制删除运行中的容器\n```\n\n### 4.4 暂停与恢复\n\n```bash\ndocker pause web                 # 暂停容器\ndocker unpause web               # 恢复容器\n```\n\n### 4.5 查看容器详情\n\n```bash\ndocker inspect web               # 查看容器详细配置（JSON）\ndocker inspect -f '{{.State.Status}}' web   # 用模板提取字段\ndocker top web                   # 查看容器内进程\ndocker stats                     # 实时查看资源占用\ndocker stats web                 # 只看某个容器\n```\n\n### 4.6 重命名与提交\n\n```bash\ndocker rename web web2           # 重命名容器\ndocker commit web myapp:1.0      # 将容器当前状态提交为新镜像\n```\n\n---\n\n## 5. 容器内操作与日志\n\n### 5.1 进入容器\n\n```bash\ndocker exec -it web bash         # 在运行中的容器内开 shell（推荐）\ndocker exec -it web sh           # 容器无 bash 时用 sh\ndocker attach web                # 连接到容器主进程（不推荐，退出可能停止容器）\n```\n\n### 5.2 在容器内执行单条命令\n\n```bash\ndocker exec web ls \u002Fetc          # 执行一条命令并返回结果\ndocker exec -u root web whoami   # 以指定用户执行\n```\n\n### 5.3 查看日志\n\n```bash\ndocker logs web                  # 查看日志\ndocker logs -f web               # 实时跟踪日志\ndocker logs --tail 100 web       # 只看最后 100 行\ndocker logs -t web               # 显示时间戳\ndocker logs --since 10m web      # 查看最近 10 分钟日志\n```\n\n### 5.4 文件复制\n\n```bash\ndocker cp web:\u002Fetc\u002Fnginx\u002Fnginx.conf .\u002Fnginx.conf   # 容器 → 宿主机\ndocker cp .\u002Findex.html web:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002F  # 宿主机 → 容器\n```\n\n### 5.5 查看容器文件变更\n\n```bash\ndocker diff web                  # 查看容器文件系统改动\n```\n\n---\n\n## 6. 数据卷（Volume）命令\n\n数据卷用于持久化与共享数据，独立于容器生命周期。\n\n```bash\ndocker volume create mydata             # 创建数据卷\ndocker volume ls                        # 列出所有数据卷\ndocker volume inspect mydata            # 查看数据卷详情（含挂载路径）\ndocker volume rm mydata                 # 删除数据卷\ndocker volume prune                     # 删除未使用的数据卷\n```\n\n挂载方式对比：\n\n```bash\n# 1. 命名卷（推荐，由 Docker 管理）\ndocker run -d -v mydata:\u002Fdata nginx\n\n# 2. 绑定挂载宿主机目录\ndocker run -d -v \u002Fhost\u002Fpath:\u002Fcontainer\u002Fpath nginx\n\n# 3. --mount 语法（更清晰，推荐用于生产）\ndocker run -d --mount type=volume,src=mydata,dst=\u002Fdata nginx\ndocker run -d --mount type=bind,src=\u002Fhost\u002Fpath,dst=\u002Fcontainer\u002Fpath nginx\n```\n\n> 提示：绑定挂载时源路径必须是**绝对路径**，且建议加 `:ro` 只读，如 `-v \u002Fhost\u002Fpath:\u002Fapp:ro`。\n\n---\n\n## 7. 网络（Network）命令\n\n```bash\ndocker network ls                       # 列出网络\ndocker network create mynet             # 创建 bridge 网络\ndocker network create -d overlay mynet  # 创建指定驱动网络\ndocker network inspect mynet            # 查看网络详情\ndocker network connect mynet web        # 把容器连接到网络\ndocker network disconnect mynet web     # 断开容器\ndocker network rm mynet                 # 删除网络\ndocker network prune                    # 删除未使用网络\n```\n\n自定义网络内容器可通过**容器名**互相访问：\n\n```bash\ndocker network create appnet\ndocker run -d --name db --network appnet mysql:8.0\ndocker run -d --name api --network appnet myapi:1.0\n# 此时 api 容器内可直接用 \"db\" 作为主机名访问数据库\n```\n\n端口映射说明：\n\n```bash\n-p 80:80          # 宿主机 80 -> 容器 80\n-p 127.0.0.1:80:80  # 仅绑定本地回环\n-p 8080:80\u002Fudp    # UDP 端口\n```\n\n---\n\n## 8. 系统维护与清理命令\n\n```bash\ndocker system df                 # 查看磁盘占用汇总\ndocker system df -v              # 查看详细占用\ndocker system prune              # 清理停止的容器、未用网络、悬空镜像、构建缓存\ndocker system prune -a           # 清理所有未使用镜像\ndocker system events             # 实时查看 Docker 事件\n```\n\n清理组合示例：\n\n```bash\n# 停止所有容器\ndocker stop $(docker ps -q)\n\n# 删除所有容器\ndocker rm $(docker ps -aq)\n\n# 删除所有镜像\ndocker rmi $(docker images -q)\n```\n\n> 警告：`prune` 类命令会删除数据，执行前请确认。\n\n---\n\n## 9. Docker Compose 命令\n\nCompose 用于编排多容器应用，配置文件为 `docker-compose.yml`（新版为 `compose.yaml`）。\n\n示例 `compose.yaml`：\n\n```yaml\nservices:\n  web:\n    image: nginx:1.25\n    ports:\n      - \"8080:80\"\n    volumes:\n      - .\u002Fhtml:\u002Fusr\u002Fshare\u002Fnginx\u002Fhtml:ro\n    depends_on:\n      - api\n  api:\n    build: .\u002Fapi\n    environment:\n      - DB_HOST=db\n    depends_on:\n      - db\n  db:\n    image: mysql:8.0\n    environment:\n      MYSQL_ROOT_PASSWORD: 123456\n    volumes:\n      - dbdata:\u002Fvar\u002Flib\u002Fmysql\nvolumes:\n  dbdata:\n```\n\n常用命令：\n\n```bash\ndocker compose up -d             # 后台启动所有服务\ndocker compose up -d --build     # 先重新构建镜像再启动\ndocker compose down              # 停止并删除容器、网络\ndocker compose down -v           # 同时删除数据卷\ndocker compose ps                # 查看服务状态\ndocker compose logs -f           # 跟踪所有服务日志\ndocker compose logs -f web       # 只看某服务\ndocker compose exec web bash     # 进入某服务容器\ndocker compose restart web       # 重启某服务\ndocker compose build             # 构建\u002F重建镜像\ndocker compose pull              # 拉取最新镜像\ndocker compose config            # 校验并输出最终配置\n```\n\n> 旧版命令为 `docker-compose`（带连字符），新版已集成到 `docker compose`。\n\n---\n\n## 10. Dockerfile 常用指令\n\n| 指令 | 作用 |\n| --- | --- |\n| `FROM` | 指定基础镜像 |\n| `WORKDIR` | 设置工作目录 |\n| `COPY` | 复制文件到镜像 |\n| `ADD` | 复制文件（支持 URL 与自动解压 tar） |\n| `RUN` | 构建时执行命令 |\n| `ENV` | 设置环境变量 |\n| `ARG` | 构建参数 |\n| `EXPOSE` | 声明暴露端口 |\n| `CMD` | 容器启动默认命令（可被覆盖） |\n| `ENTRYPOINT` | 容器启动入口（不易被覆盖） |\n| `VOLUME` | 声明数据卷 |\n| `USER` | 指定运行用户 |\n| `HEALTHCHECK` | 健康检查 |\n\n示例 Dockerfile：\n\n```dockerfile\nFROM node:20-alpine\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci --omit=dev\nCOPY . .\nENV NODE_ENV=production\nEXPOSE 3000\nUSER node\nCMD [\"node\", \"server.js\"]\n```\n\n构建并运行：\n\n```bash\ndocker build -t mynode:1.0 .\ndocker run -d --name mynode -p 3000:3000 mynode:1.0\n```\n\n---\n\n## 11. 实用技巧与常见问题\n\n### 11.1 常用技巧\n\n```bash\n# 批量清理停止的容器\ndocker container prune\n\n# 查看容器 IP 地址\ndocker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web\n\n# 进入正在运行的容器但容器没有 shell（用 nsenter 或临时容器）\ndocker run --rm -it --pid=container:web --net=container:web alpine sh\n\n# 格式化输出容器列表\ndocker ps --format \"table {{.ID}}\\t{{.Names}}\\t{{.Ports}}\\t{{.Status}}\"\n\n# 使用别名简化（加入 ~\u002F.bashrc）\nalias dk='docker'\nalias dkc='docker compose'\n```\n\n### 11.2 常见问题\n\n**Q1：容器启动后马上退出？**\n容器主进程执行完就退出，属于正常现象。需要长期运行的进程（如守护进程）或使用 `-it` 保持前台。\n\n**Q2：端口被占用，启动失败？**\n更换宿主机端口，例如改成 `-p 8081:80`；或查杀占用进程 `lsof -i:8080`。\n\n**Q3：修改容器内文件后重启丢失？**\n容器内文件是临时层，重启（重新创建）会丢失。应通过 `-v` 挂载宿主机目录或数据卷持久化。\n\n**Q4：如何从容器内访问宿主机？**\nLinux 上可用 `host.docker.internal`（需 `--add-host=host.docker.internal:host-gateway`），或使用宿主机实际 IP。\n\n**Q5：镜像拉取慢？**\n配置镜像加速器（如国内镜像源），在 `\u002Fetc\u002Fdocker\u002Fdaemon.json` 中设置 `registry-mirrors` 后重启 Docker。\n\n---\n\n## 12. 命令速查表\n\n| 功能 | 命令 |\n| --- | --- |\n| 查看版本 | `docker --version` |\n| 拉取镜像 | `docker pull 镜像名:标签` |\n| 查看镜像 | `docker images` |\n| 构建镜像 | `docker build -t 名:标签 .` |\n| 删除镜像 | `docker rmi 镜像名:标签` |\n| 运行容器 | `docker run -d -p 宿主:容器 --name 名 镜像` |\n| 查看容器 | `docker ps -a` |\n| 进入容器 | `docker exec -it 名 bash` |\n| 查看日志 | `docker logs -f 名` |\n| 停止容器 | `docker stop 名` |\n| 删除容器 | `docker rm 名` |\n| 查看资源 | `docker stats` |\n| 创建数据卷 | `docker volume create 名` |\n| 创建网络 | `docker network create 名` |\n| 清理系统 | `docker system prune -a` |\n| Compose 启动 | `docker compose up -d` |\n| Compose 停止 | `docker compose down` |\n\n---\n\n## 附：学习路径建议\n\n1. 先用 `docker run` 跑通 nginx、redis 等官方镜像；\n2. 学会 `-p`、`-v`、`-e` 三个最常用参数；\n3. 写出第一个 Dockerfile 并构建自己的镜像；\n4. 掌握数据卷与自定义网络，实现多容器互通；\n5. 使用 Docker Compose 编排完整项目；\n6. 最后学习镜像优化、私有仓库与生产部署。\n\n---\n\n> 文档版本：v1.0 ｜ 适用于 Docker 24+ 及 Docker Compose v2.0",72,false,"2026-10-22T14:50:23",{"list":93,"total":10,"page":20,"size":94},[],30]