🐳 Docker
Docker 是一个在隔离容器中运行应用的平台。本速查表包含用于操作镜像、容器、网络、卷,以及 Docker Compose 和 Swarm 的命令。
📦 基本命令
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker | 主要的 Docker CLI 命令,用于运行子命令并管理容器、镜像、网络和卷 | |
| docker version | 显示已安装的 Docker 版本(客户端和服务器)。用于验证安装 | |
| docker version --format '{{.Client.APIVersion}}' | 仅显示 Docker 客户端 API 版本 | |
| docker version --format '{{.Server.Version}}' | 仅显示 Docker 服务器(引擎)版本 | |
| docker version --format '{{json .}}' | 以 JSON 格式输出完整版本信息 | |
| docker system info | 显示 Docker 系统信息:容器数、镜像数、资源 | |
| docker info | 显示 Docker 数据:版本、网络、容器数和镜像数 | |
| docker info --format '{{json .}}' | 以 JSON 格式输出信息 — 适用于自动化 | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | 显示 CPU 数量和总内存 | |
| docker info --format '{{.Driver}}' | 显示 Docker 使用的存储驱动 | |
| docker image pull | 从 Docker Hub 或其他注册表下载镜像。容器必须依赖镜像才能运行 | |
| docker pull ubuntu | 下载最新的 Ubuntu 镜像 | |
| docker pull nginx:alpine | 下载基于 Alpine Linux 的轻量级 Nginx 镜像 | |
| docker pull redis:7 | 下载 Redis 7 版本镜像 | |
| docker container run | 基于镜像创建并运行新容器 | |
| docker run -it ubuntu bash | 运行 Ubuntu 并打开交互式 Bash 终端 | |
| docker run -d nginx | 后台模式运行 Nginx | |
| docker run -p 8080:80 nginx | 运行 Nginx 并将容器端口 80 绑定到主机端口 8080 | |
| docker container ls | 列出正在运行的容器 | |
| docker ps | 仅显示运行中的容器 | |
| docker ps -a | 显示所有容器,包括已停止的 | |
| docker ps --format '{{.Names}}' | 仅输出容器名称 | |
| docker container start | 启动一个或多个已停止的容器 | |
| docker start container_name | 按名称启动容器 | |
| docker start $(docker ps -aq) | 启动所有容器 | |
| docker start -ai container_name | 启动容器并附加交互式终端 | |
| docker container stop | 停止正在运行的容器 | |
| docker stop container_name | 按名称停止容器 | |
| docker stop $(docker ps -q) | 停止所有运行中的容器 | |
| docker stop -t 5 container_name | 停止容器并给予 5 秒完成进程 | |
| docker container restart | 重启容器 | |
| docker restart container_name | 重启指定容器 | |
| docker restart $(docker ps -q) | 重启所有运行中的容器 | |
| docker restart -t 10 container_name | 延迟 10 秒后重启容器 | |
| docker container rm | 删除容器 | |
| docker rm container_name | 删除指定的已停止容器 | |
| docker rm $(docker ps -aq) | 删除所有已停止的容器 | |
| docker rm -f container_name | 强制删除运行中的容器 | |
| docker image ls | 列出已下载的镜像 | |
| docker images | 显示主机上的所有镜像 | |
| docker images -a | 显示所有镜像,包括中间层 | |
| docker images --format '{{.Repository}}:{{.Tag}}' | 仅输出镜像名称和标签 | |
| docker image rm | 从本地存储中删除一个或多个镜像 | |
| docker rmi test1:latest | 删除仓库  | |
| docker rmi 1a2b3c4d5e6f | 按镜像 ID 删除镜像 | |
| docker rmi $(docker images -q) | 删除所有镜像(谨慎使用!) | 
🔁 容器管理
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker container exec | 在运行中的容器内执行命令 | |
| docker exec -it container bash | 在名为  | |
| docker exec container ls /app | 在容器  | |
| docker exec -d container touch /tmp/testfile | 以分离模式运行命令(无需等待) | |
| docker container logs | 查看容器日志 | |
| docker logs container | 显示容器  | |
| docker logs -f container | 实时跟踪容器日志 | |
| docker logs --tail 50 container | 显示最后 50 行日志 | |
| docker inspect | 获取容器或镜像的详细 JSON 信息 | |
| docker inspect container | 显示容器  | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | 显示容器的 IP 地址 | |
| docker container stats | 显示容器实时资源使用情况 | |
| docker stats | 显示所有容器的 CPU、内存、网络和磁盘使用情况 | |
| docker stats container_name | 仅显示指定容器的统计信息 | |
| docker stats --no-stream | 显示一次快照并退出 | |
| docker container rename | 重命名容器 | |
| docker rename old_name new_name | 将容器从  | |
| docker container cp | 在容器与主机之间复制文件 | |
| docker cp container:/src/file.txt ./file.txt | 将文件从容器复制到当前主机目录 | |
| docker cp ./config.yaml container:/app/config.yaml | 将文件从主机复制到容器 | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | 从容器流式传输日志文件并过滤 “ERROR” 行,不保存到磁盘 | |
| docker container top | 显示容器内运行的进程 | |
| docker top container | 显示名为  | |
| docker container pause | 暂停容器中的所有进程 | |
| docker pause container | 暂停容器  | |
| docker container unpause | 恢复已暂停的容器 | |
| docker unpause container | 恢复容器  | |
| docker container update | 在不重启的情况下更新容器设置 | |
| docker update --memory 500m container | 限制容器内存使用为 500 MB | 
🧱 镜像与 Dockerfile
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker buildx build | 基于 Dockerfile 构建 Docker 镜像 | |
| docker build -t my_image . | 从当前目录构建并打上标签  | |
| docker build -t my_image:1.0 . | 构建并打上版本标签  | |
| docker build --no-cache -t my_image . | 不使用缓存进行全新构建 | |
| docker container commit | 从容器当前状态创建镜像 | |
| docker commit container my_img:v1 | 从容器  | |
| docker commit -m "Added config" container my_img:v2 | 创建带提交消息的镜像 | |
| docker commit -a "John Doe" container my_img:latest | 创建时指定作者信息 | |
| docker image tag | 添加或修改镜像标签 | |
| docker tag my_image myrepo/my_image:latest | 为推送到仓库  | |
| docker tag my_image:1.0 my_image:stable | 为标签为  | |
| docker tag my_image my_image:backup | 为本地镜像添加  | |
| docker image push | 将镜像推送到 Docker Hub 或其他注册表 | |
| docker push myrepo/my_image:latest | 推送标签为  | |
| docker push myrepo/my_image:1.0 | 推送标签为  | |
| docker push myrepo/my_image | 推送使用默认标签  | |
| docker login | 登录 Docker Hub 或其他注册表 | |
| docker login | 交互式输入用户名和密码登录 Docker Hub | |
| docker login myregistry.local:5000 | 登录私有注册表 | |
| docker login -u username -p password | 使用用户名和密码登录(不推荐) | |
| docker logout | 退出 Docker Hub 或其他注册表 | |
| docker logout | 退出 Docker Hub | |
| docker logout myregistry.local:5000 | 退出私有注册表 | |
| HEALTHCHECK | Dockerfile 指令,用于自动检查容器健康状态 | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | 添加健康检查,每 30 秒验证一次服务可用性 | |
| docker inspect --format='{{json .State.Health}}' container_name | 检查运行中容器的健康状态 | 
🔌 网络与卷
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker network ls | 列出所有 Docker 网络 | |
| docker network ls | 显示所有已创建的 Docker 网络 | |
| docker network ls --filter driver=bridge | 仅显示驱动为  | |
| docker network ls --format '{{.Name}}' | 仅输出网络名称 | |
| docker network create | 创建新的 Docker 网络 | |
| docker network create my_net | 创建名为  | |
| docker network create --driver bridge my_bridge_net | 创建一个使用  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | 创建指定子网的网络 | |
| docker network connect | 将容器连接到网络 | |
| docker network connect my_net container | 将容器  | |
| docker network connect --alias db_net my_net container | 使用别名  | |
| docker network disconnect | 将容器从网络断开 | |
| docker network disconnect my_net container | 将容器  | |
| docker volume ls | 列出所有 Docker 卷 | |
| docker volume ls | 显示所有 Docker 卷 | |
| docker volume ls --filter dangling=true | 显示未使用的卷 | |
| docker volume create | 创建新的 Docker 卷 | |
| docker volume create my_vol | 创建名为  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | 使用 tmpfs 创建临时卷 | |
| docker volume inspect | 显示卷的详细信息 | |
| docker volume inspect my_vol | 以 JSON 格式显示卷  | |
| docker volume rm | 删除一个或多个卷 | |
| docker volume rm my_vol | 删除名为  | |
| docker volume rm $(docker volume ls -qf dangling=true) | 删除所有未使用的卷 | 
🧩 Docker 插件
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker plugin ls | 列出已安装的 Docker 插件 | |
| docker plugin ls | 显示所有插件及其状态 | |
| docker plugin install | 从注册表安装 Docker 插件 | |
| docker plugin install vieux/sshfs | 安装 SSHFS 卷插件 | |
| docker plugin install store/weaveworks/net-plugin:latest_release | 安装 Weave 网络插件 | |
| docker plugin disable | 禁用已安装的插件 | |
| docker plugin disable vieux/sshfs | 禁用 SSHFS 插件 | |
| docker plugin enable | 启用之前禁用的插件 | |
| docker plugin enable vieux/sshfs | 启用 SSHFS 插件 | |
| docker plugin rm | 删除 Docker 插件 | |
| docker plugin rm vieux/sshfs | 删除 SSHFS 插件 | 
📋 Docker Compose
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker compose up | 启动 docker-compose.yml中定义的容器 | |
| docker compose up | 在当前目录以交互模式启动所有服务 | |
| docker compose up -d | 以后台模式启动服务 | |
| docker compose up --build | 在启动服务前先构建镜像 | |
| docker compose down | 停止并删除由 up创建的容器、网络和卷 | |
| docker compose down | 停止所有运行的服务并删除相关资源 | |
| docker compose down --volumes | 同时删除 Compose 创建的卷 | |
| docker compose down --rmi all | 同时删除 Compose 创建的镜像 | |
| docker compose logs | 查看所有或指定服务的日志 | |
| docker compose logs | 显示所有服务的日志 | |
| docker compose logs -f | 实时跟踪日志 | |
| docker compose logs web | 仅显示  | |
| docker compose exec | 在运行中的服务容器内执行命令 | |
| docker compose exec web bash | 进入  | |
| docker compose exec db ls /var/lib/postgresql | 在数据库容器中运行  | |
| docker compose exec -d worker touch /tmp/done | 在  | |
| docker compose build | 构建或重建服务镜像 | |
| docker compose build | 构建  | |
| docker compose build web | 仅构建  | |
| docker compose build --no-cache | 构建镜像时不使用缓存 | |
| docker compose ps | 显示所有服务和容器的状态 | |
| docker compose ps -a | 显示所有容器,包括已停止的 | |
| docker compose ps --services | 仅显示服务名称 | |
| docker compose pull | 从注册表下载/更新服务镜像 | |
| docker compose pull web | 仅拉取  | |
| docker compose pull --ignore-pull-failures | 即使部分镜像失败也继续拉取 | |
| docker compose restart | 重启所有或指定服务 | |
| docker compose restart db | 仅重启  | |
| docker compose restart -t 10 | 在 10 秒超时内重启服务 | |
| docker compose config | 以 YAML 格式显示最终 Compose 配置 | |
| docker compose config --services | 列出配置中的所有服务 | |
| docker compose config --volumes | 列出配置中定义的所有卷 | |
| docker compose start | 启动已停止的服务而不重新创建容器 | |
| docker compose start web | 启动  | |
| docker compose start db api | 一次启动多个服务 | |
| docker compose stop | 停止服务而不删除容器 | |
| docker compose stop web | 停止  | |
| docker compose stop -t 5 | 在 5 秒超时内停止服务 | 
📤 导出与导入
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker image save | 将一个或多个 Docker 镜像保存为 tar 归档文件,以便导入或传输 | |
| docker save -o image.tar my_img:tag | 将 Docker 镜像保存为 tar 文件 | |
| docker save my_image > my_image.tar | 另一种保存镜像到文件的方法 | |
| docker save -o redis_latest.tar redis:latest | 将特定的 Redis 镜像保存为文件 | |
| docker image load | 从之前保存的 tar 归档中加载 Docker 镜像 | |
| docker load < image.tar | 从 tar 文件加载 Docker 镜像 | |
| docker load --input redis_latest.tar | 通过参数指定文件加载镜像 | |
| docker load --quiet < my_image.tar | 加载镜像时不显示进度 | |
| docker container export | 将容器文件系统导出为 tar 归档,不包含镜像历史或元数据 | |
| docker export container > file.tar | 将容器文件系统导出为归档文件 | |
| docker export my_container > my_container_fs.tar | 按容器名称导出 | |
| docker export -o container_fs.tar container_id | 使用  | |
| docker image import | 从文件系统 tar 归档创建新镜像 | |
| docker import file.tar new_img | 将归档文件导入为新的 Docker 镜像 | |
| docker import https://example.com/image.tar my_new_image | 直接从 URL 导入镜像 | |
| docker import - my_image < file.tar | 从标准输入导入 | 
🧹 清理与诊断
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker system df | 显示 Docker 磁盘使用情况:卷、镜像、容器和构建缓存 | |
| docker system df -v | 详细输出每个镜像、容器和卷的信息 | |
| docker system df --format '{{json .}}' | 以 JSON 格式输出信息 | |
| docker system prune | 删除所有未使用的 Docker 数据:已停止的容器、未使用的网络、悬挂镜像和构建缓存 | |
| docker system prune -a | 删除未使用的镜像,包括中间层 | |
| docker system prune --volumes | 同时删除未使用的卷及其他资源 | |
| docker image prune | 删除未使用的 Docker 镜像,包括悬挂层 | |
| docker image prune -a | 删除所有未使用的镜像,包括悬挂的 | |
| docker image prune --filter "until=24h" | 删除超过 24 小时的镜像 | |
| docker container prune | 删除符合过滤条件的已停止容器,若未指定则删除所有 | |
| docker container prune --filter "until=24h" | 删除超过 24 小时的已停止容器 | |
| docker container prune --force | 不提示确认直接删除 | 
🐝 Docker Swarm
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker swarm init | 在当前节点初始化新的 Docker Swarm 集群 | |
| docker swarm init --advertise-addr 192.168.1.100 | 初始化集群并指定 IP 地址 | |
| docker swarm init --listen-addr 0.0.0.0:2377 | 初始化时指定监听端口 | |
| docker service create | 在 Swarm 集群中创建新服务 | |
| docker service create --name nginx nginx | 在 Swarm 中创建 Nginx 服务 | |
| docker service create --replicas 3 --name web webserver | 创建一个包含 3 个副本的服务 | |
| docker service create --name redis --publish 6379:6379 redis | 创建带端口映射的服务 | |
| docker stack deploy | 基于 Compose 文件将一组服务部署到 Swarm 集群 | |
| docker stack deploy -c docker-compose.yml mystack | 从 compose 文件部署 stack | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | 部署时启用注册表认证转发 | |
| docker stack deploy -c swarm-compose.yml mystack | 使用备用 compose 文件部署 stack | |
| docker stack rm | 从 Swarm 集群中删除一个或多个 stack | |
| docker stack rm mystack | 删除  | |
| docker stack rm | 删除所有 stack(不推荐) | |
| docker stack rm mystack && docker swarm leave --force | 删除 stack 并退出 Swarm | 
💼 高级 Docker 用法
🚀 专业级 Docker 命令
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker buildx | 高级镜像构建工具,取代 docker build。支持多平台、缓存、并行构建和导出到多种格式。适用于 CI/CD 和跨平台开发 | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | 构建多平台镜像(同时支持 ARM 和 x86) | |
| docker buildx build --load -t localimg . | 构建镜像并加载到本地 Docker 引擎缓存 | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | 构建并推送多平台镜像到注册表 | |
| docker context | 管理 Docker 上下文,用于远程或多环境工作。可快速切换本地与远程 Docker 引擎 | |
| docker context create myremote --docker "host=ssh://user@host" | 创建一个连接远程 Docker 主机的上下文 | |
| docker context use myremote | 切换到远程上下文 | |
| docker context ls | 列出可用的上下文及当前激活的 | |
| docker system events | 实时监听 Docker 事件,并可按事件类型过滤(如容器启动)。适用于监控与自动化 | |
| docker events --filter 'event=start' | 仅显示容器启动事件 | |
| docker events --since 1h --until 10m | 显示从一小时前到 10 分钟前的事件 | |
| docker events --filter 'type=network' | 仅显示与网络相关的事件 | |
| docker events --filter 'image=nginx' | 仅显示与  | |
| docker container update | 在不重启的情况下修改运行中容器的资源限制和设置 | |
| docker update --cpus 2 --memory 1g my_container | 限制为 2 个 CPU 和 1 GB 内存 | |
| docker update --restart unless-stopped my_container | 设置自动重启策略为  | |
| docker update --pids-limit 200 my_container | 限制进程数为 200 | |
| docker container diff | 显示容器与其原始镜像之间的文件系统变化。适用于调试和审计 | |
| docker diff my_container | 显示容器的所有文件系统更改 | |
| docker diff my_container | grep '^A' | 仅显示新增文件( | |
| docker image history | 显示镜像层的历史:构建命令、每层大小和创建时间。适用于优化和审计 | |
| docker history my_image | 显示镜像的层历史 | |
| docker history --no-trunc my_image | 显示完整构建命令,不截断 | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | 仅输出构建命令和层大小 | 
🛠 实用的 Docker 实践与自动化
- 最小化镜像大小 
 使用- alpine或- scratch等基础镜像以减小体积。
 在构建时使用- --squash压缩层(需要启用实验特性)。
 在单层中删除临时文件和缓存:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- 减少层数 
 在一个- RUN中合并命令以减少层数和最终镜像大小:- RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
- 优化 Dockerfile 构建 
 使用多阶段构建,只保留最终镜像所需文件。
 先复制并安装依赖,再复制代码 — 提高缓存利用率,加快重建。
- 分离机密与配置 
 不要在镜像中存储- .env文件、API 密钥或私有证书。
 配置可使用:- docker secret(Swarm 中)
 
- 环境变量(-e VAR=value或.env)
 
- 用于配置的外部卷 
 
- 构建时机密(BuildKit) 
 在构建时安全传递机密,使用- --secret参数:- docker buildx build --secret id=mysecret,src=./secret.txt .- 在 Dockerfile 中,机密可在 - /run/secrets/mysecret使用:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 这样可避免机密存储在镜像层中。 
- 无 Root 权限运行 Docker 
 在无 Root 权限下运行 Docker 可提高安全性,降低宿主机被入侵的风险。
 启用方式:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- 检查: - docker info | grep Rootless- ⚠ 某些功能(如 <1024 端口转发)将不可用。 
- 扫描镜像漏洞 
 使用内置工具:- docker scan my_image- 或使用新 CLI: - docker scout cves my_image- 有助于发现基础镜像和依赖中的漏洞。 
- 监控资源使用 
 通过内存、CPU 和进程数限制容器:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- 避免资源过度消耗。 
 还可以限制 I/O:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- 适用于不应过载磁盘子系统的容器。 
- 自动清理 
 定期删除未使用的镜像、容器、卷和网络:- docker system prune -af --volumes- ⚠ 注意:该命令会删除所有未使用的资源。 - 若需选择性清理,请使用: - docker image prune --filter "until=24h"
- CI/CD 集成 
 将构建、测试和部署集成到 GitHub Actions、GitLab CI、Jenkins 流水线中。
 示例 GitHub Actions 步骤:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- 日志与监控 
 将日志驱动(- --log-driver)附加到集中式系统:ELK、Loki、Splunk。
 使用 Prometheus + cAdvisor 进行容器指标监控。
- 生产环境部署 
 使用- docker-compose.override.yml区分开发与生产配置。
 高可用与扩展可使用:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 Docker 容器调试与分析
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker container exec | 在运行中的容器内执行命令,提供交互式访问或在隔离环境中运行进程 | |
| docker exec -it my_container bash | 在运行中的容器内启动交互式终端 (bash) | |
| docker exec -it my_container sh | 在容器中启动最小化 shell(如果 bash 不可用) | |
| docker exec my_container ls /app | 在容器中运行命令(非交互模式) | |
| docker container logs | 显示指定容器的日志,用于诊断和监控其运行输出和事件 | |
| docker logs -f --tail 100 my_container | 实时查看最后 100 行日志 | |
| docker logs my_container | 显示容器的所有可用日志 | |
| docker logs --since 1h my_container | 显示最近一小时的日志 | |
| docker inspect | 以 JSON 格式输出 Docker 对象(容器、镜像、网络等)的详细信息,包括配置和状态 | |
| docker inspect my_container | 获取容器的完整 JSON 信息 | |
| docker inspect --format '{{.State.Pid}}' my_container | 获取容器主进程在宿主机上的 PID | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | 显示容器的 IP 地址 | |
| nsenter(withstrace) | Linux 工具,用于进入其他进程的命名空间(此处为容器)。可结合 strace在容器内跟踪系统调用以进行调试 | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | 进入容器命名空间并跟踪进程 1 的系统调用 | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | 在容器命名空间内打开 bash shell | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | 查看容器内的开放端口 | |
| tcpdump(inside container) | 命令行工具,用于捕获和分析网络流量。在容器内可诊断网络问题、分析数据包并监控连接 | |
| docker exec -it my_container tcpdump -i any | 在容器内捕获并分析网络流量 | |
| docker exec -it my_container tcpdump -nn port 80 | 仅捕获 80 端口的流量 | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | 将流量保存到文件以供后续分析 | |
| docker container stats | 实时显示一个或多个容器的资源使用指标(CPU、内存、网络、磁盘) | |
| docker stats my_container | 显示容器的实时 CPU、内存、网络和磁盘使用情况 | |
| docker stats | 显示所有容器的统计信息 | |
| docker stats --no-stream | 仅输出一次统计信息后退出 | |
| docker container top | 显示容器中运行的进程列表,类似 Linux 中的 ps,用于分析容器活动 | |
| docker top my_container | 显示容器内正在运行的进程 | |
| docker top my_container aux | 使用替代输出格式,如  | |
| docker top my_container -eo pid,cmd | 仅显示进程 PID 和命令 | |
| docker diff | 显示容器文件系统相较于基础镜像的更改,包括新增、修改或删除的文件 | |
| docker diff my_container | 显示容器与基础镜像相比的文件系统更改 | |
| docker diff my_container | grep '^A' | 仅显示新增文件 ( | |
| docker diff my_container | grep '^C' | 仅显示修改过的文件 ( | |
| docker cp | 在容器与宿主机之间复制文件和目录,用于数据交换和备份 | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | 从容器复制文件到宿主机 | |
| docker cp ./config.yaml my_container:/app/config.yaml | 从宿主机复制文件到容器 | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | 复制日志文件并过滤错误行而不保存到磁盘 | 
💡 高级调试可使用
nsenter、strace、tcpdump、gdb等底层工具。
💼 高级 Docker Compose 用法
🚀 专业级 Docker Compose 命令
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker compose up | 从 docker-compose.yml 文件启动并管理指定服务生命周期,可在后台运行 | |
| docker compose up -d web db | 仅以分离模式运行  | |
| docker compose up --build | 在启动服务前重建镜像 | |
| docker compose up --remove-orphans | 删除当前 compose 文件中未定义的容器 | |
| docker compose build | 根据 compose 文件为服务构建镜像,支持缓存控制和并行构建 | |
| docker compose build --no-cache | 完全不使用缓存重建镜像 | |
| docker compose build --parallel | 并行构建所有服务以加快速度 | |
| docker compose build web | 仅构建  | |
| docker compose pull | 为所有或指定服务从注册表下载最新镜像 | |
| docker compose pull | 为所有服务拉取镜像 | |
| docker compose pull db | 仅为  | |
| docker compose pull --ignore-pull-failures | 忽略错误继续拉取镜像 | |
| docker compose restart | 重启所有或指定服务而不重新创建容器 | |
| docker compose restart | 重启当前项目的所有服务 | |
| docker compose restart worker | 仅重启  | |
| docker compose restart web db | 一次重启多个服务 | |
| docker compose exec | 在运行的服务容器内执行命令,可选择交互模式 | |
| docker compose exec db psql -U user -d database | 在  | |
| docker compose exec web sh | 在  | |
| docker compose exec api curl http://localhost:8080 | 在  | |
| docker compose config | 输出考虑所有文件和环境变量的最终 Compose 配置 | |
| docker compose config | 以 YAML 格式显示合并后的配置 | |
| docker compose config --services | 列出所有服务 | |
| docker compose config --environment | 显示所有服务使用的环境变量 | |
| docker compose watch | 在源文件更改时自动重启服务,适合开发 | |
| docker compose watch | 启动文件监控并在更改时重启服务 | |
| docker compose events | 流式获取 Compose 事件:服务启动、停止、更新 | |
| docker compose events --json | 以 JSON 格式接收事件 | |
| docker compose rm | 删除已停止的服务容器 | |
| docker compose rm web db | 删除  | |
| docker compose pause | 暂停服务运行 | |
| docker compose pause api | 暂停  | |
| docker compose unpause | 恢复暂停的服务 | |
| docker compose unpause api | 恢复  | |
| docker compose create | 创建容器但不启动 | |
| docker compose create web db | 为  | |
| docker compose images | 显示服务使用的镜像列表 | |
| docker compose images | 显示所有服务的镜像 | |
| docker compose top | 显示服务容器中运行的进程 | |
| docker compose top web | 显示  | 
🛠 Docker Compose 实践与自动化
- 环境分离 
 为不同环境(开发、测试、生产)使用单独的- docker-compose.override.yml文件,以避免配置冲突。
 也可以使用- -f参数组合多个配置文件:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- 使用不同的 - .env文件(如- .env.dev,- .env.prod)管理环境变量。
- 安全存储机密 
 不要将敏感数据(密码、令牌)直接写入 Compose 文件。应使用:- .env文件存储环境变量(注意:- .env文件不加密,不能提交到公共仓库)
 
- docker secret和- docker config(在 Docker Swarm 中)用于安全管理机密和配置
 
- 外部卷存放包含机密的配置文件
 
- 外部机密管理系统(如 HashiCorp Vault、AWS Secrets Manager) 
 
- 使用 - depends_on和- healthcheck的启动顺序
 确保服务在依赖项就绪后再启动:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- 更新时最小化停机 
 更新服务前运行:- docker compose pull && docker compose up -d --remove-orphans- -d参数让容器后台运行,- --remove-orphans移除未在当前配置中定义的容器。
 如需完全停止并删除旧容器:- docker compose down --remove-orphans- 确保加载新镜像并删除未使用的容器,避免停机。 
- 开发中的热加载 (volumes) 
 使用- volumes将本地目录挂载到容器中。这样代码更改能即时生效,无需重建镜像。
 注意文件权限和文件系统缓存问题,尤其在 Windows 和 macOS 上。
- 无 volume 的热加载 (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- 服务集中式日志 
 将容器日志重定向到 ELK、Loki、Prometheus、Fluentd 等监控和日志系统。
 使用 Docker 日志驱动 (- --log-driver) 启用集中日志收集。
 在 Compose 中为容器配置日志驱动:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- 服务自动重启 
 在- docker-compose.yml中配置重启策略:- restart: unless-stopped- 常见策略包括: - no— 不自动重启(默认)
 
- always— 始终重启容器
 
- on-failure— 仅在失败时重启(可带重试次数)
 - 生产环境推荐使用 - unless-stopped,保证服务稳定。
 这样服务可在故障或宿主机重启后自动恢复。
- 服务配置集 (Profiles) 
 允许仅运行特定分组的服务:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- 仅运行 frontend 配置集: - docker compose --profile frontend up
🐞 Docker Compose 服务调试与分析
| 命令 | 示例 | 描述 | 
|---|---|---|
| docker compose exec | 在运行中的服务容器内执行命令,可访问容器或运行进程 | |
| docker compose exec web sh | 在  | |
| docker compose exec db psql -U user -d database | 在  | |
| docker compose logs | 查看服务日志,用于诊断与监控 | |
| docker compose logs -f db | 实时查看  | |
| docker compose logs --tail=50 api | 显示  | |
| docker compose logs --since=1h web | 显示  | |
| docker inspect | 查看运行服务的容器的详细信息 | |
| docker inspect $(docker compose ps -q web) | 获取  | |
| docker container stats | 监控运行服务容器的资源使用情况 | |
| docker stats $(docker compose ps -q worker) | 跟踪  | |
| docker compose run --rm | 使用服务配置运行临时容器,便于调试 | |
| docker compose run --rm web sh | 为  | |
| docker container cp | 在主机与容器间复制文件 | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | 从  | 
💡 对复杂多服务调试,可用
docker compose run --rm启动单独容器并挂载网络和卷,不影响主服务。
📚 附加资源
🚫 使用 .dockerignore 忽略文件
将不应包含在镜像中的文件和目录添加到 .dockerignore,以减小体积并加快构建:
node_modules/
*.log
.env⚡ 使用别名简化命令
可为常用命令创建别名以加快执行:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 提示:Docker 使用建议
- 不要死记硬背 — 使用 docker --help或docker <command> --help查看命令说明。
 
- 经常练习并尝试简单项目。
 
- 关注镜像大小,并通过 - .dockerignore删除不必要的文件。
🌐 有用的链接
📘 Docker 官方文档 — 涵盖所有 Docker 主题的完整指南和参考:
https://docs.docker.com/
📙 Docker 速查表 — 官方完整 Docker 速查表:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — 镜像与注册表:
https://hub.docker.com/