Docker 入门第一阶段:建立正确认知与初体验
系列:Docker 从零到实战
阶段:第一阶段(基础概念)
预计学习时间:1~2 天
更新时间:2026 年 7 月
写在前面
如果你已经按照上一篇教程在 Windows 11 或 Linux 上装好了 Docker,并配置好了国内镜像加速,那么恭喜你------你已经完成了 Docker 学习路线中最重要的 第 0 步。
接下来,不要急着写 Dockerfile,也不要一上来就研究 Kubernetes。第一阶段的目标很简单:
建立正确的概念认知,并完成你的第一次容器运行。
学完本文,你将能够:
- 说清楚 Docker 是什么、解决什么问题
- 区分镜像、容器、仓库等核心概念
- 独立运行、查看、停止、删除一个容器
- 理解
docker run中最常见的几个参数
目录
- [1. Docker 是什么](#1. Docker 是什么)
- [2. 五个核心概念](#2. 五个核心概念)
- [3. 环境检查](#3. 环境检查)
- [4. 第一次运行容器](#4. 第一次运行容器)
- [5. 常用命令速览](#5. 常用命令速览)
- [6. 动手练习](#6. 动手练习)
- [7. 阶段小结与自测](#7. 阶段小结与自测)
- [8. 下一步学什么](#8. 下一步学什么)
1. Docker 是什么
1.1 一句话解释
Docker 是一种容器技术,让你把应用和它的依赖打包在一起,在任何地方都能一致地运行。
1.2 它解决什么问题
在传统部署中,我们经常遇到这类烦恼:
| 场景 | 典型吐槽 |
|---|---|
| 新同事入职 | 「我电脑上跑不起来,你那边是好的啊?」 |
| 测试通过、上线报错 | 「我机器上明明没问题!」 |
| 环境搭建 | 「装 MySQL、Redis、Node、Nginx 花了一上午」 |
| 版本冲突 | 「这个项目要 Python 3.8,那个项目要 3.12」 |
Docker 的核心价值就是:一次打包,到处运行。
你把应用和运行时、依赖、配置一起打成镜像(Image),然后在任何装了 Docker 的机器上启动容器(Container),环境保持一致。
1.3 容器 vs 虚拟机
初学者常把 Docker 和虚拟机混淆,可以用这张表来区分:
| 对比项 | 虚拟机(VM) | Docker 容器 |
|---|---|---|
| 启动速度 | 慢(分钟级) | 快(秒级) |
| 资源占用 | 重(每个 VM 要完整操作系统) | 轻(共享宿主机内核) |
| 隔离级别 | 强(硬件级虚拟化) | 进程级隔离 |
| 典型用途 | 运行完整操作系统 | 运行单个应用或服务 |
可以把这个比喻记在心里:
- 虚拟机 = 一栋楼里的一套独立公寓(有自己的厨房、卫生间)
- 容器 = 公寓里的一个房间(共享大楼基础设施,但各自独立)
2. 五个核心概念
第一阶段,只需要牢牢记住下面 5 个词。
2.1 镜像(Image)
镜像是只读模板,里面打包了运行应用所需的一切:代码、运行时、依赖库、环境变量、配置文件。
类比理解:
- 镜像 ≈ 安装光盘 / 系统镜像文件
- 例如:
nginx、redis、node:20、ubuntu:22.04都是镜像名
特点:
- 只读,不能直接修改
- 可以基于已有镜像叠加出新镜像(后续 Dockerfile 阶段会学)
- 存储在本地或远程仓库中
2.2 容器(Container)
容器是镜像运行起来的实例。
类比理解:
- 容器 ≈ 正在运行的程序
- 同一个镜像可以启动多个容器,彼此独立
特点:
- 可读可写(容器层)
- 有独立的生命周期:创建 → 运行 → 停止 → 删除
- 删除容器后,如果没有做数据持久化,容器内的修改会丢失
一句话区分:镜像是模板,容器是实例。
2.3 仓库(Registry)
仓库是存放和分发镜像的地方。
最常见的公共仓库是 Docker Hub,类似「应用商店」。
常用命令:
bash
# 从仓库拉取镜像到本地
docker pull nginx
# 把本地镜像推送到仓库(后续阶段再学)
docker push my-image:1.0
国内由于网络原因,通常需要配置镜像加速源(你应该已经配好了)。
2.4 守护进程(Daemon)
Docker 守护进程是真正干活的后台服务,负责:
- 管理镜像
- 创建和运行容器
- 处理网络、存储等底层工作
你执行 docker run 时,客户端把命令发给守护进程,由它来实际操作。
如果守护进程没启动,你会看到这类报错:
Cannot connect to the Docker daemon
Windows 11 :确认 Docker Desktop 已启动(任务栏有鲸鱼图标)
Linux :执行 sudo systemctl status docker 检查服务状态
2.5 客户端(CLI)
客户端就是你敲的 docker 命令。
bash
docker --version # 查看客户端版本
docker info # 查看客户端和守护进程信息
docker ps # 查看运行中的容器
docker 命令本身不直接运行容器,它只是向守护进程发送请求。
3. 环境检查
动手之前,先确认 Docker 环境正常。
3.1 检查版本
bash
docker --version
docker compose version
预期输出类似:
Docker version 29.x.x, build xxxxx
Docker Compose version v2.x.x
3.2 检查守护进程
bash
docker info
正常应能看到 Server Version、Storage Driver、Registry Mirrors 等信息。
如果只看到 Client 信息、Server 部分报错,说明守护进程未运行,先启动 Docker Desktop 或 Linux 上的 docker 服务。
3.3 检查镜像加速(可选)
bash
# Windows(PowerShell / Git Bash)
docker info | findstr /i "Registry Mirrors"
# Linux / macOS
docker info | grep -A 5 "Registry Mirrors"
若显示了你配置的国内镜像地址,说明加速已生效。
4. 第一次运行容器
我们来运行一个 Nginx 容器------这是 Docker 学习中最经典的 Hello World 级别练习。
4.1 一条命令跑起来
bash
docker run -d -p 8080:80 --name my-nginx nginx
然后打开浏览器访问:
http://localhost:8080
看到 「Welcome to nginx!」 页面,说明成功了。
4.2 命令拆解
这条命令信息量很大,逐个拆解:
bash
docker run -d -p 8080:80 --name my-nginx nginx
# │ │ │ │ └── 镜像名(本地没有会自动从仓库拉取)
# │ │ │ └── 给容器取个名字,方便后续操作
# │ │ └── 端口映射:宿主机 8080 → 容器 80
# │ └── 后台运行(detached),不占用当前终端
# └── 基于镜像创建并启动一个容器
-d(后台运行)
不加 -d 时,容器会占用当前终端,Ctrl+C 可能导致容器停止。
加 -d 后容器在后台运行,终端可以继续使用。
-p 8080:80(端口映射)
格式:-p 宿主机端口:容器端口
- 容器内的 Nginx 监听 80 端口
- 你通过宿主机的
8080端口访问 - 访问
localhost:8080就等于访问容器内的80
--name my-nginx(容器名称)
不写 --name 时,Docker 会随机生成一个名字(如 fervent_euler)。
自定义名字后,后续操作更直观:
bash
docker stop my-nginx # 用名字操作
docker logs my-nginx # 比记容器 ID 方便
nginx(镜像名)
- 本地有
nginx镜像 → 直接用来创建容器 - 本地没有 → 自动执行
docker pull nginx拉取后再创建
5. 常用命令速览
第一阶段掌握下面这组命令就够了。
5.1 镜像相关
bash
# 查看本地已有镜像
docker images
# 从仓库拉取指定镜像
docker pull nginx
docker pull redis:7
# 删除本地镜像
docker rmi nginx
5.2 容器生命周期
bash
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动已停止的容器
docker start my-nginx
# 重启容器
docker restart my-nginx
# 删除容器(须先停止)
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
5.3 查看信息与调试
bash
# 查看容器日志
docker logs my-nginx
# 实时跟踪日志(类似 tail -f)
docker logs -f my-nginx
# 查看容器详细信息
docker inspect my-nginx
# 查看容器资源占用
docker stats
5.4 进入容器
bash
# 进入正在运行的容器(交互式终端)
docker exec -it my-nginx bash
进入后可以执行:
bash
cat /etc/nginx/nginx.conf # 查看 Nginx 配置
exit # 退出容器(不会停止容器)
6. 动手练习
建议按顺序完成以下 3 个练习,每个都亲自敲一遍。
练习 1:Nginx 完整生命周期
目标: 跑起来 → 访问 → 看日志 → 停止 → 删除
bash
# 1. 启动
docker run -d -p 8080:80 --name my-nginx nginx
# 2. 确认运行中
docker ps
# 3. 浏览器访问 http://localhost:8080
# 4. 查看日志
docker logs my-nginx
# 5. 停止
docker stop my-nginx
# 6. 确认已停止
docker ps -a
# 7. 删除
docker rm my-nginx
思考: 删除容器后,本地的 nginx 镜像还在吗?用 docker images 验证。
练习 2:交互式运行 Ubuntu
目标: 理解 -it 参数,体验「一次性容器」
bash
docker run -it ubuntu:22.04 bash
进入容器后试试:
bash
cat /etc/os-release # 查看系统版本
ls / # 查看根目录
exit # 退出
再用 docker ps -a 查看------这个容器已经退出了(状态为 Exited)。
思考: -it 和 -d 分别适合什么场景?
| 参数 | 适用场景 |
|---|---|
-it |
需要进入容器交互操作(调试、临时命令) |
-d |
服务长期在后台运行(Web 服务、数据库) |
练习 3:运行 Redis 并测试连接
目标: 运行一个有名字的服务容器,并进入其中执行命令
bash
# 1. 启动 Redis
docker run -d --name my-redis redis:7
# 2. 确认运行
docker ps
# 3. 进入 Redis 容器执行命令
docker exec -it my-redis redis-cli ping
预期输出:
PONG
思考: 为什么不需要 -p 端口映射也能 docker exec 进去?
因为 exec 是直接进入容器内部执行命令,不经过宿主机端口。
7. 阶段小结与自测
7.1 本阶段知识脑图
Docker 第一阶段
├── 概念
│ ├── 镜像 Image(只读模板)
│ ├── 容器 Container(运行实例)
│ ├── 仓库 Registry(镜像商店)
│ ├── 守护进程 Daemon(后台服务)
│ └── 客户端 CLI(你敲的命令)
├── 核心命令
│ ├── docker run / stop / start / rm
│ ├── docker ps / ps -a
│ ├── docker images / pull / rmi
│ ├── docker logs / exec / inspect
│ └── docker stats
└── 核心参数
├── -d 后台运行
├── -it 交互式终端
├── -p 端口映射
└── --name 容器命名
7.2 自测清单
学完本阶段,对照以下问题自测。能答上来就可以进入第二阶段。
- Docker 和虚拟机有什么区别?
- 镜像和容器的关系是什么?
-
docker run -d -p 8080:80 --name web nginx每个参数是什么意思? - 如何查看正在运行的容器?如何查看包括已停止的所有容器?
- 如何查看容器日志?
- 如何进入正在运行的容器?
- 停止容器和删除容器有什么区别?
- 删除容器后,镜像还在吗?
- 遇到
Cannot connect to the Docker daemon怎么排查?
7.3 常见错误与解决
| 报错 | 原因 | 解决 |
|---|---|---|
Cannot connect to the Docker daemon |
守护进程未启动 | 启动 Docker Desktop 或 systemctl start docker |
port is already allocated |
宿主机端口被占用 | 换端口,如 -p 8081:80 |
Conflict. The container name is already in use |
容器名重复 | 换名字或 docker rm 删除旧容器 |
Unable to find image locally |
本地没有该镜像 | 正常现象,Docker 会自动 pull |
pull access denied |
镜像不存在或无权限 | 检查镜像名拼写,或需要 docker login |
8. 下一步学什么
完成第一阶段后,进入 第二阶段:掌握日常命令,你将学习:
- 更多容器管理技巧
- 环境变量的使用
- 运行 MySQL 等带配置的服务
- 镜像标签(tag)与版本管理
- 更系统的排错方法
第二阶段预习命令:
bash
# 带环境变量启动 MySQL
docker run -d \
--name my-mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
mysql:8
# 查看容器环境变量
docker inspect my-mysql | grep -i env
附录:第一阶段命令速查卡
bash
# ── 环境检查 ──
docker --version
docker info
docker ps
# ── 运行容器 ──
docker run -d -p <宿主机端口>:<容器端口> --name <名称> <镜像>
docker run -it <镜像> bash
# ── 管理容器 ──
docker ps -a
docker stop <名称>
docker start <名称>
docker restart <名称>
docker rm <名称>
docker rm -f <名称>
# ── 镜像管理 ──
docker images
docker pull <镜像>:<标签>
docker rmi <镜像>
# ── 调试 ──
docker logs <名称>
docker logs -f <名称>
docker exec -it <名称> bash
docker inspect <名称>
docker stats
学习建议: Docker 是一门动手实践的技术。每看一个命令,就在终端里敲一遍。遇到报错不要慌,先读错误信息,再对照本文的「常见错误」表排查。
祝学习顺利,第二阶段见!
本文是「Docker 从零到实战」系列的第一篇。环境安装与镜像加速配置请参考同系列前置文章。