Chapter 02

安装与基础命令

安装 Docker,掌握镜像操作与容器生命周期管理的核心命令

安装 Docker

Mac / Windows:Docker Desktop

前往 https://www.docker.com/products/docker-desktop 下载对应平台安装包。安装后启动 Docker Desktop 应用,等待状态栏图标变为运行状态。

💡

Apple Silicon(M1/M2/M3) — 下载 Apple Silicon 版本,Docker Desktop 内置了 Rosetta 2 兼容层,可以运行 x86 镜像(性能略低)。原生 ARM 镜像性能最佳。

Linux(Ubuntu):Docker Engine


# 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# 添加 Docker 官方 GPG Key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加 Docker apt 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 允许当前用户使用 Docker(无需 sudo)
sudo usermod -aG docker $USER
newgrp docker

验证安装


# 查看 Docker 客户端和服务端版本
docker version

# 查看系统详细信息(容器数、镜像数、存储驱动等)
docker info

# 运行第一个容器(Hello World)
docker run hello-world

docker run hello-world 会自动从 Docker Hub 拉取 hello-world 镜像并运行,输出一段欢迎消息——这证明 Docker 安装成功且网络正常。

镜像命令

拉取镜像


# 拉取最新版(实际是 latest 标签,不推荐生产使用)
docker pull nginx

# 拉取指定版本(推荐)
docker pull nginx:1.25

# 拉取 Alpine 变体(更小)
docker pull node:18-alpine

镜像标签格式:仓库名:标签。官方镜像只有仓库名(如 nginx),第三方镜像格式为 用户名/仓库名:标签(如 mysql/mysql-server:8.0)。

查看本地镜像


# 两种等价写法
docker images
docker image ls

# 查看镜像 ID(短格式)
docker images -q

# 查看指定镜像
docker images nginx

删除镜像


# 删除指定镜像(两种等价写法)
docker image rm nginx:1.25
docker rmi nginx:1.25

# 通过镜像 ID 删除
docker rmi abc123def456

# 强制删除(即使有容器在使用)
docker rmi -f nginx:1.25

# 清理悬空镜像(无标签的中间层镜像)
docker image prune

# 清理所有未使用镜像
docker image prune -a
⚠️

悬空镜像(Dangling Image) — 当你重新构建同名镜像时,旧镜像失去标签但仍占用磁盘空间,显示为 <none>:<none>。定期用 docker image prune 清理。

容器生命周期

容器在其生命周期中有多种状态:


     docker create
          │
          ▼
      Created ──── docker start ────▶ Running
                                        │    │
                                docker pause  docker stop / docker kill
                                        │    │
                                        ▼    ▼
                                      Paused  Stopped/Exited
                                        │    │
                                docker unpause  docker start
                                               │
                                               ▼
                                            docker rm ──▶ Removed

docker run 常用参数详解


docker run \
  -d \                          # 后台运行(detached mode)
  -p 8080:80 \                 # 端口映射:宿主机8080 → 容器80
  -v /host/path:/container/path \ # 绑定挂载
  --name my-nginx \             # 为容器指定名称
  --rm \                        # 容器退出后自动删除
  -e MYSQL_ROOT_PASSWORD=secret \ # 设置环境变量
  -it \                         # 交互模式 + 伪终端(配合 bash 使用)
  --network my-network \        # 加入指定网络
  --memory "512m" \             # 限制内存
  --cpus "0.5" \                # 限制 CPU(0.5 = 半个核心)
  nginx:1.25                    # 镜像名:标签
参数说明示例
-d后台运行,返回容器 IDdocker run -d nginx
-p端口映射,宿主机:容器-p 3000:3000
-v卷挂载(命名卷或绑定挂载)-v mydata:/var/lib/mysql
--name指定容器名(不指定则随机)--name web
--rm退出后自动删除容器适合一次性任务
-e设置环境变量-e NODE_ENV=production
-it保持标准输入 + 分配伪终端docker run -it ubuntu bash

容器启停命令


# 停止容器(发送 SIGTERM,给15秒优雅退出,超时发 SIGKILL)
docker stop my-nginx

# 强制停止(立即发送 SIGKILL)
docker kill my-nginx

# 启动已停止的容器
docker start my-nginx

# 重启容器
docker restart my-nginx

# 暂停 / 恢复容器(冻结进程,不终止)
docker pause my-nginx
docker unpause my-nginx

# 删除已停止的容器
docker rm my-nginx

# 强制删除运行中的容器(等同于 stop + rm)
docker rm -f my-nginx

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

容器交互与调试

进入运行中的容器


# 在运行中的容器内执行命令
docker exec -it my-nginx bash

# 如果没有 bash,用 sh
docker exec -it my-nginx sh

# 执行单条命令
docker exec my-nginx nginx -t  # 检查 nginx 配置

查看日志


# 查看所有日志
docker logs my-nginx

# 实时跟踪日志(-f = follow)
docker logs -f my-nginx

# 查看最近 50 行
docker logs --tail 50 my-nginx

# 带时间戳
docker logs -t my-nginx

查看容器详情与资源


# 查看容器详细 JSON 信息(IP、挂载、环境变量等)
docker inspect my-nginx

# 提取特定字段(IP 地址)
docker inspect --format '{{.NetworkSettings.IPAddress}}' my-nginx

# 实时资源监控(CPU/内存/IO/网络)
docker stats

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

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

实战:运行 Nginx 容器

通过一个完整的实战,串联以上命令:


# 1. 后台运行 Nginx,映射端口 8080
docker run -d -p 8080:80 --name my-nginx nginx:1.25

# 2. 验证运行中
docker ps

# 3. 访问页面(应显示 nginx 欢迎页)
curl http://localhost:8080

# 4. 查看实时日志
docker logs -f my-nginx

# 5. 进入容器,修改 nginx 默认页面
docker exec -it my-nginx bash
# 在容器内执行:
# echo "Hello Docker!" > /usr/share/nginx/html/index.html
# exit

# 6. 再次访问,看到修改后的页面
curl http://localhost:8080

# 7. 停止并删除容器
docker stop my-nginx
docker rm my-nginx

注意 — 在容器内修改的文件在容器删除后就消失了。这正是 Volume(数据卷)的用途,我们将在第6章详细介绍。