Docker容器技术全指南:从概念到实操(含Windows安装与命令速查)

JSON 2026-01-21 14:15:13 399

一、Docker核心概念与架构

1.1 三大核心组件

(1)镜像(Image)

Docker镜像是一个只读的模板,包含运行应用所需的代码、运行时、库、环境变量和配置文件,是创建容器的基础。其核心特点的是分层存储(由多个只读层叠加而成,可被多个镜像共享,节省存储空间)且不可修改(一旦构建完成无法修改,更新需构建新镜像)。类比来看,镜像相当于软件的安装包,例如`nginx`镜像就是包含Nginx服务的“安装模板”。

(2)容器(Container)

容器是镜像的运行实例,是一个独立的、可运行的软件单元。容器在镜像的只读层之上会添加一层可写层,所有运行时的修改都保存在该层;同时通过Linux内核的命名空间(Namespace)实现进程、网络、文件系统的隔离,且无需模拟完整操作系统,直接复用宿主机内核,具备秒级启动、资源占用低(MB级)的轻量特性。类比来看,容器相当于安装好的软件进程,运行`nginx`镜像后,就得到一个Nginx容器实例。

(3)仓库(Repository)

仓库是用于集中存储和分发镜像的服务平台,分为公有仓库和私有仓库两类。其中,Docker Hub是最知名的公有仓库,提供海量免费镜像(如Nginx、MySQL、Redis等);私有仓库(如Harbor)则用于企业内部存储私有应用镜像,保障镜像安全。类比来看,仓库相当于软件的应用商店,用户可上传、下载、搜索镜像。

1.2 核心架构(C/S架构)

Docker采用客户端-服务器(Client-Server)架构,主要包含三大组件,协同完成镜像与容器的全生命周期管理:

  • Docker Client(客户端):提供命令行/API接口,是用户操作Docker的入口,常用`docker run`、`docker ps`等命令与守护进程交互。
  • Docker Daemon(守护进程):运行在宿主机的后台服务,负责接收客户端请求,执行镜像拉取、容器创建、启动等具体操作。
  • Docker Registry(镜像仓库):存储镜像的远程服务,客户端通过守护进程从仓库拉取镜像,或向仓库推送本地构建的镜像。

1.3 Docker与虚拟机(VM)的核心区别

很多人会混淆容器和虚拟机,两者的核心差异在于是否模拟完整操作系统,具体对比如下:

特性
Docker容器
虚拟机(VM)
底层架构
复用宿主机Linux内核
模拟完整硬件和操作系统内核
启动速度
秒级启动
分钟级启动
资源占用
极低(MB级)
较高(GB级)
隔离性
进程级隔离(Namespace),隔离性较弱
硬件级隔离(Hypervisor),隔离性强
镜像体积
小巧(通常<100MB)
庞大(通常>1GB)
跨平台兼容性
依赖宿主机内核(Windows需WSL2),跨内核兼容性有限
完全独立,与宿主机无关,跨平台性更强
部署复杂度
极简,一键部署,无需额外配置操作系统
复杂,需先安装操作系统,再配置应用环境
运维成本
低,仅需维护容器和镜像,无需维护操作系统
高,需单独维护每个VM的操作系统(补丁、升级等)
适用场景
微服务、持续集成/部署、轻量应用快速迭代
独立环境部署、需强隔离的场景(如多租户)、传统应用迁移

1.4 Docker核心优势与应用场景

(1)核心优势

  • 环境一致性:开发、测试、生产环境完全一致,杜绝环境不一致导致的Bug。
  • 快速部署:秒级启动容器,支持大规模集群快速扩容,部署效率远超虚拟机。
  • 资源高效利用:一台宿主机可运行成百上千个容器,资源利用率远高于虚拟机。
  • CI/CD友好:镜像可作为CI/CD流程的交付物,实现自动化构建、测试、部署。
  • 跨平台可移植:一次构建,到处运行,兼容Linux、Windows(WSL2)、macOS、云服务器。

