在云原生和微服务的时代,Docker 早已成为开发者和运维工程师的必备技能。无论是解决 “本地能跑,上线就报错” 的环境不一致问题,还是实现应用的快速部署、跨环境迁移,Docker 都能轻松搞定。但对于零基础新手来说,镜像、容器、Dockerfile 这些概念总显得抽象,命令行操作也容易一头雾水。
今天这篇教程,全程用通俗例子拆解 Docker 核心知识点,从基础认知到实操命令,从架构原理到底层技术,逻辑清晰、内容详实,零基础也能轻松入门,手把手教你掌握 Docker 的核心用法。
一、Docker 到底是什么?一句话讲清核心作用
Docker 是一款面向开发者和运维人员的容器化平台,核心功能就是把应用程序和它的运行环境(包括代码、运行时、系统库、配置等)打包成一个独立的 “容器”,实现一次构建,到处运行。
容器技术并非 Docker 首创,但它把容器化做的简单易用,完美解决了开发、测试、部署各环节的环境不一致问题,让应用部署像 “复制粘贴” 一样简单,这也是 Docker 能快速普及的核心原因。
很多人会把容器和虚拟机混为一谈,其实二者差异巨大,用一个生活例子就能秒懂:虚拟机相当于租了一套带全套家具的房子,每套房子都有独立的水电和配套,空间大、成本高、搬家麻烦;而容器则是共享公寓的单间,水电燃气共用,只拎包入住自己的东西,轻量、便宜、迁移方便。
具体来说,容器和虚拟机的核心差异主要体现在 5 个方面:

