
Docker 入门第一阶段建立正确认知与初体验系列Docker 从零到实战阶段第一阶段基础概念预计学习时间12 天更新时间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 和虚拟机混淆可以用这张表来区分对比项虚拟机VMDocker 容器启动速度慢分钟级快秒级资源占用重每个 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 守护进程DaemonDocker 守护进程是真正干活的后台服务负责管理镜像创建和运行容器处理网络、存储等底层工作你执行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 检查镜像加速可选# WindowsPowerShell / Git Bashdockerinfo|findstr /iRegistry Mirrors# Linux / macOSdockerinfo|grep-A5Registry 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时容器会占用当前终端CtrlC 可能导致容器停止。加-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 -fdockerlogs-fmy-nginx# 查看容器详细信息dockerinspect my-nginx# 查看容器资源占用dockerstats5.4 进入容器# 进入正在运行的容器交互式终端dockerexec-itmy-nginxbash进入后可以执行cat/etc/nginx/nginx.conf# 查看 Nginx 配置exit# 退出容器不会停止容器6. 动手练习建议按顺序完成以下 3 个练习每个都亲自敲一遍。练习 1Nginx 完整生命周期目标跑起来 → 访问 → 看日志 → 停止 → 删除# 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 dockerport is already allocated宿主机端口被占用换端口如-p 8081:80Conflict. The container name is already in use容器名重复换名字或docker rm删除旧容器Unable to find image locally本地没有该镜像正常现象Docker 会自动 pullpull access denied镜像不存在或无权限检查镜像名拼写或需要docker login8. 下一步学什么完成第一阶段后进入第二阶段掌握日常命令你将学习更多容器管理技巧环境变量的使用运行 MySQL 等带配置的服务镜像标签tag与版本管理更系统的排错方法第二阶段预习命令# 带环境变量启动 MySQLdockerrun-d\--namemy-mysql\-eMYSQL_ROOT_PASSWORD123456\-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 从零到实战」系列的第一篇。环境安装与镜像加速配置请参考同系列前置文章。