(2)典型应用场景

  • 微服务部署:将微服务拆分为独立容器,通过Docker Compose或Kubernetes编排管理。
  • 开发环境标准化:团队统一使用Docker镜像作为开发环境,避免“本机配置不同”问题。
  • 自动化测试:为每个测试用例创建独立容器,测试完成后销毁,保证测试环境干净。
  • 云原生应用交付:与Kubernetes、Istio等工具配合,实现云平台弹性伸缩与运维自动化。

二、Windows环境下Docker Desktop安装教程(超详细)

Windows平台安装Docker主要通过Docker Desktop实现,该工具集成Docker Engine、Docker Compose、Docker CLI等核心组件,支持Windows 10/11专业版、企业版、教育版,家庭版需通过WSL2兼容运行。以下是完整安装步骤:

2.1 前置条件检查

(1)系统版本要求

系统版本
支持的Docker运行模式
核心依赖
Windows 10 64位 专业版/企业版/教育版(1903及以上)
Hyper-V + 容器功能
系统内置Hyper-V
Windows 11 64位 全版本
Hyper-V + 容器功能 / WSL2
系统内置Hyper-V或WSL2
Windows 10 家庭版
仅支持WSL2模式
需手动安装WSL2

(2)开启硬件虚拟化(BIOS层面)

Docker依赖硬件虚拟化技术,需先在BIOS中开启,步骤如下:

  1. 重启电脑,开机时按快捷键(联想F2、华硕Del、戴尔F2、惠普F10)进入BIOS。
  2. 找到虚拟化选项(Intel芯片为`Intel Virtualization Technology`,AMD芯片为`AMD-V`)。
  3. 将选项设置为`Enabled`,保存BIOS设置并重启电脑。

(3)开启Windows必要功能

① 专业版/企业版/教育版(开启Hyper-V + 容器功能)

  1. 按下`Win + R`,输入`appwiz.cpl`回车,打开“程序和功能”。
  2. 点击左侧“启用或关闭Windows功能”,勾选“Hyper-V(含所有子选项)”“容器”“适用于Linux的Windows子系统”(可选,兼容WSL2)。
  3. 点击“确定”,系统自动安装功能,完成后重启电脑。

② 家庭版(安装WSL2)

家庭版不支持Hyper-V,需通过WSL2运行Docker,步骤如下:

  1. 按下`Win + X`,选择“Windows终端(管理员)”。
  2. 执行命令开启WSL功能:`wsl --install`,自动安装WSL2和Ubuntu发行版。
  3. 安装完成后重启电脑,打开Ubuntu终端,设置用户名和密码(WSL初始化)。
  4. (可选)升级WSL到最新版本:`wsl --update`。
  5. 安装WSL2内核更新包:访问微软官方地址,下载并安装x64版本内核包,执行`wsl --set-default-version 2`设置默认版本。

2.2 下载与安装Docker Desktop

  1. 下载安装包:访问Docker官方下载页,点击“Download for Windows”按钮,下载安装包(约600MB,无需登录即可下载)。
  2. 启动安装:双击`Docker Desktop Installer.exe`,勾选以下选项(默认已勾选,确认即可): Use WSL 2 instead of Hyper-V(家庭版强制勾选,专业版优先勾选)Add shortcut to desktop(添加桌面快捷方式)Add Docker to the PATH(添加到系统环境变量)
  3. 点击“OK”开始安装,耗时5-10分钟(取决于电脑配置),安装完成后勾选“Launch Docker Desktop”,点击“Close and restart”重启电脑。