- 内核:容器共享宿主机的 Linux 内核,虚拟机每个都有独立的客户机内核;
- 资源占用:容器仅占用应用运行的必要资源,无冗余,轻量高效;虚拟机需要运行完整的操作系统,资源占用笨重,冗余度高;
- 启动速度:容器秒级启动,堪比打开微信的速度;虚拟机分钟级启动,和重启电脑差不多;
- 移植性:容器可跨环境无缝迁移,像用 U 盘拷贝文件一样简单;虚拟机移植难度高,如同搬家搬全套家具;
- 资源利用率:容器资源利用率极高,一台服务器能同时运行上百个;虚拟机利用率低,一台服务器跑几个就会占满资源。
正是这些优势,让 Docker 成为云原生开发的基础,也是后续学习 K8s、微服务的必备前提。
二、Docker 核心架构:3 大组件,用 “寄快递” 轻松理解
Docker 采用客户端 - 服务器架构,不用死记复杂原理,用我们日常寄快递的流程就能轻松理解,核心由 3 大组件构成,彼此分工明确、协同工作:
- Docker 客户端:相当于寄快递的你(寄件人)。我们平时敲的docker run、docker build等所有命令,都是通过客户端发起操作请求,就像在快递 APP 上下单一样;
- Docker 守护进程(dockerd):相当于快递仓库的分拣员。它是后台长期运行的服务程序,也是 Docker 的核心执行组件,真正负责处理容器 / 镜像的构建、运行、分发和管理,就像分拣员处理包裹的打包、运输、派送;
- Docker 仓库:相当于快递驿站或仓库。主要作用是存储 Docker 镜像,类似代码仓库的功能,公共的仓库有 Docker Hub,国内有各云厂商的镜像仓库,企业也能搭建自己的私有仓库。
这三大组件通过 REST API 实现通信,既可以在本地电脑上完成所有操作,也能远程连接守护进程实现异地操作,就像我们既能在本地寄快递,也能异地寄件一样,逻辑非常简单。
三、Docker 灵魂概念:镜像 & 容器,用 “奶茶店” 例子秒懂
想要掌握 Docker,必须先搞懂镜像(Image) 和容器(Container) 这两个核心概念,这是 Docker 的灵魂,搞懂它们,Docker 就入门了 80%。全程用奶茶店的例子讲解,一看就会:
镜像(Image):容器的 “静态奶茶配方”
镜像是轻量级、只读的可执行软件包,包含了运行应用所需的所有内容,采用分层结构(底层基础镜像 + 上层自定义层),一旦创建就无法修改。
这就像奶茶店的珍珠奶茶配方,配方里明确规定了红茶、牛奶、珍珠、糖的比例,配方本身是固定的、只读的,所有店员都能按照这个配方制作奶茶,而且一个配方可以做出无数杯奶茶,镜像也是如此,一个镜像可以启动无数个容器。
容器(Container):镜像的 “动态做好的奶茶”
容器是镜像的运行时实例,简单说就是镜像在内存中执行后的状态,拥有独立的运行环境,可被创建、启动、停止、删除。
容器会在镜像的只读层基础上,新增一层可读写层:就像按配方做好奶茶后,顾客要求 “少糖、冰饮、加椰果”,这些个性化修改只作用于这一杯奶茶(可读写层),不会改变原始的奶茶配方(镜像只读层);如果这杯奶茶喝完了(删除容器),配方依然保持不变,还能继续做新的奶茶。
镜像与容器的核心关系
- 镜像通过docker run 镜像名命令启动为容器,就像按配方制作奶茶;
- 镜像是静态的模板,容器是动态的运行体,一个镜像可以启动多个容器,彼此相互独立、互不干扰;
- 容器出现故障或被删除,不会影响镜像本身,重新执行启动命令就能生成新的容器。
四、镜像核心操作:从拉取到分发,实操命令直接抄作业
镜像的操作是 Docker 实操的核心,包括拉取、构建、删除、推送等,接下来从基础命令到自定义构建,一步步讲解,新手直接抄作业即可,还会搭配通俗理解,让你知其然也知其所以然。
1. 常用镜像命令(高频必背,直接使用)
所有命令都搭配通俗理解,结合奶茶店例子,记忆更轻松:
- 查看本地镜像:docker images / docker image ls → 看家里有多少种奶茶配方;
- 拉取远端镜像:docker pull 镜像名:版本 → 从奶茶总部获取新的配方(不写版本默认 latest);
- 删除镜像:docker rmi 镜像ID(强制删除加-f) → 扔掉没用的奶茶配方;
- 镜像重命名:docker tag 原镜像名 新镜像名:版本 → 给奶茶配方改个好记的名字;
- 构建镜像:docker build -t 镜像名:版本 . → 自己研发新的奶茶配方(末尾的点表示构建目录为当前文件夹,必加)。
2. 自定义镜像:Dockerfile 核心语法,背会这些就够了
想要把自己的应用打包成镜像,就必须学会写 Dockerfile—— 它是制作自定义镜像的脚本文件,相当于 “手写奶茶配方的步骤单”,核心指令就这 11 个,每个都搭配通俗理解和示例,背会就能满足 90% 的使用场景:
- FROM:指定基础镜像(必写),选奶茶基础配方,示例FROM openjdk:8/FROM centos:7;
- RUN:镜像内执行命令,装软件 / 配环境,按配方准备原料,示例RUN yum install -y vim;
- ENV:设置环境变量,定原料固定比例,示例ENV MYSQL_MAJOR 5.7;
- COPY:主机文件复制到镜像,不解压,直接放原料,示例COPY demo.jar /app/;
- ADD:主机文件复制到镜像,自动解压压缩包,拆原料包装,示例ADD demo.tar.gz /app/;
- WORKDIR:指定工作目录,后续命令基于此执行,定奶茶操作台位置,示例WORKDIR /usr/local/tomcat;
- CMD:容器启动默认命令,可被覆盖,多则最后一个生效,做奶茶的默认步骤,示例CMD ["java","-jar","demo.jar"];
- ENTRYPOINT:容器启动核心命令,不可被覆盖,可配合 CMD 使用,做奶茶的核心步骤,示例ENTRYPOINT ["docker-entrypoint.sh"];
- EXPOSE:声明镜像暴露端口,启动时可通过-p映射到宿主机,奶茶店的取餐窗口,示例EXPOSE 8080;
- VOLUME:指定数据挂载目录,实现数据持久化,奶茶店的原料储存柜,示例VOLUME /var/lib/mysql;
- LABEL:添加镜像元数据 / 标签,给配方贴标签写作者 / 版本,示例LABEL author="dev" version="1.0"。
3. 实战:用 Dockerfile 打包 Spring Boot 项目(最常用场景)
这是开发者最常用的实操场景,把 Spring Boot 项目打包成 Docker 镜像,一步一步跟着做,零出错,相当于研发一杯 “专属奶茶”:
- 开发 Spring Boot 项目,编写简单接口,执行mvn clean package打为 jar 包(准备奶茶核心原料);
- 在 Docker 环境新建目录,上传 jar 包,新建Dockerfile文件并编写上述核心指令(写好专属奶茶配方步骤);
- 构建镜像:docker build -t demo:1.0 .(注意末尾的点,研发专属配方);
- 启动容器:docker run -d --name demo01 -p 8080:8080 demo:1.0(-d 表示后台运行,按配方做一杯奶茶);
- 验证效果:执行docker logs demo01查看日志,宿主机输入curl localhost:8080/接口,能正常访问即表示成功(尝一口奶茶,味道对了)。
4. 镜像仓库:存储与分发,3 类仓库操作超简单
制作好的镜像需要存到仓库,方便自己和他人使用,就像奶茶配方要存到总部仓库,分店随时可取。Docker 镜像仓库主要分 3 类,操作简单,按需选择即可:
- Docker Hub(公共仓库):全球公共的镜像仓库,相当于奶茶品牌的公共配方库,所有人可查看、拉取;登录用docker login,推送前需将镜像重命名为「DockerID / 镜像名:版本」,再执行docker push 镜像名,拉取用docker pull 镜像名;
- 国内云厂商镜像仓库(推荐):国内各云厂商的镜像仓库,速度快、稳定性高,相当于国内奶茶区域仓库;操作步骤和 Docker Hub 类似,仅仓库地址不同,解决国外仓库网速慢的问题;
- 私有仓库 Harbor(企业级):企业可搭建自己的私有镜像仓库,仅内部人员可使用,相当于奶茶品牌的内部配方库;下载 Harbor 安装包解压后,修改harbor.cfg配置文件(改机器 IP,默认密码 Harbor12345),执行sh install.sh即可安装,浏览器输入机器 IP 就能登录管理。
五、容器核心操作:从启动到管理,高频命令 + 进阶技巧
容器是镜像运行后的实例,操作比镜像更多,包括创建、启动、进入、删除、监控等,接下来整理了高频必背命令和实用进阶技巧,依然搭配奶茶店例子,通俗好记。
1. 常用容器命令(敲一遍就会,直接抄)
- 创建并启动容器:docker run -d --name 容器名 -p 宿主机端口:容器端口 镜像名 → 按配方做一杯奶茶,命名为 “奶茶 01”;
- 查看运行中容器:docker ps → 看店里现在有多少杯做好的奶茶;
- 查看所有容器(含退出):docker ps -a → 看店里今天做过的所有奶茶(包括喝完的);
- 进入运行中的容器:docker exec -it 容器名/ID bash → 打开奶茶杯,看看里面的配料(推荐用法,不中断容器运行);
- 查看容器日志:docker logs 容器名(加-f实时查看) → 看这杯奶茶的制作过程记录;
- 停止 / 启动容器:docker stop/start 容器名/ID → 把奶茶暂时放冰箱 / 从冰箱拿出来;
- 删除容器:docker rm 容器名/ID(加-f强制删除) → 扔掉喝完的奶茶杯;
- 查看容器资源使用:docker stats → 看做这杯奶茶消耗了多少原料(CPU / 内存);
- 查看容器详情:docker inspect 容器名/ID → 看这杯奶茶的详细信息(原料、杯型、甜度)。
2. 进阶操作:从容器生成新镜像(临时定制,不推荐生产)
如果对运行中的容器做了修改(比如给容器安装了新软件),可以通过docker commit命令将其打包成新镜像,相当于 “把改过后的奶茶做成新配方”,适合临时定制镜像:
- 启动并修改容器:docker run -d -it --name centos01 centos → 进入容器安装 vim(给奶茶加椰果);
- 生成新镜像:docker commit centos01 centos-vim → 把加椰果的奶茶做成新配方;
- 验证效果:基于新镜像启动容器,检查修改是否生效。
注意:生产环境不推荐这种方式!因为通过该方式生成的新镜像,没有完整的构建步骤记录,别人无法知道镜像的具体修改内容,可维护性极差,优先使用 Dockerfile 编写完整构建步骤。
3. 重要操作:容器资源限制,防止资源抢占
如果不限制容器资源,它会无限制占用宿主机的 CPU 和内存,就像做奶茶的店员把所有原料都用了,其他店员无料可用。核心限制 CPU 和内存,命令简单直接:
- 内存限制:docker run -d --memory 100M --name tomcat01 tomcat → 规定做这杯奶茶最多用 100g 牛奶;
- CPU 限制:docker run -d --cpu-shares 10 --name tomcat02 tomcat → 给奶茶制作排优先级,数值越大(默认 1024),原料分配优先级越高;
也可以用 Weave Scope 实现图形化监控,可视化查看所有容器的资源使用情况,像奶茶店的监控屏一样直观,安装启动命令直接抄:
plaintext
sudo curl -L git.io/scope -o /usr/local/bin/scopesudo chmod a+x /usr/local/bin/scopescope launch 机器IP停止监控用scope stop,还支持多机器监控,执行scope launch IP1 IP2即可。
六、Docker 底层技术:为啥能实现轻量隔离?通俗讲,不深啃
不用搞懂复杂的源码和底层实现,但要知道 Docker 能实现轻量、高效、隔离的核心原因 —— 它基于 Linux 内核的三大核心技术封装,用奶茶店的例子通俗讲解,一看就懂:
- Namespace(命名空间):核心实现资源隔离。就像奶茶店的不同操作台,每个操作台相互独立,店员各做各的奶茶,互不干扰;对应到 Docker,就是为每个容器创建独立的运行环境,实现进程、网络、挂载点、用户等隔离,让容器看起来像独立的服务器;
- CGroups(控制组):核心实现资源限制。好比奶茶店给每个操作台规定原料用量,不能多拿、避免浪费;对应到 Docker,就是精细化管控容器的 CPU、内存、磁盘 I/O、网络等资源,防止容器之间的资源抢占;
- Union File Systems(联合文件系统):核心实现分层存储。类似奶茶店的原料分层摆放,茶底、牛奶、配料分层放置,做奶茶时一层一层添加,还能复用茶底;对应到 Docker,就是实现镜像的分层结构,基础镜像层可被多个自定义镜像复用,支持增量更新,让镜像更轻量、高效。
这三大技术是 Docker 的底层保障,理解了它们,就能彻底明白 Docker 和虚拟机的本质区别,也能理解为什么 Docker 能实现秒级启动、轻量高效。
七、新手学习 Docker 的 3 个实用建议
很多新手学 Docker 容易陷入 “死记命令却不懂逻辑” 的误区,最后越学越乱,分享 3 个实用建议,帮你少走弯路:
- 先懂概念,再记命令:命令只是操作工具,搞懂镜像和容器的核心关系,理解每个操作的底层逻辑,比死记硬背命令更重要,逻辑通了,命令自然就会用;
- 多实操,少空想:找一个简单的项目(比如 Spring Boot 小接口),从头到尾完成镜像构建、容器启动、镜像推送的全流程,一次实操比看十遍教程管用,实操中遇到问题、解决问题,才是最快的学习方式;
- 不用深啃底层,以解决问题为核心:新手阶段不用深究底层源码和复杂实现,重点掌握镜像构建、Dockerfile 编写、容器管理这三大核心能力,能解决实际开发和部署中的问题,就达到了学习目的;后续深入学习 K8s、微服务时,再回头研究底层也不迟。
总结
Docker 是云原生和微服务的基础,也是现代开发者的必备技能,它的核心价值在于实现了应用的 “一次构建,到处运行”,解决了环境不一致、部署繁琐、资源浪费等一系列问题。
学习 Docker 的关键,不在于死记多少命令,而在于理解镜像和容器的核心概念,掌握镜像构建和容器管理的核心操作。本文从零基础出发,用通俗例子拆解所有核心知识点,搭配详细的实操命令,新手跟着学,就能快速入门 Docker。
学会 Docker,后续学习 Kubernetes、服务网格、微服务架构都会轻松很多,一步一个脚印,从 Docker 开始,搭建自己的云原生知识体系吧!
#Docker #云原生 #后端开发 #程序员 #运维 #微服务 #编程学习