目录


一、Docker 基础命令

1. 镜像管理

# 拉取镜像(默认走 registry-mirrors 加速)
docker pull nginx:latest

# 从指定仓库拉取(绕过加速直连)
docker pull docker.m.daocloud.io/library/nginx:latest

# 查看本地镜像
docker images

# 查看镜像详细信息
docker inspect nginx

# 搜索镜像
docker search redis

# 给镜像打标签
docker tag nginx:latest myregistry.com/nginx:v1

# 推送镜像到仓库
docker push myregistry.com/nginx:v1

# 删除镜像(-f 强制删除)
docker rmi nginx:latest

# 删除悬空镜像(无标签)
docker image prune

2. 容器生命周期

# 创建并启动容器(最常用)
docker run -d --name my-nginx -p 8080:80 nginx

# run 常用参数速查
#   -d            后台运行
#   --name        容器命名
#   -p 8080:80    端口映射(宿主机:容器)
#   -v /host:/cont 数据卷挂载
#   -e KEY=value  环境变量
#   --restart=always  开机自启
#   --network     指定网络

# 启动/停止/重启容器
docker start my-nginx
docker stop my-nginx
docker restart my-nginx

# 暂停/恢复(不终止进程)
docker pause my-nginx
docker unpause my-nginx

# 删除容器(-f 强制删除运行中的)
docker rm my-nginx
docker rm -f my-nginx

# 进入容器交互式终端
docker exec -it my-nginx bash

# 在容器内执行单条命令
docker exec my-nginx ls /etc/nginx

# 查看运行中的容器
docker ps

# 查看所有容器(含已停止)
docker ps -a

# 查看容器资源占用
docker stats

3. 容器运维

# 查看容器日志(-f 实时跟踪,--tail 只看末尾 N 行)
docker logs my-nginx
docker logs -f --tail 100 my-nginx

# 查看容器内进程
docker top my-nginx

# 复制文件:容器 -> 宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf

# 复制文件:宿主机 -> 容器
docker cp ./nginx.conf my-nginx:/etc/nginx/nginx.conf

# 查看容器端口映射
docker port my-nginx

# 容器提交为新镜像
docker commit my-nginx my-nginx:v1

二、Docker Compose 命令

注意:新版 Docker 已内置 compose 插件,docker compose(带空格) 是 v2 命令;
旧版 docker-compose(带连字符)是 v1,新项目一律用 docker compose

# 构建并启动服务(-d 后台运行)
docker compose up -d

# 仅构建不启动
docker compose build

# 查看服务状态
docker compose ps

# 查看所有服务日志(-f 实时跟踪)
docker compose logs
docker compose logs -f
docker compose logs -f <service-name>

# 停止服务(保留容器和网络)
docker compose stop

# 停止并删除容器、网络(保留数据卷)
docker compose down

# 彻底清理:连同数据卷一起删(⚠️ 数据不可恢复)
docker compose down -v

# 进入某个服务容器
docker compose exec <service-name> bash

# 查看配置(校验 compose 文件语法)
docker compose config

# 重新创建变更的服务(配置修改后生效)
docker compose up -d --build

# 滚动重启某服务
docker compose restart <service-name>

# 拉取所有服务最新镜像
docker compose pull

docker-compose.yml 示例模板

version: "3.8"

services:
  web:
    image: nginx:latest
    container_name: my-nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    environment:
      - TZ=Asia/Shanghai
    restart: always

  db:
    image: mysql:8.0
    container_name: my-mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: appdb
    volumes:
      - mysql-data:/var/lib/mysql
    restart: always

volumes:
  mysql-data:

三、网络与数据卷

# 查看网络列表
docker network ls

# 创建网络(bridge 模式)
docker network create my-net

# 容器加入网络
docker network connect my-net my-nginx

# 容器脱离网络
docker network disconnect my-net my-nginx

# 查看网络详情(含接入的容器)
docker network inspect my-net

# 删除网络
docker network rm my-net

# 查看数据卷列表
docker volume ls

# 创建数据卷
docker volume create my-data

# 查看数据卷详情
docker volume inspect my-data

# 删除未使用的数据卷
docker volume prune