2.3 Docker Desktop初始化与配置

  1. 首次启动:重启后Docker自动启动,右下角出现鲸鱼图标,图标停止跳动即启动完成;弹出协议窗口时,勾选同意并点击“Accept”,可选择“Skip”跳过Docker账号登录(后续需拉取私有镜像再登录)。
  2. 配置国内镜像源(关键,加速镜像拉取): 右键右下角Docker图标,选择“Settings”。左侧菜单选择“Docker Engine”,在配置文件中添加镜像源: { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com", "https://hub-mirror.c.163.com", "https://mirror.aliyuncs.com" ], "insecure-registries": [], "debug": false, "experimental": false }点击“Apply & restart”,Docker重启后配置生效。
  3. 切换运行模式(专业版专属):进入Settings > General,勾选/取消“Use WSL 2 instead of Hyper-V”,点击“Apply & restart”即可切换Hyper-V与WSL2模式。

2.4 验证安装是否成功

(1)命令行验证

  1. 按下`Win + R`,输入`cmd`回车,打开命令提示符。
  2. 执行以下命令,检查版本: docker --version docker-compose --version 正常输出示例: Docker version 25.0.3, build 4debf41 Docker Compose version v2.24.5
  3. 运行测试容器:`docker run hello-world`,若输出“Hello from Docker!”等内容,说明安装成功。

(2)图形界面验证

打开Docker Desktop,切换到“Containers”页面,可看到`hello-world`容器的运行记录(状态为`Exited`,测试容器运行后自动退出),即验证通过。

2.5 常见问题与解决方案

问题现象
原因
解决方法
启动失败,提示“Hyper-V未开启”
未开启Hyper-V功能或BIOS虚拟化未开启
1. 检查BIOS虚拟化是否开启;2. 重新开启Hyper-V功能并重启
提示“WSL 2 is not installed”
WSL2内核未更新或未设置默认版本
执行`wsl --update`,或手动安装WSL2内核更新包,设置默认版本为2
拉取镜像速度极慢
未配置国内镜像源
按2.3步骤配置镜像源并重启Docker
家庭版无法安装Hyper-V
系统版本不支持
切换到WSL2模式运行Docker
输入`docker`提示“不是内部或外部命令”
安装时未勾选“添加到PATH”
重新安装Docker Desktop,勾选“Add Docker to the PATH”

三、Docker镜像与容器核心操作速查

本部分整理镜像拉取/构建、容器启停/进入等高频操作,按功能分类,方便快速查阅,所有命令均在CMD/PowerShell或Linux终端中执行。

3.1 镜像(Image)核心操作

操作类型
命令
功能说明
示例
搜索镜像
`docker search &lt;镜像名&gt;`
在Docker Hub搜索镜像
`docker search nginx`
拉取镜像
`docker pull <镜像名>:<标签>`
下载镜像,无标签默认拉取`latest`
`docker pull nginx:1.25`;`docker pull nginx`(等价latest)
查看本地镜像
`docker images`
列出所有本地镜像(含ID、标签、大小)
`docker images`;`docker images -q`(仅显示镜像ID)
构建镜像
`docker build -t <镜像名>:<标签> <Dockerfile路径>`
通过Dockerfile构建自定义镜像
`docker build -t my-nginx:v1 .`(`.`表示当前目录Dockerfile)
镜像打标签
`docker tag <原镜像ID/名称> <新镜像名>:<新标签>`
为镜像添加新标签(用于推送仓库)
`docker tag nginx:1.25 myrepo/nginx:v1`
推送镜像
`docker push <镜像名>:<标签>`
推送镜像到Docker Hub/私有仓库(需先登录)
`docker push myrepo/nginx:v1`
删除镜像
`docker rmi <镜像ID/名称>`
删除本地镜像(需先删除依赖容器)
`docker rmi nginx:1.25`;`docker rmi $(docker images -q)`(删除所有镜像)
保存镜像为文件
`docker save -o <保存文件名.tar> <镜像名>`
将镜像导出为tar包(离线传输用)
`docker save -o nginx-1.25.tar nginx:1.25`
导入镜像文件
`docker load -i <镜像文件.tar>`
从tar包导入镜像到本地
`docker load -i nginx-1.25.tar`

3.2 容器(Container)核心操作

操作类型
命令
功能说明
示例
创建并运行容器
`docker run [参数] <镜像名>`
基于镜像创建并启动容器,常用参数:`-d`(后台运行)、`-p 宿主机端口:容器端口`(端口映射)、`--name 容器名`(自定义名称)、`-v 宿主机路径:容器路径`(挂载数据卷)、`--rm`(停止后自动删除)
`docker run -d -p 8080:80 --name my-nginx nginx`;`docker run -it --rm ubuntu /bin/bash`(交互式运行,退出即删除)
查看容器状态
`docker ps`
列出运行中的容器
`docker ps`;`docker ps -a`(列出所有容器,含已停止);`docker ps -q`(仅显示运行中容器ID)
启动容器
`docker start <容器ID/名称>`
启动已停止的容器
`docker start my-nginx`
停止容器
`docker stop <容器ID/名称>`
优雅停止容器(发送SIGTERM信号)
`docker stop my-nginx`;`docker stop $(docker ps -q)`(停止所有运行中容器)
强制停止容器
`docker kill <容器ID/名称>`
强制终止容器(发送SIGKILL信号)
`docker kill my-nginx`
重启容器
`docker restart <容器ID/名称>`
重启容器(先停止再启动)
`docker restart my-nginx`
进入运行中容器
`docker exec -it <容器ID/名称> <命令>`
进入容器执行命令(推荐,不阻塞主进程)
`docker exec -it my-nginx /bin/bash`(进入容器终端)
查看容器日志
`docker logs [参数] <容器ID/名称>`
查看容器运行日志,常用参数:`-f`(实时跟踪)、`--tail 行数`(查看最后N行)
`docker logs -f my-nginx`;`docker logs --tail 100 my-nginx`
容器文件拷贝
`docker cp <容器ID:容器路径> <宿主机路径>`
从容器拷贝文件到宿主机
`docker cp my-nginx:/etc/nginx/nginx.conf ./`
容器文件拷贝
`docker cp <宿主机路径> <容器ID:容器路径>`
从宿主机拷贝文件到容器
`docker cp ./nginx.conf my-nginx:/etc/nginx/`
删除容器
`docker rm <容器ID/名称>`
删除已停止的容器
`docker rm my-nginx`;`docker rm $(docker ps -aq)`(删除所有容器)
查看容器详情
`docker inspect <容器ID/名称>`
查看容器详细配置(IP、挂载、网络等)
`docker inspect my-nginx`

3.3 常用组合命令

功能
命令
停止并删除所有容器
`docker stop $(docker ps -q) && docker rm $(docker ps -aq)`
删除所有未使用的镜像和容器(谨慎使用)
`docker system prune -a`

四、Docker Compose常用命令速查

Docker Compose基于`docker-compose.yml`配置文件,实现多容器应用的一键编排、启动、停止,命令默认在配置文件所在目录执行;若配置文件名非默认,需加`-f 文件名.yml`参数(如`docker-compose -f my-compose.yml up`)。

4.1 基础启动与停止

操作类型
命令
功能说明
示例
启动应用
`docker-compose up [参数]`
创建并启动所有服务容器,常用参数:`-d`(后台运行)、`--build`(启动前重建镜像)、`--scale <服务名>=<数量>`(指定容器实例数)
`docker-compose up -d`;`docker-compose up -d --build`;`docker-compose up -d --scale web=3`
停止应用
`docker-compose down [参数]`
停止并删除容器、网络、网桥,常用参数:`-v`(删除绑定数据卷)、`--rmi <all/local>`(删除镜像)
`docker-compose down`;`docker-compose down -v --rmi local`
查看服务状态
`docker-compose ps [服务名]`
列出所有/指定服务的容器状态
`docker-compose ps`;`docker-compose ps web`

4.2 容器生命周期管理

操作类型
命令
功能说明
示例
启动已创建容器
`docker-compose start [服务名]`
启动之前`down`停止的容器(不创建新容器)
`docker-compose start`;`docker-compose start db`
停止运行中容器
`docker-compose stop [服务名]`
停止容器(不删除,可通过`start`重启)
`docker-compose stop`;`docker-compose stop web`
重启容器
`docker-compose restart [服务名]`
重启运行中的容器
`docker-compose restart`;`docker-compose restart nginx`
暂停容器
`docker-compose pause [服务名]`
暂停容器进程
`docker-compose pause db`
恢复暂停容器
`docker-compose unpause [服务名]`
恢复暂停的容器
`docker-compose unpause db`
删除已停止容器
`docker-compose rm [服务名]`
删除停止的容器(需先`stop`)
`docker-compose rm`;`docker-compose rm -f web`(强制删除)

4.3 镜像相关操作

操作类型
命令
功能说明
示例
构建镜像
`docker-compose build [参数] [服务名]`
构建配置文件中定义的镜像,`--no-cache`(无缓存构建)
`docker-compose build`;`docker-compose build --no-cache web`
拉取依赖镜像
`docker-compose pull [服务名]`
拉取服务所需的镜像(配置中指定的`image`)
`docker-compose pull mysql`
推送镜像
`docker-compose push [服务名]`
推送本地构建的镜像到仓库(需先打标签)
`docker-compose push web`

4.4 日志与调试

操作类型
命令
功能说明
示例
查看容器日志
`docker-compose logs [参数] [服务名]`
查看服务容器日志,`-f`(实时跟踪)、`--tail 行数`(最后N行)
`docker-compose logs -f`;`docker-compose logs --tail 100 web`
进入容器终端
`docker-compose exec [参数] <服务名> <命令>`
进入运行中的容器执行命令(推荐)
`docker-compose exec web /bin/bash`;`docker-compose exec db mysql -uroot -p`
验证配置文件
`docker-compose config [参数]`
校验`docker-compose.yml`语法是否正确
`docker-compose config`;`docker-compose config -q`(仅校验不输出)
查看服务进程
`docker-compose top [服务名]`
查看服务容器内的运行进程
`docker-compose top web`
查看资源占用
`docker-compose stats [服务名]`
实时查看容器CPU、内存、网络等资源占用
`docker-compose stats`

4.5 其他常用命令与组合命令

命令/功能
说明/命令
查看Compose版本
`docker-compose version`
列出Compose管理的镜像
`docker-compose images`
监控容器事件
`docker-compose events [服务名]`(实时监控启动、停止等事件)
一键重启服务(重建镜像)
`docker-compose down && docker-compose up -d --build`
清理所有Compose相关资源
`docker-compose down -v --rmi all --remove-orphans`(容器+镜像+数据卷)

五、后续操作建议

  1. 熟悉基础命令:先掌握镜像拉取、容器启停等核心命令,通过实操(如运行Nginx、MySQL容器)加深理解。
  2. 学习Dockerfile:掌握自定义镜像构建方法,通过Dockerfile定义应用依赖和运行环境,实现镜像标准化。
  3. 实践多容器编排:使用Docker Compose编写`docker-compose.yml`,实现Web、数据库、缓存等多服务协同运行。
  4. 进阶学习Kubernetes:若需大规模容器集群管理,可进一步学习Kubernetes(K8s),掌握容器编排进阶技术。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/568.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Java面向对象编程概念
Java面向对象编程概念
Docker 容器虚拟化管理平台 cSphere 。
windows安装redis并设置密码,IP绑定【提供安装包】
Mysql5.6下载安装,Mysql5.7下载安装Windows64位,绿色安装(解压缩安装)图文安装教程
Linux 安装 Redis 详细步骤讲解
Myecilpse,Eclipse安装Freemarker插件【附件】
SQL外连接剖析
MyEclipse8.5,MyEclipse10,安装ERMaster 建模插件
java组合函数所有组合(代码)
最新文章
文件上传漏洞与防御 4058
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 1444
物联网时代2026年时序数据库选型指南 1151
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 1269
神经网络:从构造到模型训练全链路解析 1168
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 1593
Linux sudo提权完整指南:从基础用法到生产级安全配置 691
XSS 和 CSRF 的本质区别及开发防御全解析 772
JVM垃圾回收(GC)全维度解析:从原理到调优实战 813
Linux动静态库与ELF加载全解析:从实操制作到底层原理 912
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 783114
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 711464
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679993
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562673
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512621
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484794
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 302947
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247433
Elasticsearch教程(一),全程直播(小白级别) 233097
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228329
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...