Docker 入门第一阶段:建立正确认知与初体验
Docker 入门第一阶段:建立正确认知与初体验
系列:Docker 从零到实战
阶段:第一阶段(基础概念)
预计学习时间:1~2 天
更新时间:2026 年 7 月
写在前面
如果你已经按照上一篇教程在 Windows 11 或 Linux 上装好了 Docker,并配置好了国内镜像加速,那么恭喜你——你已经完成了 Docker 学习路线中最重要的第 0 步。
接下来,不要急着写Dockerfile,也不要一上来就研究 Kubernetes。第一阶段的目标很简单:
建立正确的概念认知,并完成你的第一次容器运行。
学完本文,你将能够:
- 说清楚 Docker 是什么、解决什么问题
- 区分镜像、容器、仓库等核心概念
- 独立运行、查看、停止、删除一个容器
- 理解
docker run中最常见的几个参数
目录
- 1. Docker 是什么
- 2. 五个核心概念
- 3. 环境检查
- 4. 第一次运行容器
- 5. 常用命令速览
- 6. 动手练习
- 7. 阶段小结与自测
- 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,类似「应用商店」。
常用命令:
# 从仓库拉取镜像到本地dockerpull nginx# 把本地镜像推送到仓库(后续阶段再学)dockerpush my-image:1.0国内由于网络原因,通常需要配置镜像加速源(你应该已经配好了)。
2.4 守护进程(Daemon)
Docker 守护进程是真正干活的后台服务,负责:
- 管理镜像
- 创建和运行容器
- 处理网络、存储等底层工作
你执行docker run时,客户端把命令发给守护进程,由它来实际操作。
如果守护进程没启动,你会看到这类报错:
Cannot connect to the Docker daemonWindows 11:确认 Docker Desktop 已启动(任务栏有鲸鱼图标)
Linux:执行sudo systemctl status docker检查服务状态
2.5 客户端(CLI)
客户端就是你敲的docker命令。
docker--version# 查看客户端版本dockerinfo# 查看客户端和守护进程信息dockerps# 查看运行中的容器docker命令本身不直接运行容器,它只是向守护进程发送请求。
3. 环境检查
动手之前,先确认 Docker 环境正常。
3.1 检查版本
docker--versiondockercompose version预期输出类似:
Docker version 29.x.x, build xxxxx Docker Compose version v2.x.x3.2 检查守护进程
dockerinfo正常应能看到Server Version、Storage Driver、Registry Mirrors等信息。
如果只看到 Client 信息、Server 部分报错,说明守护进程未运行,先启动 Docker Desktop 或 Linux 上的 docker 服务。
3.3 检查镜像加速(可选)
# Windows(PowerShell / Git Bash)dockerinfo|findstr /i"Registry Mirrors"# Linux / macOSdockerinfo|grep-A5"Registry Mirrors"若显示了你配置的国内镜像地址,说明加速已生效。
4. 第一次运行容器
我们来运行一个Nginx容器——这是 Docker 学习中最经典的 Hello World 级别练习。
4.1 一条命令跑起来
dockerrun-d-p8080:80--namemy-nginx nginx然后打开浏览器访问:
http://localhost:8080看到「Welcome to nginx!」页面,说明成功了。
4.2 命令拆解
这条命令信息量很大,逐个拆解:
dockerrun-d-p8080:80--namemy-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)。
自定义名字后,后续操作更直观:
dockerstop my-nginx# 用名字操作dockerlogs my-nginx# 比记容器 ID 方便nginx(镜像名)
- 本地有
nginx镜像 → 直接用来创建容器 - 本地没有 → 自动执行
docker pull nginx拉取后再创建
5. 常用命令速览
第一阶段掌握下面这组命令就够了。
5.1 镜像相关
# 查看本地已有镜像dockerimages# 从仓库拉取指定镜像dockerpull nginxdockerpull redis:7# 删除本地镜像dockerrmi nginx5.2 容器生命周期
# 查看正在运行的容器dockerps# 查看所有容器(包括已停止的)dockerps-a# 停止容器dockerstop my-nginx# 启动已停止的容器dockerstart my-nginx# 重启容器dockerrestart my-nginx# 删除容器(须先停止)dockerrmmy-nginx# 强制删除运行中的容器dockerrm-fmy-nginx5.3 查看信息与调试
# 查看容器日志dockerlogs my-nginx# 实时跟踪日志(类似 tail -f)dockerlogs-fmy-nginx# 查看容器详细信息dockerinspect my-nginx# 查看容器资源占用dockerstats5.4 进入容器
# 进入正在运行的容器(交互式终端)dockerexec-itmy-nginxbash进入后可以执行:
cat/etc/nginx/nginx.conf# 查看 Nginx 配置exit# 退出容器(不会停止容器)6. 动手练习
建议按顺序完成以下 3 个练习,每个都亲自敲一遍。
练习 1:Nginx 完整生命周期
目标:跑起来 → 访问 → 看日志 → 停止 → 删除
# 1. 启动dockerrun-d-p8080:80--namemy-nginx nginx# 2. 确认运行中dockerps# 3. 浏览器访问 http://localhost:8080# 4. 查看日志dockerlogs my-nginx# 5. 停止dockerstop my-nginx# 6. 确认已停止dockerps-a# 7. 删除dockerrmmy-nginx思考:删除容器后,本地的nginx镜像还在吗?用docker images验证。
练习 2:交互式运行 Ubuntu
目标:理解-it参数,体验「一次性容器」
dockerrun-itubuntu:22.04bash进入容器后试试:
cat/etc/os-release# 查看系统版本ls/# 查看根目录exit# 退出再用docker ps -a查看——这个容器已经退出了(状态为Exited)。
思考:-it和-d分别适合什么场景?
| 参数 | 适用场景 |
|---|---|
-it | 需要进入容器交互操作(调试、临时命令) |
-d | 服务长期在后台运行(Web 服务、数据库) |
练习 3:运行 Redis 并测试连接
目标:运行一个有名字的服务容器,并进入其中执行命令
# 1. 启动 Redisdockerrun-d--namemy-redis redis:7# 2. 确认运行dockerps# 3. 进入 Redis 容器执行命令dockerexec-itmy-redis redis-cliping预期输出:
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)与版本管理
- 更系统的排错方法
第二阶段预习命令:
# 带环境变量启动 MySQLdockerrun-d\--namemy-mysql\-eMYSQL_ROOT_PASSWORD=123456\-p3306:3306\mysql:8# 查看容器环境变量dockerinspect my-mysql|grep-ienv附录:第一阶段命令速查卡
# ── 环境检查 ──docker--versiondockerinfodockerps# ── 运行容器 ──dockerrun-d-p<宿主机端口>:<容器端口>--name<名称><镜像>dockerrun-it<镜像>bash# ── 管理容器 ──dockerps-adockerstop<名称>dockerstart<名称>dockerrestart<名称>dockerrm<名称>dockerrm-f<名称># ── 镜像管理 ──dockerimagesdockerpull<镜像>:<标签>dockerrmi<镜像># ── 调试 ──dockerlogs<名称>dockerlogs-f<名称>dockerexec-it<名称>bashdockerinspect<名称>dockerstats学习建议:Docker 是一门动手实践的技术。每看一个命令,就在终端里敲一遍。遇到报错不要慌,先读错误信息,再对照本文的「常见错误」表排查。
祝学习顺利,第二阶段见!
本文是「Docker 从零到实战」系列的第一篇。环境安装与镜像加速配置请参考同系列前置文章。