四、日志与排障

# 查看容器日志
docker logs -f --tail 200 <container>

# 查看容器完整配置(含启动命令、挂载、环境变量)
docker inspect <container>

# 实时查看进程
docker top <container>

# 查看事件流(容器创建/删除等)
docker events

# 查看 Docker 系统信息(含镜像加速配置)
docker info

# 查看 daemon 实时日志(macOS Docker Desktop)
tail -f ~/Library/Containers/com.docker.docker/Data/log/host/docker.log

五、清理与优化

# 删除所有已停止的容器
docker container prune

# 删除所有悬空镜像
docker image prune

# 删除所有未使用的镜像(-a 全部)
docker image prune -a

# 删除所有未使用的网络
docker network prune

# 删除所有未使用的数据卷(⚠️ 慎用)
docker volume prune

# 一键清理所有无用资源
docker system prune

# 连带删除数据卷(⚠️ 慎用,数据不可恢复)
docker system prune -a --volumes

# 查看磁盘占用
docker system df

六、国内镜像加速配置(实战踩坑)

背景

国内直连 docker.io 官方源极不稳定,拉取镜像经常失败。需要配置 registry mirror(镜像加速器)。

配置文件位置

  • macOS Docker Desktop~/.docker/daemon.json
  • Linux/etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://dockerproxy.net",
    "https://docker.m.daocloud.io"
  ]
}

⚠️ 踩坑记录(重要)

  1. 高校源大多已失效:清华(mirrors.tuna.tsinghua.edu.cn)、上海交大(mirror.sjtu.edu.cn)等源 2024-2025 年陆续停止 docker registry 代理服务,/v2/ 接口返回 404,配置了等于没配,拉镜像照样失败。
  2. Docker Desktop 重启会覆盖配置:直接改 daemon.json 后,如果用 killall com.docker.backend 强杀,Docker Desktop 重启可能把配置还原。正确姿势:改完配置 → 从菜单正常退出 Docker Desktop → 重新打开
  3. 验证配置是否生效
# 查看实际加载的镜像加速器
docker info | grep -A5 "Registry Mirrors"

# 实测拉取(不带任何前缀,能成功说明加速生效)
docker pull hello-world

其他国内源备选

# 如果上面的源失效,可以测试这些(返回 200/401 均可用)
docker.1ms.run
dockerproxy.net
docker.m.daocloud.io
hub.rat.dev
docker.1panel.live

七、常见问题 FAQ

Q1: docker pull 报 "not found" / 超时?

大概率是国内网络问题。检查 docker info 的 Registry Mirrors 是否配置了可用的加速源,或改用 docker.m.daocloud.io/library/<镜像> 前缀直连。

Q2: docker-compose 命令不存在?

新版 Docker 用 docker compose(带空格)。docker-compose 是旧版 v1,需单独安装或已弃用。

Q3: 容器启动后立刻退出?

# 先看退出原因
docker logs <container>
# 再查看容器状态和退出码
docker inspect <container> | grep -i exit

常见原因:启动命令错误、端口被占用、依赖的服务未就绪。

Q4: 如何让容器开机自启?

run 时加 --restart=always,compose 里配 restart: always

Q5: 容器内时间不对?

挂载时区:

docker run -d -v /etc/localtime:/etc/localtime:ro nginx
# 或设置环境变量
-e TZ=Asia/Shanghai

Q6: docker system prune 会不会删掉我的数据?

docker system prune 默认不删数据卷;但 -a --volumes 会连带删除所有未使用的数据卷,数据不可恢复,慎用。

Q7: 怎么查看容器实际占用的磁盘?

docker system df

速查卡(收藏版)

场景命令
拉镜像docker pull <image>
跑容器docker run -d --name x -p 80:80 <image>
进容器docker exec -it x bash
看日志docker logs -f --tail 100 x
停/删docker stop x && docker rm x
Compose 启动docker compose up -d
Compose 停止docker compose down
看资源docker stats / docker system df
清理docker system prune -a --volumes(慎用)

如果本文对你有帮助,欢迎点赞收藏。评论区可以交流 Docker 使用中遇到的问题。

更多推荐