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)

镜像是只读模板,里面打包了运行应用所需的一切:代码、运行时、依赖库、环境变量、配置文件。

类比理解:

  • 镜像 ≈安装光盘 / 系统镜像文件
  • 例如:nginxredisnode:20ubuntu: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 daemon

Windows 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.x

3.2 检查守护进程

dockerinfo

正常应能看到Server VersionStorage DriverRegistry 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 nginx

5.2 容器生命周期

# 查看正在运行的容器dockerps# 查看所有容器(包括已停止的)dockerps-a# 停止容器dockerstop my-nginx# 启动已停止的容器dockerstart my-nginx# 重启容器dockerrestart my-nginx# 删除容器(须先停止)dockerrmmy-nginx# 强制删除运行中的容器dockerrm-fmy-nginx

5.3 查看信息与调试

# 查看容器日志dockerlogs my-nginx# 实时跟踪日志(类似 tail -f)dockerlogs-fmy-nginx# 查看容器详细信息dockerinspect my-nginx# 查看容器资源占用dockerstats

5.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 从零到实战」系列的第一篇。环境安装与镜像加速配置请参考同系列前置文章。