温馨提醒

🐳 Docker 核心速查手册 (Cheat Sheet)

系统配置与环境

拉取镜像慢时,必须配置镜像加速器。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 1. 编辑配置文件
sudo vi /etc/docker/daemon.json

# 2. 填入镜像源配置 (按 i 进入编辑,完成后按 ESC,输入 :wq 保存退出)
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.1panel.live",
        "https://hub.rat.dev"
    ]
}

# 3. 重启 Docker 服务使配置生效
sudo service docker restart 

# 查看 Docker 系统信息 (可用于验证镜像源是否生效)
docker info

一、 镜像管理 (Images)

镜像是静态的安装包,是启动容器的基础。

1
2
3
4
5
docker images                                       # 查看本地所有镜像
docker pull [registry/][username/]name:version      # 从仓库拉取镜像 (默认拉取 latest 最新版)
docker pull --platform=linux/arm64 nginx            # 补充:指定 CPU 架构拉取镜像 (M芯片 Mac 常用)
docker rmi <镜像名或ID>                             # 删除单个镜像
docker image prune -a                               # 补充:一键清理所有未被使用的镜像 (释放磁盘空间神器)

二、 容器生命周期管理 (Containers)

容器是运行起来的镜像。这是日常使用最高频的部分。

1. 启动容器 (docker run)

docker run = 创建 (create) + 启动 (start)。它的参数非常多,建议分类记忆:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
docker run [参数] <镜像名> [启动命令]

# --- 常用参数对照表 ---
# -d                  后台运行容器 (最常用)
# --name <名字>       给容器取个自定义好记的名字
# -p <外>:<内>        端口映射。例如 -p 8080:80 (将宿主机的 8080 端口映射到容器内的 80)
# -e <Key>=<Value>    设置环境变量。例如 -e MYSQL_ROOT_PASSWORD=123456
# --restart <策略>    重启策略:
#                     ↳ always: 无论如何退出都自动重启 (哪怕开机重启也会拉起)
#                     ↳ unless-stopped: 手动停止的不重启,意外退出的才重启
# -it                 分配交互式终端并保持输入打开 (进容器内部必备)
# --rm                用完即焚 (容器停掉后立即自动删除,常用于临时测试)

👉 经典组合示例:

  • 启动常驻服务: docker run -d --name my_nginx -p 80:80 --restart always nginx
  • 启动临时测试环境: docker run -it --rm alpine /bin/sh (退出立刻销毁)

2. 状态查看与基础操作

1
2
3
4
5
6
docker ps               # 查看正在运行的容器
docker ps -a            # 查看所有容器 (包含已停止的、运行报错退出的)
docker stop <容器ID/名>  # 优雅停止容器
docker start <容器ID/名> # 重新启动已停止的容器
docker rm <容器ID/名>    # 删除已停止的容器
docker rm -f <容器ID/名> # 补充:强制删除正在运行的容器

三、 容器交互与调试 (Debug)

当容器跑起来但行为不对时,用这组命令去“诊断”。

1
2
3
4
5
6
7
8
docker logs <容器ID/名>            # 查看容器吐出的日志
docker logs -f <容器ID/名>         # 实时滚动追踪日志 (类似 tail -f)
docker inspect <容器ID/名>         # 查看容器的详细信息 (JSON 格式,看网络 IP、挂载路径等)

# --- 进入运行中的容器内部 ---
# 格式:docker exec [参数] <容器> <命令>
docker exec -it <容器ID/名> /bin/sh  # 进入容器并打开 Shell 交互终端 (最常用)
docker exec <容器ID/名> ps -ef       # 不进入容器,仅仅是让容器执行个命令就把结果返回给你

四、 数据持久化 (Volumes & Mounts)

容器删除了,数据不能丢。Docker 有两种挂载数据的方式:

方式 1:绑定挂载 (Bind Mounts) —— 适合开发写代码

直接把宿主机(你的电脑)上的具体目录,强行覆盖映射到容器里。

  • 语法: -v <宿主机绝对路径>:<容器内路径>
  • 示例: docker run -d -p 80:80 -v /Users/freedom/Downloads/html:/usr/share/nginx/html nginx

方式 2:具名卷 (Named Volumes) —— 适合数据库存数据

由 Docker 全权管理的数据卷,你不必关心它实际存在宿主机的哪个深层目录里。

1
2
3
4
5
6
7
8
docker volume create nginx_html     # 创建一个卷
docker volume ls                    # 查看已创建的卷列表
docker volume inspect nginx_html    # 查看该卷的详细信息 (含真实存储路径)
docker volume rm nginx_html         # 删除特定卷
docker volume prune                 # 删除所有未被任何容器使用的卷

# 使用卷启动容器示例:
docker run -d -v nginx_html:/usr/share/nginx/html nginx

五、 网络管理 (Networks)

控制容器之间、容器与宿主机之间的网络通信。

1
2
3
4
5
6
7
8
docker network create network1      # 创建一个自定义的子网网络
docker network ls                   # 补充:查看本机所有 Docker 网络

# --- 启动时的网络参数 ---
# --network <子网名>    将容器加入指定的子网 (同子网内的容器,可以直接用容器名字互相 ping 通!)
# --network none        完全隔离,不给容器分配网络
# --network host        直接使用宿主机网络启动容器。 
#                       ⚠️ 避坑:仅限 Linux 系统生效!在 Mac 和 Windows 的 Docker Desktop 上无效!

六、 容器编排 (Docker Compose)

解决多容器联合部署的痛点(如 Nginx + SpringBoot + MySQL + Redis)。用 YAML 文件代替冗长难记的 docker run 命令。

1. 核心配置文件 (docker-compose.yml) 示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: '3.8'

services:
  # 服务一:数据库
  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: my_secret_password
      MYSQL_DATABASE: wordpress
    volumes:
      - db_data:/var/lib/mysql

  # 服务二:WordPress 后端程序
  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "8080:80"        # 映射到宿主机 8080 端口
    environment:
      WORDPRESS_DB_HOST: db  # 💡 核心魔法:由于在同一个 compose 文件下,直接用服务名 "db" 就能通信!
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: my_secret_password
    depends_on:
      - db               # 控制启动顺序:告诉 Docker 必须等 db 启动后,再启动 wordpress

# 声明需要用到的具名卷
volumes:
  db_data:               

2. 补充:Docker Compose 常用执行命令

这些命令必须在 docker-compose.yml 文件所在的同级目录下执行:

1
2
3
4
docker compose up -d       # 一键启动并后台运行所有服务 (等同于 run 的批量版)
docker compose down        # 一键停止并删除所有相关的容器和网络 (不删数据卷)
docker compose ps          # 查看当前 compose 项目下的容器状态
docker compose logs -f     # 混合查看所有容器的滚动日志